代码之家  ›  专栏  ›  技术社区  ›  theyetiman

根据Azure SQL数据库的数据中心转换连接字符串

  •  0
  • theyetiman  · 技术社区  · 8 年前

    我已经为开发、UAT和生产使用了配置转换,它们在部署时从构建服务器应用。

    在地理分布设置中,web应用程序将部署到2个或更多(可能最多10个)不同的数据中心。

    每个数据中心都将保存地理复制的Azure SQL数据库。

    我不想在项目中为每个数据中心创建配置,在每个配置转换中指定不同的连接字符串。这是不可维护或可扩展的。

    例子

    | 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 |
    | ...              | ... | ...                      |
    

    正如您所看到的,每个db服务器的服务器名称都不同,这是Azure SQL的一个要求。您不能在不同的数据中心使用相同的名称,因为该名称是全局的。

    最好的方法是什么?是我为每个数据中心创建配置转换的唯一选择,还是有其他方法?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Josh Carlisle    8 年前

    我不知道有哪种内置功能可以将SQLAzure地理分布数据库与相应的区域匹配以输出正确的连接字符串(我可能错了)。我知道的唯一一个地理感知数据库(在azure中)是CosmosDB。我建议从另一个方向着手,而不是自己编写这类功能,我认为这类功能很脆弱,会增加开销。

    您提到了构建环境。同一代码根据部署到的区域具有不同的设置是很常见的,我通常将这些设置作为CI\CD管道的一部分进行管理。当应用程序部署(通过管道)时,它会更新该区域的设置,作为部署到该特定区域的一部分。如果部署到新区域,只需使用正确的连接字符串更新CI\CD即可。同样的规则也适用于dev\stage等。管理构建中的复杂性,并在其他地方保持简单。

        2
  •  0
  •   Jeff Nall    8 年前

    我知道你们已经研究过ATM了,但这在技术上可以通过自定义URL和Azure流量管理器来实现。这将帮助您解决连接字符串问题。

    获取自定义域并将其映射到Azure ATM。将四个数据库URL作为外部端点添加到ATM,您应该有足够的Azure SQL连接字符串信息;如果您在自定义ATM url上执行nslookup,您将在别名列表中看到4个数据库url中的一个,并带有DB服务器名称。

    使用Azure TM进行地理路由时的注意事项。对于我来说,在我们不拥有IP的情况下,这是非常不准确的。您也可以使用性能路由,但这并不能100%保证您将被路由到最近的DB服务器。