我有一个关于最佳实践的快速问题,尤其是以下场景的预期性能:
如果我想从包含基本相同的 sql 数据库的多个服务器查询数据,让每个服务器都提供一个可供单个客户端应用程序使用的 Web 方法是否是合适(且相对较快)的解决方案?
数据只需要在客户端进行整合,其中必须串行(或并行?)使用多个 Web 方法以向客户端提供数据。每个服务器还将作为 ORM 实现 Entity Framework 。
性能是我主要关心的问题,随着我们开始扩展到越来越多的服务器,它会变得非常慢吗?
最佳答案
问题不在于性能,而在于可靠性。随着您需要查询以向客户端返回响应的服务数量的增加,可靠性会降低。假设您有 99% 的数据库可用性(全年因维护、补丁和升级而停机的总时间少于 4 天)。如果您需要查询您的客户看到的 5 个数据库,而实际可用性仅为 95%,那么您的网站每年几乎有 18 天出现故障。 10 个数据库的可用性为 90%(停机 35 天),50 个服务器的可用性直线下降至 60%,这意味着您的网站无法使用。
这就是为什么这种横向扩展场景的驱动力是可靠性,而可靠性只能通过解耦数据库来实现。通常的技巧是为数据库实现异步消息传递总线以进行通信,并让对站点的每个请求仅连接到其本地分片,永远不会为每个请求查询多个数据库。
有关如何大规模完成此操作的更详细说明,请参阅 this presentation how MySpace uses a SQL Server based messaging buss to achieve scalability .
这个 SIGMOD 2009 主题演讲依次介绍了 Facebook 如何取得类似的结果:Building Facebook: Performance at Massive Scale , 使用 memcached 和 MySQL 分区。
关于c# - 使用分布式 Web 服务查询多个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4905064/