架构本质总结(三)
2020-05-21 本文已影响0人
今年花开正美
本来计划写作不是日更的,但是既然能有时间来写,那就坚持日更吧。加油!
序
上一篇文中,总结了下架构是如何通过普适的拆字诀来一步步演进的。今天,我想梳理下因系统拆分后,各存储系统是如何来做数据一致性的。
梳理
下面分别阐述下MySQL、Redis、Zookeeper是如何做分布式部署的数据一致性的。
MySQL
MySQL常用的集群方案有两种,主从和主主。
主从方案的主要实现逻辑是从库读取主库binlog日志,属于半同步的,从库数据存在延迟,甚至可能出现数据丢失的情况。
主主也可以称为双写,具体实现可以根据对数据一致性的要求有以下两种方案:
1、若为CP模型,需要强一致性,则可使用二阶段提交或Saga模型来实现分布式事务。
2、若为BASE的最终一致性,则可使用事务消息或本地消息表来实现分布式事务。
Redis
Resis的集群模式自带的两种为主从和分片。
Redis的主从核心是基于哨兵机制来实现主从切换。而分片和MySQL的主主又是另外一个概念,是从存储上将数据隔离开来。每个分片又需要部署一个Redis主从。
Zookeeper
Zookeeper是分布式场景下数据一致性解决方案中的典型,在CAP理论下追求的是CP。保证数据的强一致性,其集群方案和主主是比较类似的。
Zookeeper中分为Leader节点和Follow节点,其强一致性的核心就是ZAB协议的过半写入才算成功。同时所有写请求全部由Leader节点来分发。最后Zookeeper集群可用性前提也是需要过半机器连通才对外提供服务。
今天先到这吧,粗略的总结下,明天再修正完善下内容。