CloudNativeEra
  • Introduction
  • 名词解释
  • Computer Science
    • Computer Organization
      • CPU
      • 二进制、电路、加法器、乘法器
      • 编译、链接、装载
      • 存储器
      • IO
    • Operating System
      • 操作系统基础知识
      • 系统初始化
      • 进程管理
      • Everything about Memory
      • 文件系统
      • 并行编程
      • Linux
        • CPU
        • IO 多路复用
        • DMA IO and Linux Zero Copy
    • Computer Network
      • 网络相关命令
      • 评估系统的网络性能
      • 网络抓包
      • Linux 最多支撑的 TCP 连接
      • 网络虚拟化
      • DHCP 工作原理
    • Data Structure and Algorithm
      • 题目列表
      • Summarize
        • 方法总结
        • 二分思想
        • 树的演化
        • 算法思想总结
      • Data Structure
        • Data Struct - Array
        • Tree
        • Heap
        • Hash
        • 字符串
      • Algorithm
        • Sorting Algorithm
        • 查找
        • 贪心算法
        • 动态规划
        • 位运算
      • Practice Topics
        • Data Struct in SDK
        • Topic - Tree
        • Topic - Graph
        • Topic - 滑动窗口
        • 剑指 Offer 题解
    • 并发编程
      • 并发模式
      • 并发模型
  • 系统设计
    • 软件设计
      • 软件架构
      • 编程范式
      • 系统设计题
      • 设计原则
      • 计算机程序的构造和解释 SICP
    • 领域驱动设计
      • 应用:在线请假考勤管理
      • 应用: library
    • 微服务与云原生
      • Designing and deploying microservices
      • 容器技术
      • Docker
      • Etcd
      • Kubernetes
        • Kubernetes - Mapping External Services
      • Istio
      • 监控
    • 分布式系统
      • 分布式理论
      • 分布式事务
    • 后端存储设计
      • 缓存设计
      • 数据库架构设计
    • CI/CD
    • 设计最佳实践
    • 测试
    • 安全
    • 综合
      • 开发实践
      • 分布式锁
      • 分布式计数服务
      • 弹幕系统设计
      • 消息队列设计
      • 分布式ID生成算法
      • 限流设计
      • 网关设计
      • 通用的幂等设计
      • 分布式任务调度
        • Timer
        • ScheduledExecutorService
        • Spring Task
        • Quartz
      • 交易系统
      • 权限设计
  • 编程语言
    • 编程语言
    • C & C++
    • Java
      • JVM
        • JVM Bytecode
      • Java 核心技术
      • Java 8 新特性
      • Java 集合框架
      • Java NIO
      • 并发编程
        • 线程生命周期与线程中断
        • 三个线程交替打印
        • 两个线程交替打印奇偶
        • 优雅终止线程
        • 等待通知机制
        • 万能钥匙:管程
        • 限流器
        • 无锁方案 CAS
    • Java 源码阅读
      • Unsafe
      • 异步计算 Future
      • Java Queue
      • CoalescingRingBuffer 分析
      • Java Collections
        • PriorityQueue 分析
        • HashMap 分析
        • TreeMap
    • Golang
    • Python
  • 框架/组件/类库
    • Guava
      • Guava Cache
      • Guava EventBus
    • RxJava
    • Apache MINA
    • Netty
      • 网络 IO 模型
      • Netty 生产问题
    • Apache Tomcat
    • MyBatis
    • 限流框架
    • Spring Framework
      • Spring Core
      • Spring 事务管理
    • Spring Boot
    • Spring Cloud
      • Feign & OpenFeign
      • Ribbon
      • Eurake
      • Spring Cloud Config
    • FixJ
    • Metrics
    • Vert.x
  • 中间件
    • Redis
      • Redis 基础
        • Redis 数据结构设计与实现
        • Redis 高性能网络模型
      • Redis checklist
      • 应用案例 - Redis 数据结构
      • 应用案例 - Redis 缓存应用
      • 应用案例 - Redis 集群
      • Redis 客户端
      • Redis 生产案例
        • [译] 在 Redis 中存储数亿个简单键值对
    • MySQL
      • MySQL 基础
      • MySQL Index
      • MySQL Transaction
      • MySQL 优化
      • MySQL 内核
      • MySQL Command
      • MySQL Checklist
      • MySQL Analysis Tool
      • 实现 MySQL
    • State Machine
    • 数据库连接池
    • MQ
      • 高性能内存队列 Disruptor
      • Kafka
      • Pulsar
      • RocketMQ
        • Broker 的设计与实现
      • NSQ
  • 实际案例
    • 线上 Case
      • Request Aborted
      • MySQL - Specified key was too long
      • Java 应用 CPU 100% 排查优化
      • 频繁 GC 导致的 Java 服务不响应
      • 导出优化
  • 大数据
    • 流计算
    • Flink
  • 其他
    • 工具
    • 读书
      • 设计数据密集型应用
      • 实现领域驱动设计
      • 精通比特币
      • 提问的智慧
    • 论文
    • 工程博客
    • 阅读源码
    • 面试
      • 如何在最短的时间里对对方有个全面的了解
    • 分享
    • 软技能
    • Todo
  • Blog
    • #算法
      • 查找
      • 位运算
      • 树
    • #架构
      • 1- 通信
    • Design & Dev & Opt
      • High Performance Data structure Design
  • Tiny Project
    • A Simple WeChat-like Instant Messaging Platform
由 GitBook 提供支持
在本页

这有帮助吗?

  1. 系统设计
  2. 综合

分布式锁

分布式锁的应用非常广泛,如何设计一个高性能的高可用的分布式锁呢?

上一页开发实践下一页分布式计数服务

最后更新于4年前

这有帮助吗?

锁是一个应用非常广泛的技术,无论在分布式系统中,还是单进程服务中,都有对锁使用的需求。

维基百科对

In , a lock or mutex (from ) is a mechanism for enforcing limits on access to a resource in an environment where there are many . A lock is designed to enforce a policy.

大意是:计算机科学领域,锁或者互斥锁是一种同步机制,用于在多线程执行的环境中强制对资源的访问限制。锁旨在强制执行互斥并发控制策略。

锁的应用场景

  1. 商品库存超卖问题:

  2. 账户资金转账

分布式锁适用的场景是在集群模式下,多个服务需要并发修改共享数据,为了保证数据的一致性,就需要适用分布式锁来解决。

设计分布式锁需要考虑哪些因素?

  1. 性能

  2. 可靠性

有哪些锁

  1. 进程锁

  2. 数据库锁

  3. 分布式锁

每种锁都适用在哪些场景

如何实现一个高可用高性能高可靠的分布式锁?要根据场景做 trade-off

相关文章

这篇文章主要介绍对已有系统中分布式锁的改造和优化,是如何做的呢?todo

Chubby

Google 的分布式锁服务

Chubby 是 Google 实现的一个分布式锁服务,它是如何设计的? Chubby 的主要目标是提供一个可靠的锁服务。Chubby并没有对高性能和频繁加锁的场景做优化,这些都是由Google内部的使用场景决定的(可以认为是粗粒度锁,还有细粒度锁,可以理解为频繁加锁解锁的场景,也就是说持有锁的时间的长短的区别) Chubby的一个典型应用场景是在多个应用之间选主,先获取到锁的会成为 Master

Chubby 的设计决策来自:

  1. 粗粒度锁,应用不需要短暂的锁定,因为选主不是一件经常发生的事情

  2. 除了锁服务之外,还需要小数据的存储能力

  3. 允许成千上万的客户端观察变化,所以锁服务需要可以扩容以处理更多的客户端

  4. 通知机制,当共享的文件发生变化时,可以及时通知客户端,比如主节点发生变化

  5. 支持客户端缓存,用来处理需要主动轮询的客户端

  6. 强大缓存的保证,来简化开发人员的使用

zookeeper

Redis

Redisson

  • 幂等消费场景

  • 库存预扣减

Chubby 的系统架构有两个主要的组件,一个是 Chubby master,一个是 Chubby client 参考: 论文 读了一遍,没有读太懂

- ZooKeeper-based Java Concurrency Libraries

Redis是一个kv的内存数据库,功能非常丰富

使用分布式锁的特性来实现 Leader 选举具有可行性,在启动多个 replicas 时,竞争锁,竞争到锁的实例被认为是 Leader,其他实例被作为 Fllower 监控 Leader 状态参考

- 小米信息技术部

锁的定义
computer science
mutual exclusion
synchronization
threads of execution
mutual exclusion
concurrency control
https://segmentfault.com/a/1190000022935064
用 Redis 实现分布式锁
https://github.com/sfines/menagerie
Zookeeper vs Chubby
https://laptrinhx.com/implementation-of-distributed-lock-with-zookeeper-326421370/
https://martin.kleppmann.com/2016/02/08/how-to-do-distributed-locking.html
https://programmer.group/zookeeper-distributed-lock-of-dead-java-synchronization-series.html
使用Redis实现分布式轻量级协作
用Redis实现分布式锁以及Redission
使用 Redis 实现轻量级的分布式系统协调服务
Redisson
使用Redis实现选主
redis vs zk
如何设计更优的分布式锁
分布式锁的实现之 Redis 篇
Chubby: A lock service for distributed coordination
The Chubby lock service for loosely-coupled distributed system
Chubby lock service 论文的翻译
Chubby 的锁服务