如何扩展 SQL Azure?
出于可扩展性原因,我希望在 Azure 云中托管我的 WCF 服务。比如会有一些读取数据的动作。并且它将处于高负载(1000+ 用户/秒)下。 (就像我的上一个问题)
我也有一个限制任何请求 1 秒超时。
我的服务将与 SQL Azure 连接。我选择它是因为延迟很小(根据微软的 基准)
每个实例/数据库可以容纳多少个并发连接 SQL Azure?
当我达到每个实例的连接限制时,是否有能力扩展 SQL Azure?
针对我的场景的其他解决方案、选项?
谢谢。
I want to host my WCF services in the Azure clouds for scalability reasons. For example there will be some read data action. And it will be under High Load (1000+ user/sec).
(Like in my previous question)
Also I have a limitation in 1 sec timeout for any request.
My service will be connected with SQL Azure. I chosing it because of small latency (not more than 7ms according to microsoft's benchmark)
How many concurrent connections can hold SQL Azure per instance/database?
Is there any ability to scale SQL Azure when i will reach the limit of connections per instance?
Other solutions, options for my scenario?
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
需要记住的一件事是,您需要确保最大限度地利用连接池。使用服务帐户而不是不同的登录名是确保正确连接池的重要一步。
另一个考虑因素是 MARS 的使用。如果您有许多请求,您可能希望将它们集中到一个请求中,从而形成一个连接,并返回多个结果集。 在这篇文章中,我讨论如何实现 SQL 语句的单向队列;这可能不适合您,因为您可能期待响应,但它可能会给您一些关于如何实现一批请求以最小化连接数量和最小化等待时间的想法。
最后,您可以看一下我去年编写的这个工具,用于测试 SQL Azure 的连接/语句。该工具会自动关闭连接池以测量并发的影响。 您可以在此处下载。
最后,我还在 codeplex 上编写了 Enzo Shard Library。如果您决定为您的项目调查该库,如果您有任何疑问,请告诉我。请注意,该库也将不断发展以支持 SQL Azure 数据联合的未来功能。
One thing to keep in mind is that you will need to make sure you are leveraging connection pooling to its maximum. Using a service account instead of different logins is an important step to ensure proper connection pooling.
Another consideration is the use of MARS. If you have many requests coming through, you may want to pool them together into a single request, hence a single connection, and return multiple resultsets. In this post I discuss how to implement one-way queuing of SQL statements; this may not work for you as-is because you may be expecting a response, but it may give you some ideas on how to implement a batch of requests to minimize the number of connections and minimize wait time.
Finally you can take a look at this tool I wrote last year to test connection/statements against SQL Azure. The tool automatically turns off connection pooling to measure the effects of concurrency. You can download it here.
Finally, I also wrote the Enzo Shard Library on codeplex. Let me know if you have any questions if you decide to investigate the library for your project. Note that the library will evolve to support the future capabilities of SQL Azure Data Federation as well.
每个 SQL Azure 实例的可用连接数似乎没有直接限制,但 Microsoft 声明他们保留在资源使用被视为“过度”的情况下限制连接的权利。
这里有一些相关信息,还详细介绍了在这种情况下可能发生的情况此处。
一个好的解决方法是考虑“分片”,即根据一些易于定义的标准对数据进行分区并拥有多个数据库。当然,这确实会产生额外的成本。一个简洁的实现在这里: http://enzosqlshard.codeplex.com/
另外:Azurescope
这里有一些有趣的基准: http://azurescope .cloudapp.net/BestPractices/#ed6a21ed-ad51-4b47-b69c-72de21776f6a(不幸的是,2012 年初被删除)It appears there is no direct limit to the number of connections available per SQL Azure instance, but Microsoft state that they reserve the right to throttle connections in situations where resource use is regarded as "excessive".
There's some information on this here, also details on what may happen in this situation here.
A good work-around is to consider "sharding", where you partition your data on some easily-definable criteria and have multiple databases. This does, of course, incur additional cost. A neat implementation of that is here: http://enzosqlshard.codeplex.com/
Also: Azurescope
havehad some interesting benchmarks here: http://azurescope.cloudapp.net/BestPractices/#ed6a21ed-ad51-4b47-b69c-72de21776f6a (unfortunately, removed early 2012)除了 Enzo sql 分片建议之外,还有一些正在构建的 Microsoft 产品/功能可以帮助扩展 SQL Azure。这些是 CTP(最多),但可以通过允许您将负载分散到多个 SQL Azure 数据库来为您提供一些可扩展性选项:
In addition to the Enzo sql sharding suggestion, there are a couple of Microsoft products/features under construction to assist with scaling SQL Azure. These are CTP (at best) but may provide some scalability options for you by allowing you to spread the load across multiple SQL Azure databases: