分布式锁
分布式锁的应用非常广泛,如何设计一个高性能的高可用的分布式锁呢?
锁是一个应用非常广泛的技术,无论在分布式系统中,还是单进程服务中,都有对锁使用的需求。
维基百科对锁的定义
In computer science, a lock or mutex (from mutual exclusion) is a synchronization mechanism for enforcing limits on access to a resource in an environment where there are many threads of execution. A lock is designed to enforce a mutual exclusion concurrency control policy.
大意是:计算机科学领域,锁或者互斥锁是一种同步机制,用于在多线程执行的环境中强制对资源的访问限制。锁旨在强制执行互斥并发控制策略。
锁的应用场景
账户资金转账
分布式锁适用的场景是在集群模式下,多个服务需要并发修改共享数据,为了保证数据的一致性,就需要适用分布式锁来解决。
设计分布式锁需要考虑哪些因素?
性能
可靠性
有哪些锁
进程锁
数据库锁
分布式锁
每种锁都适用在哪些场景
如何实现一个高可用高性能高可靠的分布式锁?要根据场景做 trade-off
相关文章
这篇文章主要介绍对已有系统中分布式锁的改造和优化,是如何做的呢?todo
Chubby
Google 的分布式锁服务
Chubby 是 Google 实现的一个分布式锁服务,它是如何设计的? Chubby 的主要目标是提供一个可靠的锁服务。Chubby并没有对高性能和频繁加锁的场景做优化,这些都是由Google内部的使用场景决定的(可以认为是粗粒度锁,还有细粒度锁,可以理解为频繁加锁解锁的场景,也就是说持有锁的时间的长短的区别) Chubby的一个典型应用场景是在多个应用之间选主,先获取到锁的会成为 Master
Chubby 的设计决策来自:
粗粒度锁,应用不需要短暂的锁定,因为选主不是一件经常发生的事情
除了锁服务之外,还需要小数据的存储能力
允许成千上万的客户端观察变化,所以锁服务需要可以扩容以处理更多的客户端
通知机制,当共享的文件发生变化时,可以及时通知客户端,比如主节点发生变化
支持客户端缓存,用来处理需要主动轮询的客户端
强大缓存的保证,来简化开发人员的使用
zookeeper
https://github.com/sfines/menagerie - ZooKeeper-based Java Concurrency Libraries
Redis
Redisson
Redis是一个kv的内存数据库,功能非常丰富使用Redis实现分布式轻量级协作用Redis实现分布式锁以及Redission
使用分布式锁的特性来实现 Leader 选举具有可行性,在启动多个 replicas 时,竞争锁,竞争到锁的实例被认为是 Leader,其他实例被作为 Fllower 监控 Leader 状态参考 使用 Redis 实现轻量级的分布式系统协调服务Redisson使用Redis实现选主
幂等消费场景
库存预扣减
分布式锁的实现之 Redis 篇 - 小米信息技术部
最后更新于