我正在将单个数据中心.NET应用程序转换为地理分布。当前,单个VM上的IIS中运行着一个Web应用程序。它使用配置中的连接字符串连接到单个数据库服务器。
我已经将config transform用于开发,UAT和生产,这在部署时从构建服务器中应用。
在地理分布式设置中,该Web应用将部署到2个或更多(可能多达10个)不同的数据中心。
每个数据中心将保存地理复制的Azure SQL数据库。
我需要每个数据中心中的每个VM才能访问位于同一数据中心中的Azure SQL数据库。
我不想在我的项目中为每个数据中心创建配置,而无需在每个config转换中指定不同的连接字符串。这是无法维护或扩展的。
| Data centre | VM | DB server |
| ------------- |-----| -------------------------|
| UK South | VM1 | db1.database.windows.net |
| South Central US | VM2 | db2.database.windows.net |
| West US | VM3 | db3.database.windows.net |
| West Europe | VM4 | db4.database.windows.net |
| ... | ... | ... |
如您所见,每个数据库服务器的服务器名称都不同,这是Azure SQL的要求。您不能在不同的数据中心中使用相同的名称,因为该名称是全局名称。
我无法找到将1个连接字符串映射到上述每个db服务器名称的方法。
Azure Traffic Manager能够为您执行geo DNS,但是Azure SQL要求您在连接字符串中(作为“服务器名称”的一部分或与服务器名称一起)包括服务器名称(db1,db2 ...)。 “登录”,例如“ user @ db1”。
答案 0 :(得分:0)
我不知道有任何内置功能可以将SQL Azure地理上分布的数据库与相应的区域进行匹配,以输出正确的连接字符串(我可能错了)。我唯一了解的(具有天蓝色)地理上已知的数据库是CosmosDB。我建议您不要自己编写这种功能,而我怀疑它会很脆弱并且会增加开销,我建议您从另一个方向进行研究。
您提到了您的构建环境。相同的代码根据部署到的区域而具有不同的设置是很普遍的,我通常将它们作为CI \ CD管道的一部分进行管理。部署应用程序(通过管道)时,它会将该区域的设置更新为该区域的一部分部署。如果部署到新区域,则只需使用正确的连接字符串更新CI \ CD。同样的规则适用于dev \ stage等。管理构建中的复杂性,并在其他地方使其保持简单。
答案 1 :(得分:0)
我知道您已经研究过ATM,但是从技术上讲,这可以使用自定义URL和Azure Traffic Manager来完成。这样可以解决连接字符串问题。
获取自定义域并将其映射为Azure ATM。将四个数据库URL添加到ATM作为外部终结点,并且您应该具有足够的Azure SQL连接字符串信息;如果您对自定义ATM网址执行nslookup,则会在“别名”列表中看到4个数据库网址之一,其中包含数据库服务器名称。
使用Azure TM进行地理路由时的Caveat Emptor。在我们不拥有IP的情况下,对我而言这是非常不准确的。您也可以使用性能路由,但这不能100%保证将您路由到最近的DB Server。