远方的灯塔 - 专注于服务端技术分享 远方的灯塔 - 专注于服务端技术分享
首页
  • Java SE
  • Struts2
  • Hibernate
  • MyBatis
  • JAX-WS
  • 并发
  • 分布式
  • Git
  • 文章分类
  • 文章标签
  • 文章归档
  • 《C程序设计语言》
心情随笔
友情链接
给我留言 (opens new window)
关于我
GitHub (opens new window)

Terwer Green

一个后端老菜鸟
首页
  • Java SE
  • Struts2
  • Hibernate
  • MyBatis
  • JAX-WS
  • 并发
  • 分布式
  • Git
  • 文章分类
  • 文章标签
  • 文章归档
  • 《C程序设计语言》
心情随笔
友情链接
给我留言 (opens new window)
关于我
GitHub (opens new window)
  • JavaSE

  • 开源框架

  • Linux

  • Struts2

  • Hibernate

  • Webservice

  • 分布式

    • RPC架构设计及IO模型
    • NIO编程及其三大核心原理
    • NIO三大核心之缓冲区(Buffer)
    • NIO三大核心之通道(Channel)
    • NIO三大核心之选择器(Selector)
    • Netty核心原理
    • 线程模型以及传统IO阻塞模型
    • Reactor模型
    • Netty线程模型
    • Netty核心API介绍
    • Netty入门与异步模型
    • Netty高级进阶之Netty编解码器
    • Netty高级进阶之基于Netty的群聊天室案例
    • Netty高级进阶之基于Netty的HTTP服务器开发
    • Netty高级进阶之基于Netty的Websocket开发网页聊天室
    • Netty高级进阶之Netty中的粘包和拆包的解决方案
    • Nety源码剖析
    • 自定义RPC框架之分布式架构网络通信理论
    • 自定义RPC框架之基于Netty实现RPC框架
    • 分布式架构理论
    • 分布式理论之数据一致性
    • 分布式理论之CAP定理
    • 分布式理论之BASE定理
    • 分布式一致性协议之两阶段提交协议(2PC)
    • 分布式一致性协议之三阶段提交协议(3PC)
    • 分布式一致性协议之NWR协议
    • 分布式一致性协议之Gossip协议
    • 分布式一致性协议之Paxos协议
    • 分布式一致性协议之Raft协议
    • 分布式一致性协议之Lease机制
    • 分布式系统设计策略之心跳检测
    • 分布式系统设计策略之高可用
    • 分布式系统设计策略之容错性
    • 分布式系统设计策略之负载均衡
    • 分布式架构服务调用
    • 分布式服务治理之服务协调
      • 分布式服务治理
        • 服务协调
        • 分布式锁的实现方式
    • 分布式服务治理之服务削峰
    • 分布式服务治理之服务降级
    • 分布式服务治理之服务限流
    • 分布式服务治理之服务熔断
    • 分布式服务治理之服务链路追踪
    • 架构设计基本原则之开闭原则(OCP)
    • 架构设计基本原则之单一职责原则(SRP)
    • 架构设计基本原则之接口隔离原则(ISP)
    • 架构设计基本原则之里式替换原则(LSP)
    • 架构设计基本原则之依赖倒置原则(DIP)
    • 架构设计基本原则知识扩展
    • 分布式架构知识拓展与总结
  • 分布式框架

  • 后端开发
  • 分布式
terwer
2022-05-04
目录

分布式服务治理之服务协调

# 分布式服务治理

# 服务协调

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

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监听到变更事件,判断自己是不是最小节点,如果是获得锁
编辑 (opens new window)
#rpc#lock
上次更新: 2023/02/22, 13:47:25
分布式架构服务调用
分布式服务治理之服务削峰

← 分布式架构服务调用 分布式服务治理之服务削峰→

最近更新
01
解决css部分border被圆角切掉之后圆角的边框消失问题
03-18
02
使用TypeScript开发一个自定义的Node-js前端开发脚手架
03-08
03
Github-Actions使用release-please实现自动发版
03-06
更多文章>
Theme by Vdoing | Copyright © 2011-2023 Terwer Green | MIT License | 粤ICP备2022020721号-1 | 百度统计
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式