架构设计(异地多活)
同城灾备
同城灾备:同一个城市不同地方部署多个机房,一个机房对外服务,另一个机房备份数据
同城冷备:a机房对外服务,b机房定时备份数据
同城热备:a机房对外服务,b机房实时备份数据
同城冷备:定时备份数据库文件,如果来不及备份,数据存在丢失风险
同城热备:实时备份数据库文件,相比冷备,数据不存在丢失风险
同城双活
同城双活
# 解决单点故障
同城灾备:只是备份了数据,当提供服务的机房故障后,服务不可用,存在单点故障;
同城双活:另外一个机房除了备份数据,也可处理部分流量,
当一个机房故障后,另一个机房可继续提供服务
# b机房分流
b机房部署接入层、应用层,使用DNS负载均衡将部分流量切换到b机房;
# 数据库
a机房:所有的写入数据操作在a机房执行,a机房本地也做备份
b机房:数据库为从库,实时同步a机房数据,
当a机房故障后,b机房数据库转换为主库
两地三中心
两地三中心
同城双活:在某城市部署两个机房,同城双活,对外提供服务
异地数据备份:在异地部署机房(位置相距1000km以上),定期做数据备份,防止数据丢失
异地多活
异地多活
# 同城双活问题
当城市大面积停电、地震、火灾发生时,可能导致同一个城市的两个机房都不可用;
将机房部署在相距较远(距离1000km以上)的两个城市,同时对外服务,就可规避这个问题
# 延时问题处理
如果另一个机房都是从库,由于距离较长,数据同步会存在比较大的延时
将另一个机房也做主从部署,两个机房之间定时同步数据(需要使用中间件同步)
# 数据同步问题
如果用户写入同一条数据,一次在a机房,另一次在b机房,
数据同步的时候先后顺序很难区分,容易导致数据冲突,
可在DNS后接入路由层,将流量按照异地规则分流,避免数据冲突
# 路由层流量分流
根据用户分流:部分用户固定转发到a机房、部分用户固定转发到b机房
根据业务分流:a机房固定处理某些业务,b机房固定处理另一部分业务,需要注意业务的跨机房调用问题
根据距离分流:靠近a机房近的用户分到a机房,靠近b机房近的分到b机房