• 分布式锁的基本原理


    基本概念:

    分布式锁,是控制分布式系统之间同步访问共享资源的一种方式。在分布式系统中,常常需要协调他们的动作。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰来保证一致性,在这种情况下,便需要使用到分布式锁。

    举个例子:

    1.假设有一个进程A,每小时准点给用户发送一条短信"Hello world",为了高可用,就必须在多台机器上面部署多个进程,避免宕机的情况

    2.假设部署在两台机器,那么问题来了,用户每个小时就会收到两条"Hello world",信息就重复了

    3.我们希望只发送一条"Hello world",那么就可以引入分布式锁的概念了,

    4.进程A和进程B发送短信前先去注册一个锁,假设进程A抢到了锁,进程B就等待结果,如果发送成功了,那么就B就放弃此次任务,等待下一个小时。

    5.问题的核心就在于怎么注册锁,检查锁的存在和注册锁是一个原子性操作,类似mysql的主键,存在则不能insert,就说是你不能把我的锁覆盖了,你得等着

    6.我们有多种方式可以实现分布式锁,最简单的就是以每小时准点这个时间作为主键,到mysql写入一条数据,利用数据库来维持一致性

    7.当然分布式锁也会存在很多暗坑,不在这里展开。

    分布式锁的几种实现:

    1.zookeeper分布式锁,基于自增节点

    2.redis分布式锁,基于setnx命令,

    基于Redis实现分布式锁:http://blog.csdn.net/daiyudong2020/article/details/51760648

    官网:http://redis.io/topics/distlock 

    译文:http://www.oschina.net/translate/redis-distlock

    3.memcache分布式锁,基于add函数

    转载:http://blog.csdn.net/u014756827/article/details/52396521

  • 相关阅读:
    JAVA操作数据库 http://blog.sina.com.cn/andyfang
    JSP连接各类数据库大全
    Jigloo 开发 SWT 的入门教程
    kv离线升级
    MySQL内存表的弊端
    MySQL中Order By实现原理分析
    Linux安装性能问题
    按照经纬度实现位置计算
    NOSQL数据模型和CAP原理
    C语言 side effect 和 sequence point
  • 原文地址:https://www.cnblogs.com/huangjianping/p/8351272.html
Copyright © 2020-2023  润新知