目录
1、服务器的动态列表实现思路
当客户端访问集 群服务的时候,需要有一个服务器列表,此时如果集群中追加了新的主机,或者有主机宕机,则列表要动态且及时的进行处理;此时就可以使用ZK,在ZK中有一个心跳机制,描述的是这个主机是否存活的主要依据
代码实现原理:在服务启动时通过监听或其他形式在程序启动时判断是否存在父节点,没有则创建父节点,有则创建临时子节点,这样的话每次启动新实例都会添加到ZK中,同样由于是临时节点,如果服务器挂掉则会被删除;
|
2、分布式锁
多个服务想要访问同一个资源的时候就需要分布式锁来解决;实现分布式锁可以使用协调组件来完成-ZK,可以使用临时的序列化节点来实现
JKD1.5提供的类CountDownLatch
多台主机或者集群在访问同一个资源的时候,连接ZK并创建临时序列化节点,在创建节点时,节点名称需要做下标记,标记这个节点是哪个线程/客户端/主机的节点;然后获取该父节点下所有的子节点,并排序,取出序列化值最小值的节点,并判断当前线程是否和该最小值相等,如果相等则执行业务代码并删除掉该临时节点;如果不相等则表示该线程不是最先要执行该资源,(等待最小值的线程执行)循环调用该方法直到相等并执行完后关闭节点;
相当于给执行操作的线程创建一个队列,排队执行,先来的先执行;