请简述 CAP 原理
在一个分布式计算系统中,只能同时满足下列的两点:
- 一致性(Consistency):每次访问都能获得最新数据但可能会收到错误响应
- 可用性(Availability):每次访问都能收到非错响应,但不保证获取到最新数据
- 分区容错性(Partition Tolerance):在任意分区网络故障的情况下系统仍能继续运行
网络并不可靠,所以你必须支持分区容错性,并需要在软件可用性和一致性间做出取舍,所以实际的系统只有 CP 或是 AP 这两种:
-
CP:一致性和分区容错性
等待分区节点的响应可能会导致延时错误。
AP -
AP:可用性与分区容错性
响应节点上数据可能并不是最新的;当分区解析完后,写入操作可能需要一些时间来传播。
CP
CA 或是 AP 的抉择是软件设计中必须面对的 trade-off。如果业务需要原子读写,CP 是一个不错的选择;如果业务需求允许最终一致性或当有外部故障时要求系统继续运行,AP 就是一个不错的选择了。具体问题需要具体分析。
针对 Doris 案例,请用 UML 时序图描述 Doris 临时失效的处理过程(包括判断系统进入临时失效状态,临时失效中的读写过程,失效的回复过程)
判断系统进入临时失效状态
应用服务器在访问存储服务时可能会出现访问失效,这时候需要确认存储服务的失效状态;临时失效下的判定步骤如下所示:
- 存储服务访问失效,应用服务则会在间隔一段时间后再次发起访问
- 存储服务器经过 N 次重试,依旧失败,则立即向管理中心发起仲裁
- 管理中心向存储服务发送心跳检测
- 心跳失效,管理中心反馈仲裁,判定存储服务进入临时失效状态
临时失效期间的读写
临时失效期间的读写就和故障节点无关了,只是在写数据时会将数据库操作日志写入临时服务器中。
失效读写临时失效恢复过程
失效恢复期间,读、写、数据恢复会同步发生,但与正常态有所不同:
- 数据恢复:数据将会从临时服务器迁移到故障恢复节点中
- 读操作:依旧只读取正常节点的数据
- 写操作:同时写入正常节点和故障恢复节点
当临时节点的数据全部迁移成功后,失效态结束,所有存储服务按正常态运行;临时节点的数据之后会被删除。
网友评论