分布式系统有几种常见的业务场景,比如说Master选举、分布式锁、分布式队列、分布式屏障等等。掌握这些算法来解决分布式系统功能中的问题显得尤为重要。接下来一一介绍这些场景。
Master选举
为了保证系统的高可用。我们常常会将一个工程代码集群部署。在这种情况下当我们需要定时处理一个非常耗时,耗CPU的运算业务算法时。我们不可能让集群中的每一个工程代码都运行一次该业务。这时我们就要在集群中的机器中选出一台机器来运行该业务。将结果计算出来后同步到其他机器上。选机器的算法我们常用Master选举算法。下面介绍基于ZooKeeper实现Master算法的思路。
1.所有客户端在ZooKeeper上创建/master_election/bingding临时节点。只有一个客户端能够创建这个临时节点。那么创建这个节点的客户端就成了Master。同时,其他没有ZooKeeper上成功创建节点的客户端。就在节点/master_election/上创建一个子节点变更Watchar用于监听当前Master机器是否存活。
2.当接受到ZooKeeper上子节点变更的Watcher。说明Master挂了。那么其余客户端重新执行1步骤。
上面算法就可以实现简单的Master选举了。
分布式锁
在分布式环境下单个JVM锁就显得无力了。因为在这种场景下计算单元分布到不同的实例。JVM只能控制同一个JVM的线程同步。接下来介绍基于Zookeeper实现分布式锁的功能。
排他锁实现思路
1.在需要获取排他锁时,所有客户端通过调用create()接口创建/exclusive_lock/lock节点。创建成功被认为获取锁成功,没有获取到锁的客户端在/exclusive_lock/上创建子节点变更的Watcher监听。以便实时监听到lock的变更情况。
2.当获取锁的客户端宕机临时节点自动移除或者正常执行完业务逻辑客户端主动删除临时节点,被认为是锁释放。同时其他客户端执行1的逻辑获取锁。
共享锁
本文介绍了分布式系统中常见的业务场景,包括Master选举、分布式锁等,并详细解释了如何利用ZooKeeper来实现这些功能。
172万+

被折叠的 条评论
为什么被折叠?



