面向互联网用户的业务,做到一定规模,就必然需要考虑规避单机房故障,通常会进行机房多活的规划和设计。
机房多活解决的问题
机房光缆被挖断
机房网络设备、核心设备发生故障
机房发生灾难事件
等极端情况的业务及时切换
机房多活面临的困难
网络延迟
数据不一致
网络分区
业务数据分区保存和访问
理论基础
强一致性:因为网络、性能等原因难以做到强一致性
最终一致性:分布式系统多数采用的是最终一致性
CAP:一致性、可用性、分区可用性(这个没得商量,防止脑裂)
CRDT(Conflict-Free Replicated Data Type): 基于状态和基于操作两种类型,雾计算的理论基础
基于专线网络的实践
一般的互联网公司多采用两地三中心机房布局的方式,三个机房通过专线互通,ping值控制在5ms以内。
数据服务以2:2:1 或 3:3:1 的比例部署,以满足 quorum 的要求。
业务服务以无状态的方式部署,比例不限。
消息队列一般可选择多机房独立部署,不组成集群,以满足性能需求。
基于公网传输的实践
公网传输的ping值一般50ms就算好的,如果基于raft、paxos 等协议进行分布式部署,性能会大打折扣。
一般采用的方式多数为分而治之,再以异步的方式进行数据准实时备份,通过业务网关分配路由。
也有一些实践基于 CRDT 实现的方式,不过开源的方案目前不是很多。
网友评论