ASP.NET 多个数据中心中的应用程序 - 最佳架构?

ASP.NET Application In Multiple Datacenters - Best Architecture?

对于我开发的大多数 ASP.NET/SQL 服务器应用程序,我传统上都遵循 'one app, one server' 架构。我的意思是松散地使用多个服务器和负载平衡器等。但它们都在同一个数据中心。

但是,最近出现了一项要求,即确定一个应用程序的范围,该应用程序将支持美国、中国和俄罗斯的用户。性能将是相当关键的,那么构建这样一个应用程序使其在所有这些领域都表现良好的最明智的方法是什么?

我想到的选项是:

有没有人有处理此问题的最佳方法的经验?

您的前端服务器可以跨数据中心工作,就像它们在单个数据中心内工作一样。虽然有一些差异 - 负载平衡器通常不能跨主机工作。您是否必须使用地理 DNS 将人员路由到最近的数据中心,然后在该数据中心内使用负载平衡器。

出现的主要问题是共享资源的使用,例如数据库或 Web 服务(例如身份验证 Web 服务)。如果你真的需要一个单一的数据库,那么一种架构是有一个单一的主,但多个读取从属分布在不同的数据中心。然后,读取不会因交叉 colo 而受到任何惩罚。写入确实必须跨托管,因此要付出延迟代价。这适用于写入次数远少于读取次数且写入性能可能比读取慢 1-2 秒但仍被视为可接受的大多数站点。例如拿一个电影票预订网站。读取远远多于写入。

通过以下选择可以显着提高交叉混色性能 1. 尽量减少往返次数。例如通过单个事务完成所有写入,而不是通过多次调用 DB 进行多次写入。即使用批量查询、存储过程、批量远程调用等。 2. 尽可能使用乐观 write/eventual 一致性。例如假设您正在记录用户登录的时间。您可以很好地使其异步,最终记录时间。尽管在某些情况下最终一致性是不可接受的。