【Java高级工程师蜕变之路】066 分布式服务治理之服务协调

分布式服务治理

服务协调

分布式协调主要用来解决分布式环境中多个进程之间的同步,让他们有序的去访问临界资源,防止造成脏数据的后果。

image-20220411233413739

分布式锁是分布式协调技术的核心内容。

分布式锁的实现方式

  1. 基于缓存(redis)实现分布式锁

    • 获取锁的时候,使用 setnx 加锁,并使用 expire 命令为锁添加一个超时时间,超过该时间自动释放锁,锁的 value 值为一个随机生成的UUID,释放锁的时候进行判断。

    • 获取锁的时候,还设置一个获取的超时时间,若超过这个时间放弃获取锁。

    • 释放锁的时候,通过UUID判断是不是改锁,若是改锁,则执行 delete 进行锁释放。

      setnx:set一个key为value的字符串,返回1。若key存在,则什么都不做,返回0。

      expire:为key设置一个超时时间,单位为second,超过这个时间锁自动释放,避免死锁。

      delete:删除key

  2. Zookeeper是一个为分布式应用提供一致性服务的开源组件,它的内部是一个分层的文件系统目录树结构,规定同一个目录下只能有一个唯一的文件名,基于Zookeeper实现分布式锁的步骤如下:

    • 创建一个目录mylock
    • 线程A想获取锁就在目录mylock下创建临时顺序节点
    • 获取mylock目录下的所有子节点,然后获取比自己小的兄弟节点,如果不存在说明当前顺序号最小,获得锁
    • 线程B获取多有节点,然后判断自己是不是最小节点,设置监听比自己小的节点
    • 线程A处理完,删除自己的节点,线程B监听到变更事件,判断自己是不是最小节点,如果是获得锁
posted @ 2022-05-04 22:46  灯塔下的守望者  阅读(21)  评论(0编辑  收藏  举报