Azure SQL 数据库的活动异地复制:
Active Geo-Replication 功能实现了一种机制,可在同一 Microsoft Azure 区域或不同区域(地理冗余)中提供数据库冗余。Active Geo-Replication 将提交的事务从数据库异步复制到最多四个副本不同服务器上的数据库。原始数据库成为连续副本的主数据库。每个连续副本称为活动辅助数据库。主数据库将提交的事务异步复制到每个活动的辅助数据库。虽然在任何给定点,活动辅助数据可能稍微落后于主数据库,但活动辅助数据保证始终与提交到主数据库的更改在事务上保持一致。Active Geo-Replication 最多支持四个活动辅助节点,或最多三个活动辅助节点和一个离线辅助节点。
Active Geo-Replication 的主要好处之一是它提供了数据库级灾难恢复解决方案。使用 Active Geo-Replication,您可以配置高级服务层中的用户数据库,以将事务复制到相同或不同区域内不同 Microsoft Azure SQL 数据库服务器上的数据库。跨区域冗余使应用程序能够从由自然灾害、灾难性人为错误或恶意行为导致的数据中心永久丢失中恢复。
另一个关键好处是活动的辅助数据库是可读的。因此,活动的辅助节点可以充当读取工作负载(例如报告)的负载均衡器。虽然您可以在不同区域中创建活动辅助节点以进行灾难恢复,但您也可以在不同服务器上的同一区域中创建活动辅助节点。两个活动辅助数据库都可用于平衡为分布在多个区域的客户端服务的只读工作负载。
请注意,master-master 没有被提及。副本是可读的,不可写的。所以这个问题真的没有实际意义,因为 SQL Azure 根本不支持你想要的。
另一种方法是应用层分片,让每个租户连接到邻近数据库,但假设数据是不相交的(澳大利亚客户不查看南美项目)。在这里看到这个答案。
您还可以研究Cassandra之类的东西,它确实支持您想要的东西,但它是一个重大的范式转变,您需要托管和管理它。
但你也不得不问:是否需要master-master DB来实现低延迟?您的应用程序中是否经常发生写入?读取延迟很容易得到改善,这就是你有缓存和 CDN 的原因。想想所有阅读这个问题的澳大利亚用户。由用于灾难恢复的异地复制数据库提供服务,而不是来自主-主数据库。请参阅StackOverflow 如何扩展 SQL Server。