分布式锁机制
2016-04-15 08:26
369 查看
摘要: 最近的业务用到了远程资源,并且该资源的操作必须是原子性的,同时只能有一个使用者。所以只能对该资源进行加锁,因为应用是分布式的,所以在应用要获取远程资源,必须首先获得锁。
最近的业务用到了远程资源,并且该资源的操作必须是原子性的,同时只能有一个使用者。因为应用是分布式的,所以在应用要获取此类远程资源,必须首先获得锁。
在网上查了许多分布式锁的实现方式,总是感觉使用起来很麻烦,或者就是太过于蹩脚,趁着自己有时间,打算实现一个分布式锁管理系统。
需求点:
1.每个应用通过分布式管理系统提供的API与管理系统建立联系,这种联系是基于长连接的,方便管理系统通知应用当前锁的状态,而不是让每个应用去轮询锁的状态。
2.每个资源对应于一个锁,应用在请求资源时,必须成为锁的拥有者,如果成功成为锁拥有者,才能去申请使用资源。
锁的申请流程:
1.多个应用申请获得锁,每个申请会被锁管理系统存放到一个申请队列
2.队列中最先发送申请的应用将成为锁的拥有者
3.锁管理系统通知队列中第一个应用成功申请到锁,通知队列中其他的应用申请锁失败。
4.在应用使用完资源之后,要记得释放锁。
5.在锁释放时,锁管理系统收到锁释放通知,然后把锁状态设置为空闲,然后通知队列中正在等待锁的应用。
6.等待锁的应用收到锁释放通知后,会重新发送锁申请,这时整个状态又回到了流程1.
主要的技术点:
1.锁管理系统和资源是完全解耦的,每个资源对应的锁用一个Key来标识,每次申请锁时,把锁的Key发过来即可。
2.锁管理系统基于c/s架构,采用netty框架实现。
3.提供API给应用,供应用申请锁
初步构想已经完成,代码待系统稳定后,再开源。
最近的业务用到了远程资源,并且该资源的操作必须是原子性的,同时只能有一个使用者。因为应用是分布式的,所以在应用要获取此类远程资源,必须首先获得锁。
在网上查了许多分布式锁的实现方式,总是感觉使用起来很麻烦,或者就是太过于蹩脚,趁着自己有时间,打算实现一个分布式锁管理系统。
需求点:
1.每个应用通过分布式管理系统提供的API与管理系统建立联系,这种联系是基于长连接的,方便管理系统通知应用当前锁的状态,而不是让每个应用去轮询锁的状态。
2.每个资源对应于一个锁,应用在请求资源时,必须成为锁的拥有者,如果成功成为锁拥有者,才能去申请使用资源。
锁的申请流程:
1.多个应用申请获得锁,每个申请会被锁管理系统存放到一个申请队列
2.队列中最先发送申请的应用将成为锁的拥有者
3.锁管理系统通知队列中第一个应用成功申请到锁,通知队列中其他的应用申请锁失败。
4.在应用使用完资源之后,要记得释放锁。
5.在锁释放时,锁管理系统收到锁释放通知,然后把锁状态设置为空闲,然后通知队列中正在等待锁的应用。
6.等待锁的应用收到锁释放通知后,会重新发送锁申请,这时整个状态又回到了流程1.
主要的技术点:
1.锁管理系统和资源是完全解耦的,每个资源对应的锁用一个Key来标识,每次申请锁时,把锁的Key发过来即可。
2.锁管理系统基于c/s架构,采用netty框架实现。
3.提供API给应用,供应用申请锁
初步构想已经完成,代码待系统稳定后,再开源。