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

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

多机房部署意味着在不同的 IDC(Internet Data Center)机房中设置多个服务实例,这些服务共享同一份业务数据,并且都可以处理用户的请求流量。这种架构旨在提高系统的高可用性和灾备能力,以应对单一机房或地区发生的网络故障、自然灾害等意外情况。

一个思路是直接跨机房读取 A 机房的从库:

图片图片

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

图片图片

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

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

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

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

逐步迭代多机房部署方案

1. 同城双活

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

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

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

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

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

2. 异地多活

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

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

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

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

图片图片

总结:

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

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

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

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

责任编辑:武晓燕 来源: 二进制跳动
相关推荐

2021-01-21 07:34:16

分布式系统场景

2019-09-10 09:25:27

分布式系统Elasticsear

2023-05-12 08:23:03

分布式系统网络

2021-08-04 20:37:29

分布式系统同步

2022-05-05 12:03:08

分布式系统设计

2023-10-26 09:23:24

分布式架构

2023-02-11 00:04:17

分布式系统安全

2023-05-29 14:07:00

Zuul网关系统

2022-05-11 13:55:18

高可用性分布式弹性

2020-09-21 09:15:12

系统

2017-10-27 08:40:44

分布式存储剪枝系统

2024-03-18 08:50:20

分布式系统机制

2023-10-26 18:10:43

分布式并行技术系统

2018-04-19 10:46:39

3N层框架

2017-08-17 09:18:29

分布式存储面试

2022-08-19 18:03:12

Scheduler

2024-03-19 11:41:12

2019-06-19 15:40:06

分布式锁RedisJava

2019-07-17 22:23:01

分布式系统负载均衡架构

2017-12-05 09:43:42

分布式系统核心
点赞
收藏

51CTO技术栈公众号