c# - 使用分布式 Web 服务查询多个数据库

标签 c# asp.net sql web-services

我有一个关于最佳实践的快速问题,尤其是以下场景的预期性能:

如果我想从包含基本相同的 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/

相关文章:

C# 将 Func<T, List<myClass>> 数组传递给方法

c# - EF 核心 : creating multiple filtered indexes on the same column

c# - 如何更改 StiWebViewer 的语言和文化?

mysql - 如何使用 LIMIT 从 MYSQL 中选择包含一个具有值的元素的数据,例如。 1

C# OAuth OWIN : return custom response when invalid credentials provided to Token endpoint?

c# - ConcurrentDictionary 作为静态缓存

asp.net - 从asp.net mvc 2.0升级到3.0问题

c# - 通过使用 Firebug 删除 'disabled' 属性在 C# 中启用按钮

python - SQLAlchemy 中的右外连接

php - Codeigniter Active record Join 2 x From in 语句