为什么要使用zookeeper?
1.各个节点的数据一致性
2.怎么保证任务只在一个节点上执行
3.如果orderservice挂了,其他节点如何发现并接替任务
4.存在共享资源。互斥性,安全性。
缺少一个分布式协调机制
zookeeper的设计猜想
zookeeper主要是解决分布式环境下的服务协调问题而产生的
1.防止单点故障
集群方案(leader,follower)高性能意味着这个集群能够分担客户端的请求流量,高可用意味着集群中的某一个节点宕机以后,不影响整个集群的数据和继续提供服务的可能性。所以这个中间件需要考虑到集群,而且这个集群还需要分摊客户端的请求流量。
2.每个节点的数据是一致的
要实现各个节点的数据一致性,就势必要一个leader节点 负责协调和数据同步操作。如果在这样一个集群中没有leader节点,每个节点都可以接收所有请求,那么这个集群的数据同步的复杂度是非常大。
3.leader挂了怎么办?数据如何恢复?
zookeeper用了基于paxos理论所衍生出来 的ZAB协议
4.如何去保证数据一致性?(分布式事务)
leader节点如何和其他节点保证数据一致性,并且要求是强一致的。在分布式系统中,每一个机器节点虽然都能够明确知道自己进行的事务操作过程是成功和失败,但是却无法直接获取其他分布式节点的操作结果。所以当一个事务操作涉及到跨节点的时候,就需要用到分布式事务,分布式事务的数据一致性协议有2PC协议和3PC协议。
网友评论