Warning: Use of undefined constant ‘AUTOSAVE_INTERVAL’ - assumed '‘AUTOSAVE_INTERVAL’' (this will throw an Error in a future version of PHP) in /www/wwwroot/a.sosjesenik.com/wp-config.php on line 99

Warning: Use of undefined constant ‘WP_POST_REVISIONS’ - assumed '‘WP_POST_REVISIONS’' (this will throw an Error in a future version of PHP) in /www/wwwroot/a.sosjesenik.com/wp-config.php on line 100
学开锁:zookeeper分布式锁的原理-风速学习开锁公司
开锁培训学校
更多>>专业开锁公司
联系风速开锁

    联系人:王小姐

    电话:0571-85159663

    传真:0571-85159663

    邮箱:3060751368@qq .com

    Q Q:631157548,3060751368

    微信:15381185117

    地址:德胜东路2666号A区49栋 2-4-6

风速学开锁技术首页 > 学开锁技术 > 学开锁:zookeeper分布式锁的原理

学开锁:zookeeper分布式锁的原理

   学开锁:zookeeper分布式锁的原理
学开锁:zookeeper分布式锁的原理

    锁定原则首先,分布式锁定基本上与我们通常谈论的锁定原则相同。目标是确保在多个线程并发的情况下,只有一个线程同时运行服务或方法。
 
    在jvm或作为应用程序的进程中,我们可以轻松地处理控件。在jdkjava.util并发包中,我们提供了一个可以像synchronized关键字或锁定锁一样处理的锁定方法。。
 
    但是,如果当前应用程序仅部署一台服务器,则并发吞吐量非常低。与此同时,如果有数十万个请求,服务器可能会面临压力和尴尬。
 
    当使用多台服务器同时处理这些服务时,可以自然地考虑像支付宝红包这样的业务场景,如11:10,这些服务可以同时处理数百个,
 
    如果您有100台服务器来处理股息分配,那么您现在有1000万美元用于此业务场景,假设您有1亿个红包和1000万个人点并且金额是随机的。个别红包的总量为1亿。
 
    如果治疗效果不好~~如果每个人身价100万美元,茂云的父亲应该为新年宣布破产~~
    学开锁:zookeeper分布式锁的原理
 
    如果你想学习Java工程,高性能和分散。微服务,Spring,MyBatis,JavaNetty源代码分析我的朋友可以加我的高级交流:(630)135(854),该组有一个大阿里活牛技术,每个人都无法分享没有大型互联网视频可以描述Java技术。
 
    1.普通锁怎么样
 
    我们先谈谈集群简单参与的原因,首先了解需求(需求并发)变大,工人处理能力有限,招聘更多员工来处理数量。
 
    假设1000个请求被平均分配给100个服务器,每个服务器接收10个w请求(10秒请求不是几秒钟,可以是一个或两个小时内三个)当我从.10.20开始时,人们立刻开了。有些人等到12点〜)
 
    在这种情况下,每秒平均请求数小于1,000。这种压力服务器仍然可以承受。
 
    假设在第一个请求到达后第一个人被分成100个,我们随机减去100万美元到100万美元并留下99999900。~~
 
    第二个用户将回来,金额是随机的,这个时间分为200件,留下99999700件需要从剩余的9999900块中减去200件。等到第十个用户来,如果有1000w一眼,这1000w就是他的全部。
 
    每台服务器,相当于最后100,000,000分钟,共100台服务器,分10万用户在10,000,000,000分钟。
 
    如果你真的很喜欢,妈妈爸爸(根据最新的统计数据,2300亿元,妈妈)破产了,如果有奖金套餐开发团队,产品经理,
 
    简化的结构如下。
 
    2,如何处理分布式锁
 
    因此,要解决这个问题,我们将1000万用户分为100亿,而不是100万。这次分布式锁定很有用。
 
    分布式锁可以将整个集群视为应用程序,并且必须独立于每个服务,而不是服务。
 
    在假设第一台服务器收到用户请求1之后,那么这次,他无法透露应用程序中要确定多少钱,并且负责红包的1亿人需要管理外部请求(服务),问他。嘿,给它100,然后给它100。
 
    如果你看管理红姐(服务),那么99,999,900休息,给你100,只有一个好。
 
    当第二个请求到达时,服务器(2)获取问题红姐,管理我的一方到10分,第一个继续检查红色兄弟在99,999,900下检查,它说:好吧,给你10块做吧。然后留下99999890。
 
    1000w要求收到服务器请求(100),直到第一次到达,问题让红哥继续,你兄弟睁开眼睛,我们只告诉你这一次爱,我只有100这件(一件也是钱,它可以买一根辣棒)可以给。
 
    这些请求号1和2并不表示执行顺序,并且在官方场景中必须有100个服务器,每个服务器持有对负责管理红包的姐妹(服务)的请求。我收到了100个请求。这次你需要给负责红包(投掷绣球花)的妹妹加一把锁。100个带锁的服务器(抓住绣球花),有人跟我说话,我分手了,你在等待别人。
 
    在上面的分布式锁定处理之后,马云爸爸终于决定在红包团队中添加一条鸡腿,放心。
 
 
    3.分布式锁的实现是什么
 
    关于分布式锁的实现,还有很多,数据库方法是redis分布式锁,拉链分布式锁等。我们可以在图中代替红包“女性(服务)”的负面上面,如果你使用分布式锁的Redisredis的。补充你的大脑。
 
    4,为什么redis可以实现分布式锁定
 
    首先,redis是一个单线程。这里只举一个线程是指使用线程的网络请求模块,所以没有必要考虑同时安全性。也就是说,一个线程处理所有网络请求,另一个模块仍然使用多线程。
 
    在实际操作中,过程大致如下。
 
    我的哥哥,服务器首先红包,那小姐是怎么回事去,他是非常重要的,具有标志键值是在女士setnxkeyvalue“关键传球的工作并不重要的设置,所有服务器都具有相同的密钥设置这个尖叫键。
 
    假设你设置如下所示。
 
    您将看到它返回1,表示成功。
 
    如果您有另一个设置相同密钥的请求:
 
    此时返回0,表示失败。
 
    然后确保你有可以锁定或“红包责任姐妹”用你的工作当前访问,返回1点返回0开始执行以下逻辑:说明已完成。我会继续等待。
 
    当服务器1获得锁以执行业务处理和完成它必须被解锁,如图中下图。
 
    如果你想学习Java工程,高性能和分散。微服务,Spring,MyBatis,JavaNetty源代码分析我的朋友可以加我的高级交流:(630)135(854),该组有一个大阿里活牛技术,每个人都无法分享没有大型互联网视频可以描述Java技术。
 
    当你删除一个成功返回1其他服务器可以继续重复上面的步骤来设置键实现获得锁的目的。
   学开锁:zookeeper分布式锁的原理
 
    当然,上述操作直接在redis客户端上执行。通过程序调用时,必须通过jedis调用Java,但整体处理逻辑基本相同。
 
    可以把它想象成用上面的方法解决了分布式锁的问题。?
 
    是的,问题仍然存在。可能存在死锁问题。例如,在设置服务器1之后和获取锁定之后发生突然停机。
 
    无法执行后续的密钥删除操作。只要其他服务器检查密钥,该密钥始终存在。如果返回0,则必须等待,因为它认为其他用户正在使用锁。要解决此死锁,您必须设置密钥的生存期。
 
    有两种方法可以设置它
 
    1,我直接设置'expirekeytimeout'键,设置键的超时,SET键后的完成单位是秒,并自动解锁条件,防止死锁随着时间的推移。
 
    此方法等同于保持redis控制的锁的生命周期。当时间到了,你不会给我删除键,然后你可以继续setnx,删除女士并获得另一个服务器锁定,你将自己提供。
 
    2,第二种方法是删除另一台服务器的密钥权限,需要使用该值的值,那么这次,
 
    例如,要获取服务器(1),将值设置为当前时间+1秒超时,并且服务器(2)现在看到服务器(1)而不解锁显示时间超过当前系统时间(1)可能有问题,
 
    服务器2启动密钥删除操作并继续setnx操作。
 
    但是,这不是问题,也就是说,不仅可以发现服务器21服务器超时服务器3只能找到服务器2,setnx操作完成,删除服务器3,那么服务器也setnx3你能成功吗?
 
    这意味着Server2和Server3都会获得锁定并且问题严重。此时我该怎么办?
 
    这次你需要使用“GETSETkeyvalue”命令。此命令的含义是获取当前键值并设置新值。
 
    假设服务器(2)到期,它将在发现密钥已过期,getset命令开始调用时到期,然后确定参数是否仍然锁定所花费的时间将在时间到期时到期。
 
    如果没有,则服务将getet2,找到服务器3(锁定服务器的到期时间),到期,并在服务器(2)之前获取操作。
 
    服务器2等待3个服务器等待锁定到期或释放密钥以放弃后续工作。
 
    实际上,一小段问题可以添加到服务器3,锁定2,修改服务器后获取的截止日期,修改了截止日期但没有锁定,但这段时间将是服务器的基础(3)但这种影响实际上非常小,几乎可以忽略不计。
 
    为什么zookeeper分布式锁实现了这个目的

    百度百科全书介绍如下:ZooKeeper是一个分布式,开源的分布式应用协调服务,是GoogleChubby的开源实现,是Hubop和Hbase的重要组成部分。

 
    我们第一次遇到的人说ZooKeeper就像一个计算机文件系统,所以你可以在驱动器d上创建文件夹a并在文件夹a上保存文件夹a1和a2。
 
    文件系统有什么特点??也就是说,您无法在与ZooKeeper相同的目录中复制文件名。
 
    ZooKeeper中称为文件夹的每个节点都称为Znodes,该Znode节点可以存储数据。
 
    我们可以通过“create/zkjjjnice”创建一个节点,这意味着已经创建了目录中包含zkjjj的节点。同样,这里的值与我在redis中提到的相同。我不明白。
 
    ZooKeeper还可以创建四种类型的节点:
 
    1,永久节点
 
    2,连续序列节点
 
    3,临时节点
 
    4,临时订单节点
 
    首先,永久节点和临时节点之间的区别。持久节点意味着如果您创建此节点,ZooKeeper服务器将写入此节点,无论ZooKeeper客户端是否已断开连接。
 
    临时节点是相反的。一旦ZooKeeper客户端断开连接,ZooKeeper服务器将不会保存该节点。
 
    除了顺序节点之外,顺序节点意味着当您创建节点时,ZooKeeper会自动分配节点号,例如0000001,0000002。
 
    最后,zookeeper具有监视机制,客户端侦听感兴趣的目录节点。当目录节点更改(更改数据,删除,添加和删除子目录节点)时,zookeeper会通知客户端。
 
    下面我们将介绍如何通过组合上述支付包方案来锁定zookeeper。
 
    假设服务器1创建node/zkjjj,服务器1获取锁,然后服务器2创建相同的锁,然后失败,并且当前能够从该节点接收更改。
 
    服务器1,处理完业务后,删除节点,他会被通知,然后创建相同的节点,获得锁定处理业务,然后删除该节点,后续100服务器是类似的当服务器100是被成功地创建的服务器,一个接一个,但不同时,以监测节点,例如通知注册,其余的99,和,执行生成的节点的操作。
 
    但是你知道这里还有问题吗?僵局将继续。是吗?
 
    创建节点后,如果服务器1已停止且未删除,则另外99台服务器将等待通知并完成。。。
 
    时间就这样了,你需要使用一个临时的节点,当我们说,该节点的临时性质,是一个挂了电话,服务器1是创建一个节点,即时间,客户端连接丢失。
 
    节点将自动删除,因此其他服务器将继续创建节点并获取锁定。
 
    但我们也必须牢记,雷声从众效应:当你扔一块食物的一组中的鸽子,但最终只鸽子抢食物,警告所有的鸽子打,但有一个很简单的例子,抓住否,没有。
 
    如果服务器是一个节点发生变化,就这样通知,但最终的服务器的一个生成服务器99,98仍在等待听到接下来的两个处理情况的休息,我们需要使用节点的临时命令
 
    一般的想法是,99个服务器中的每个服务器在收听节点之前都会先监听节点。
 
    假设请求在同一时间发送至100个服务器,此时将等于半节点/zkjjj/000000001中/zkjjj节点/zkjjj/000000002,100临时/zkjjj直到创建的顺序/000000100中,设置锁定的图获得它们的顺序。
 
    当处理节点001时,它注意到003并开始获取锁定通知节点,删除002,完成节点删除等等。1

以上就是关于【【上门开锁】学开锁技术交流】的详细讲解,本文由风速开锁技术培训学校(www.sosjesenik.com)收集于网络不代表本站观点,如果您还想了解更多关于开锁技术和风速开锁培训学校网站的文章,请继续查看【【开锁技术大全】学员在练习开锁技术】的其它文章,请关注风速开锁技术培训学校官网。

我的更多文章

  • 版权声明:

    本站原创文章,于2022-04-17 12:04:57,由 风速开锁技术 发表
  • 转载请注明:

    【上门开锁】学开锁技术交流 | 风速开锁技术培训学校【免费试学】
  • 地址:杭州市江干区德胜东路2666号万品汽配城A区49栋2号 技术支持:网站建设+网站优化= 我心科技 杭州风速开锁技术培训学校,包教包会,学会为止.
    电话:0571-85159663 网站备案/许可证号:浙ICP备17042465号-5 版权所有 ©杭州风速开锁