1. 首页 > 头条

跨地域的分布式系统如何做

多机房部署意味着在不同的 IDC(Internet>一个思路是直接跨机房读取 A 机房的从库:

另一个思路是在机房 B 部署一个从库,跨机房同步主库的数据,然后机房 B 的应用就可以读取这个从库的数据了:

涉及跨机房的数据传输时,对机房之间的延迟有较高的要求,这取决于机房之间的距离。一些基本的延迟数字如下:

城市内跨机房:通常在几毫秒(ms)到数十毫秒(ms)之间,取决于城市规模和网络基础设施。

地区间跨机房:跨越不同城市或地区的机房间的延迟通常在几十毫秒(ms)到数百毫秒(ms)之间,具体取决于地理距离和网络连接质量。

国际跨机房:跨越国家或大洲的机房间的延迟通常在数百毫秒(ms)到数秒之间,受到地球的物理距离和国际网络连接的影响。

逐步迭代多机房部署方案

1. 同城双活

数据库部署:主数据库部署在一个机房中(如A机房),而A、B两个机房都设置一个从数据库,通过主从复制同步数据。这样可以实现双机房的数据一致性,并且降低跨机房调用的需求。

缓存部署:在两个机房都部署缓存,查询请求优先读取本地缓存,如果缓存不存在则穿透到本地从数据库中加载数据。这样可以减少对主数据库的直接查询,提高数据访问速度。

RPC服务注册与调用:不同机房的RPC服务向不同的注册中心注册服务组,并且RPC客户端(如Web服务)只订阅同机房的RPC服务组。这样可以最大程度地保证RPC调用发生在本机房内,避免跨机房调用。

其他依赖服务:确保其他依赖服务(如审核、搜索等)也采用双机房部署,并尽量保证只调用本机房的服务,降低调用延迟。

容灾处理:如果某个机房发生故障,可以通过主从切换的方式将另一个机房的从数据库提升为主数据库,以达到容灾的目的。同时,RPC服务和其他依赖服务也可以在另一个机房中继续提供服务,保证系统的可用性。

2. 异地多活

异地机房部署异地机房应选择与主机房距离较远的位置,例如上海、广州等城市,以降低自然灾害对系统可用性的影响。

数据同步方案:采用两种同步相结合的方式,即基于存储系统的主从复制和基于消息队列的方式。主库部署在主机房,从库部署在异地机房,并通过主从复制实现数据同步。同时,对于缓存数据、HBase等,采用基于消息队列的方式进行同步。

数据读取优化:为了减少跨机房数据传输的延迟,对用户进行分片,使一个用户的读写操作尽量在同一个机房中进行。同时,在服务调用和数据读取时,优先选择本机房的服务和数据,确保服务调用尽量在本机房内完成。

服务调用优先级:对于一些需要跨机房读取数据的场景,如用户查看订单信息,优先保证服务调用和数据读取在本机房中进行,即使读取的是跨机房从库的数据,也可以接受一定的延迟。

总结:

允许有跨机房数据写入的发生,但强调数据的读取和服务的调用应尽量在同一个机房中进行,以确保最低的延迟。这种方案适用于同城多机房的延迟在1ms~3ms范围内的情况,且相对简单易行。

避免跨机房同步的数据写入和读取,采取异步的方式将数据从一个机房同步到另一个机房。这种方案适用于异地机房的延迟在50ms以下的情况,要求跨机房数据同步的延迟较低。

多机房部署是一个在业务发展到一定规模、对机房容灾有需求时才考虑的方案,需要谨慎权衡利弊。在可以避免的情况下尽量不要进行多机房部署,因为这会增加系统的复杂性和维护成本。

异地多活架构在实现时过于复杂,很少有公司能够搭建一套真正的异步多活架构。因此,在没有足够的技术实力和资源支持的情况下,不建议轻易尝试异地多活架构。

本网站的文章部分内容可能来源于网络和网友发布,仅供大家学习与参考,如有侵权,请联系站长进行删除处理,不代表本网站立场,转载者并注明出处:https://www.jmbhsh.com/toutiao/34330.html

联系我们

QQ号:***

微信号:***

工作日:9:30-18:30,节假日休息