分布式内参:玩转分布式一致性,迎接云计算时代
备注:分布式内参,顾名思义,仅对站长徒弟公开。站长收徒的内容,看似平淡无奇,实则高深莫测。以MyBatis为例,一个零基础的菜鸟,短则一两周、长则一个月就能玩转它,但是MyBatis中文网做了两年多,两者的深度完全不在一个层面。
1、简介:
分布式内参的特色是“分布式理论学习+ZooKeeper学习+动手实战”,其内容延续了站长的一贯风格---严谨,务实,有灵性。另外,如同站长对红黑树的“红黑”两色源于对数表的考证一样,分布式内参系列有很多独一无二的考证内容。
不同于某些培训机构,先教分布式事务的几个分支:XA、2PC、3PC、TCC、Saga、事务消息、最大努力事务,然后在对介绍市面的一些开源框架做一些介绍。这样做看似高大上,其实泛泛而谈,跟读一遍说明书一样,并没有什么收获。当然,萝卜青菜各有所爱,有的人可能就喜欢这样学习。由于站长是大数据出身,看问题不同于电商人士,更侧重于内功修炼和心法提升,所以侧重于“分布式理论学习+ZooKeeper学习+动手实战”。
2、分布式理论节选
分布式系统的进化史:主备->主从->领导者-学习者(ZooKeeper)
2.1、主备模式介绍
主即主机,备即备机。顾名思义,主机当然是以它为主了,读写都是主机上,而备机只用作备用,默默的在背后同步主机的数据,时刻待命着等待主机挂了之后取而代之。因此在主机还活着的情况下,备机的唯一使命就是同步主机的数据,不对外提供服务。
优点:简单,主备之间只有数据同步,不需要考虑别的情况。很简单的配置一下,再搞一台服务器就能组成主备架构了。
缺点:备机等于就拿来备份,浪费了备机这台服务器的资源。
2.2、主从模式介绍
主即主机,从即从机。从机和备机的区别在于:从机得除了同步数据之外还得干活,对外提供读的操作。
优点:充分利用了资源,从机不想备机这么爽了,还得出来干活,对外提供读操作。而且在主机挂了的时候,如果没任命新机主之前,读操作还是能用的。
缺点:
(1)客户端需要多个判断,也就是不同操作需要发放给不同服务器,上图主机提供读写,有时候读写分离了,主机就只提供写。
(2)主从延迟,读操作分配给从库,就会存在数据同步的延迟问题,比如某个人下单之后,再次访问走的是从机,这时候数据还未从主机同步过来,那可不让人很难受了。
2.3、主备和主从模式的致命缺点
通常情况下无法做到RPO=0,即主节点发生故障或者灾难时有交易数据的损失。
可能有人会说:主备/主从复制技术也能实现 RPO=0!是的,从理论上讲主备/主从复制技术是可以利用强同步模式做到RPO=0,但实际应用中,像银行核心系统这样的关键业务里却不会采用。为什么呢?以主从模式为例,因为这种模式将主节点和从节点以及主从节点之间的网络环境紧紧地绑在了一起,主节点的稳定性将不再由它自己决定,而要同时看从节点和网络环境的脸色:一旦从节点或者网络环境稍微抖动一下,主节点的性能就会受到直接影响。
如果主节点和从节点之间是跨机房甚至跨城市部署,发生这种问题的概率会更大,影响也会变得更加显著。从某种程度上讲,和单节点模式相比,这种模式下主节点的稳定性不但没有增加,反而是降低了。
2.4、领导者-学习者
ZooKeeper 中没有选择传统的 Master/Slave 概念,而是引入了Leader、Follower 和 Observer 三种角色。
其主要的特点是:全局数据一致: 集群中每个服务器保存一份相同的数据副本,Client无论连接到哪个服务器,展示的数据都是一致的。
3、实战介绍:
TinyPaxos项目实现了两阶段提交,完成选主操作,达成了一致性共识。
由于涉及到多节点,多角色,还有多轮投票,所以代码的逻辑有点绕,有一定的难度。不过,正因为有难度,所以才有门槛,才能打造个人核心竞争力。简单的东西,大家都会,市场上就不值钱了。
通过学习和掌握TinyPaxos项目,远比了解市面上开源框架更有意义。
部分代码如下所示:
4、学习时间:
一个月能掌握吗?不可能。如同2PC两阶段提交一样,学习的过程建议分为两个阶段:
第一个阶段:先学习两个月。
第二个阶段:来年再学习两个月。
总之,收益和付出是成正比的,你付出了一周的成本,那么收益就绿豆点大小,你付出了两年的成本,打造的是核心竞争力。