我们有一个云服务,它从用户那里获取请求,将数据(两个参数)传递给表实体,并将它们放入云表中(使用BatchTableOperations
到InsertOrReplace
行)。方法很简单,尽量保持轻松快速(分区键和parttionkey/rowkey对问题得到控制)。
我们需要云服务来处理大约10k到15k的"并发"请求。我们首先使用队列来获取用户数据,并使用Worker Role来处理队列消息并将其放入SQL中。尽管没有出现错误,也没有丢失数据,但处理速度太慢,无法满足我们的需求。现在我们正在尝试云表,看看我们是否可以更快地处理数据。请求量越少,处理速度就越快,但当我们收到更多请求时,就会出现错误,数据也会丢失。
我已经在云服务所在的同一虚拟网络中设置了一些虚拟机进行测试,以防止防火墙阻止请求。一个有1000个线程和5个循环的jMeter测试,得到0%的错误。来自2个虚拟机的相同测试也可以。添加第三台机器会导致第一个错误(0.14%的请求得到服务不可用503个错误)。来自10台机器、1000个线程和2个循环的大规模测试得到大量503和/或连接拒绝错误。我们已经尝试将云服务扩展到10个实例,但这对结果几乎没有影响。
我有点纠结于这个问题,不知道我是否用正确的工具来解决这个问题。欢迎提出任何建议。
此问题可能与存储级别的节流有关。请在此处查看Windows Azure存储团队指定的可扩展性目标:http://blogs.msdn.com/b/windowsazurestorage/archive/2012/11/04/windows-azure-s-flat-network-storage-and-2012-scalability-targets.aspx.您可能想尝试进行负载测试,同时考虑这些可伸缩性目标。