我对以下场景中的最佳做法,特别是预期的表现有一个简短的问题:
如果我想查询来自包含示意性身份sql数据库的多个服务器的数据,是否会让每个服务器提供一个单一客户端应用程序可以使用的Web方法是一个合适的(并且相对快速)的解决方案?
数据只需要在客户端进行整合,其中必须连续(或并行?)使用多个Web方法来向客户端提供数据。每个服务器也将实现Entity Framework作为ORM。
性能是我的主要关注点,当我们开始扩展到越来越多的服务器时,它会变得过慢吗?
答案 0 :(得分:1)
问题不在于性能,而在于可靠性。由于您需要查询以返回对客户端的响应的服务数量增加,因此可靠性会降低。假设您有99%的数据库可用性(整年维护,补丁和升级的总停机时间少于4天)。如果您需要查询客户看到的5个数据库,实际可用性仅为95%,那么您的网站每年将近18天。 10个数据库的可用性为90%(35天下降),50个服务器暴跌至60%,这意味着您的站点无法使用。
这就是为什么这种横向扩展方案的驱动力是可靠性,这只能通过解耦数据库来实现。通常的技巧是为数据库实现异步消息传递buss进行通信,并且每个对站点的请求只能在其本地分片上连接,而不是每个请求都要查询多个数据库。
有关如何大规模完成此操作的详细说明,请参阅this presentation how MySpace uses a SQL Server based messaging buss to achieve scalability。
这个SIGMOD 2009 Keynote反过来呈现了Facebook如何使用memcached和MySQL分区获得类似结果:Building Facebook: Performance at Massive Scale。
答案 1 :(得分:0)
如果您的示意图相同的数据驻留在不同的数据库中,那么您是否已查看表分区并将所有数据存储在一个数据库中?这可能有所帮助。
在您当前的场景中,我建议您使用ORM / ADO.Net从不同的数据库服务器获取数据,然后在应用程序中逻辑合并它们。
在SQL Server 2005 there are ways中通过Web服务公开数据,但我不建议因为您跨越应用程序边界而因为Web服务本身会给您带来性能损失。