分布式锁机制

原创
2016/04/15 00:37
阅读数 712

    最近的业务用到了远程资源,并且该资源的操作必须是原子性的,同时只能有一个使用者。因为应用是分布式的,所以在应用要获取此类远程资源,必须首先获得锁。

    在网上查了许多分布式锁的实现方式,总是感觉使用起来很麻烦,或者就是太过于蹩脚,趁着自己有时间,打算实现一个分布式锁管理系统。

    需求点:

    1.每个应用通过分布式管理系统提供的API与管理系统建立联系,这种联系是基于长连接的,方便管理系统通知应用当前锁的状态,而不是让每个应用去轮询锁的状态。

    2.每个资源对应于一个锁,应用在请求资源时,必须成为锁的拥有者,如果成功成为锁拥有者,才能去申请使用资源。

   锁的申请流程:

    1.多个应用申请获得锁,每个申请会被锁管理系统存放到一个申请队列

    2.队列中最先发送申请的应用将成为锁的拥有者

    3.锁管理系统通知队列中第一个应用成功申请到锁,通知队列中其他的应用申请锁失败。

    4.在应用使用完资源之后,要记得释放锁。

    5.在锁释放时,锁管理系统收到锁释放通知,然后把锁状态设置为空闲,然后通知队列中正在等待锁的应用。

    6.等待锁的应用收到锁释放通知后,会重新发送申请,这时整个状态又回到了流程1.

    主要的技术点:

    1.锁管理系统和资源是完全解耦的,每个资源对应的锁用一个Key来标识,每次申请锁时,把锁的Key发过来即可。

    2.锁管理系统基于c/s架构,采用netty框架实现。

    3.提供API给应用,供应用申请锁

    初步构想已经完成,代码待系统稳定后,再开源。

展开阅读全文
打赏
1
10 收藏
分享
加载中
Redis不是更好吗
2016/04/15 08:26
回复
举报
更多评论
打赏
1 评论
10 收藏
1
分享
返回顶部
顶部