netty集群简单的集群方案:zk用来实现服务发现的功能,通过高性能的netty网络框架作为服务器,注册到zk中,client请求到zk中选取可用的netty服务器,选取策略有:轮询、哈希、IP分组、加权分组(均衡负载和服务发现的功能),netty服务器关闭时主动到zk注销。
ZAB算法:
zookeeper官方文档说明,zab算法提供崩溃可恢复的原子消息广播算法,paxos是一种通用的分布式一致性算法。zab的目标是构建一个分布式数据主备系统,针对数据主备系统。paxos的目的是构建一个分布式一致性的状态系统,在各个node节点上的各种状态的一致性。
zap的原理:
1 , zk选取一个主服务器处理客户端的请求,主服务器使用zab协议原子广播协议,通过proposal通知其他服务器端数据状态的改变。
2 , 在分布式应用中,事务A可能依赖于事务B、事务C,所以zk需要保证在处理变更A时,B和C变更已经被执行了。
3 , 考虑到任何主进程都有可能崩溃或者宕机,所以需要考虑主进程在上述情况下,分布式系统仍然能够正常工作。
zab协议的处理流程:
zk定义了leader、follower、observer服务器,leader负责协调处理所有client事务,leader将客户端事务转变为proposal事务,leader将这个proposal转发给其他follower,leader等待其他follower正确反馈,之后leader会向所有follower下发commit消息,提交proposal,处理proposal事务。
zab协议具体内容:
zab协议主要包括两种基本的模式:崩溃恢复、原子广播协议、数据同步。
原子广播:leader服务器向所有follower服务器原子广播。
崩溃恢复:当一个leader与过半的follower失去联系时,zookeeper集群即认为leader处于崩溃状态,follower会elect一个新的leader。
数据同步:当选举出行的leader服务器时,需要保证日志中的所有proposal是否已经半数通过了,即所有的proposal事务是否已经表决了。
zab算法描述:
zab算法主要分为原子广播和崩溃恢复,细分为三个阶段,分别为discovery、sync、broadcast。
discovery主要是leader选举的过程、准leader、follower。
sync:
广播的过程:接收客户端的请求,进行消息广播流程。