出于可扩展性的原因,我想在Azure云中托管我的WCF服务。例如,将有一些读取数据操作。它将处于高负载(1000+用户/秒)下。(就像我之前的问题一样)
此外,我对任何请求都有1秒超时的限制。
我的服务将与SQL Azure连接。我选择它是因为延迟小(根据微软的基准,不超过7ms)
每个实例/数据库可以容纳多少个SQL Azure并发连接?
当我达到每个实例的连接数限制时,是否有能力扩展SQL Azure?
其他解决方案,我的场景的选项?
谢谢。
需要记住的一件事是,您需要确保最大限度地利用连接池。使用服务帐户而不是不同的登录是确保正确连接池的重要步骤。
另一个考虑因素是MARS的使用。如果有许多请求通过,您可能希望将它们汇集到一个请求中,从而形成一个连接,并返回多个结果集。在这篇文章中,我讨论了如何实现SQL语句的单向排队;这可能不适用于您,因为您可能期望得到响应,但它可能会让您了解如何实现一批请求,以最大限度地减少连接数量并最大限度地缩短等待时间。
最后,您可以看看我去年编写的这个工具,该工具用于针对SQLAzure测试连接/语句。该工具会自动关闭连接池以测量并发性的影响。你可以在这里下载。
最后,我还在codeplex上写了Enzo Shard Library。如果你决定为你的项目调查图书馆,如果你有任何问题,请告诉我。请注意,该库将不断发展,以支持SQL Azure Data Federation的未来功能。
每个SQL Azure实例的可用连接数似乎没有直接限制,但微软表示,在资源使用被视为"过度"的情况下,他们保留限制连接的权利。
这里有一些关于这方面的信息,也有关于这种情况下可能发生的细节。
一个很好的解决方案是考虑"分片",即根据一些易于定义的标准对数据进行分区,并拥有多个数据库。当然,这会产生额外的成本。这里有一个巧妙的实现:http://enzosqlshard.codeplex.com/
此外:Azurescope在这里有一些有趣的基准:http://azurescope.cloudapp.net/BestPractices/#ed6a21ed-ad51-4b47-b69c-72de21776f6a(不幸的是,2012年初被删除)
当我达到每个实例的连接数限制时,是否有能力扩展SQL Azure?
除了Enzo sql分片建议之外,还有一些微软产品/功能正在构建中,以帮助扩展sql Azure。这些是CTP(充其量),但通过允许您在多个SQL Azure数据库中分散负载,可能会为您提供一些可扩展性选项:
- SQL Azure联合会-http://convective.wordpress.com/2011/05/02/sql-azure-federations/
- SQL Azure数据同步http://www.microsoft.com/windowsazure/sqlazure/datasync/