百发失一,不足谓善射;千里蹞步不至,不足谓善御;伦类不通,仁义不一,不足谓善学。学也者,固学一之也。一出焉,一入焉,涂巷之人也;其善者少,不善者多,桀纣盗跖也;全之尽之,然后学者也。
常用的注册中心对比
name | 协议 | 语言 |
---|---|---|
zk | cp(zab) | |
eureka | ap | java |
nacos | cp && ap | java |
etcd | cp(raft) | go |
consul | cp(raft) | go |
https://mp.weixin.qq.com/s/MoVNY7i6NeHQ7aqp1cYytg
https://mp.weixin.qq.com/s/Mg3LLVdVtKqOQLIxrOvVLw
ap和cp区别
-
cp
集群中有master,节点挂掉了。其他节点会选举新的主节点,期间可能几分钟,是挂掉的状态。 -
ap
强调可用性,集群节点都是平等的。节点失败,会启用其他的节点,只有有一台能用,就可以继续使用。
zk
分布式协调服务,基于ZAB算法实现,内部维护了一个树状节点,提供了节点修改通知机制。cp,强一致性行,主节点挂了,会重新选主,期间中断服务。
节点分类
有序无序,临时非临时。
临时节点,在客户端创建后不断心跳检测,断开链接后消失。dubbo
注册中心。hadoop
高可用。-
分布式锁
- 排他锁
多机器创建临时节点,成功的是获取了,删除节点,锁释放。 - 有序锁
创建有序临时节点,最小的获取到了锁,删除后,后面顺序的获取锁。 - 选主
和排他锁一样,获取锁就是master
,中断后节点消失,通知其他节点,争抢当master
。
- 排他锁
内部
选主,主节点挂了,子节点会进行投票,生成一个事务id,id大的为主节点,一样就看节点id大的主节点。ZAB
原子广播,保证节点数据一致性。节点分为主,从,观察。
从是可以成为主的,观察节点不行。读操作在从,观察节点可以,写的话得主节点来。举个例子,写事务123,会同步到从节点和观察,同步超过一半,返回ack。这时候主节点挂了,比较从节点中的事务id,谁的大说明谁的新,就选谁是master
。
处理脑裂
分区,123,4567。原来4是主,现在挂了,开始选主,分别选出来1和6,就发生脑裂了。所以zk要求要检查过半节点存活才能,继续对外服务。
但是4是假死呢,每次选主都有个纪元值,4正常了也不能当master
了因为纪元值小于新的master。
https://www.jianshu.com/p/809cbee85109
eureka
client
定时和server
发送请求续约,时间内没有收到续约,就剔除client
。
15分钟内85%没有续约,则认为server
可能是网络异常,进入保护模式,期间不会再剔除client
。