您的位置:首页 > 其它

分布式锁机制

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给应用,供应用申请锁

初步构想已经完成,代码待系统稳定后,再开源。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  分布式锁