加入收藏 | 设为首页 | 会员中心 | 我要投稿 长春站长网 (https://www.0431zz.com.cn/)- 媒体智能、开发者工具、运维、低代码、办公协同!
当前位置: 首页 > 站长资讯 > 评论 > 正文

套餐要设定合理合约期限

发布时间:2021-01-29 17:02:27 所属栏目:评论 来源:互联网
导读:我们以上面的5台机器为例,只有超过半数以上,即最少启动3台服务器,集群才能正常工作。 服务器1启动,发起一次选举。 服务器1投自己一票。此时服务器1票数一票,不够半数以上(3票),选举无法完成,服务器1状态保持为LOOKING。 服务器2启动,再发起一次选举

我们以上面的5台机器为例,只有超过半数以上,即最少启动3台服务器,集群才能正常工作。

  • 服务器1启动,发起一次选举。
  • 服务器1投自己一票。此时服务器1票数一票,不够半数以上(3票),选举无法完成,服务器1状态保持为LOOKING。
  • 服务器2启动,再发起一次选举。
  • 服务器1和2分别投自己一票,此时服务器1发现服务器2的id比自己大,更改选票投给服务器2。此时服务器1票数0票,服务器2票数2票,不够半数以上(3票),选举无法完成。服务器1,2状态保持LOOKING。
  • 服务器3启动,发起一次选举。

与上面过程一样,服务器1和2先投自己一票,然后因为服务器3id最大,两者更改选票投给为服务器3。此次投票结果:服务器1为0票,服务器2为0票,服务器3为3票。此时服务器3的票数已经超过半数(3票),服务器3当选Leader。服务器1,2更改状态为FOLLOWING,服务器3更改状态为LEADING;

  • 服务器4启动,发起一次选举。

此时服务器1、2、3已经不是LOOKING状态,不会更改选票信息,交换选票信息结果。服务器3为3票,服务器4为1票。此时服务器4服从多数,更改选票信息为服务器3,服务器4并更改状态为FOLLOWING。

  • 服务器5启动,发起一次选举

同4一样投票给3,此时服务器3一共5票,服务器5为0票。服务器5并更改状态为FOLLOWING;

  • 最终

Leader是服务器3,状态为LEADING。其余服务器是Follower,状态为FOLLOWING。

3.2.2 运行时Leader选举

运行时候如果Master节点崩溃了会走恢复模式,新Leader选出前会暂停对外服务,大致可以分为四个阶段 选举、发现、同步、广播。
 

当然这只是一个模拟,实际cas操作将会用到底层的系统指令,这些指令将会保证整个cas操作具有原子性,关于这些指令,可能要另开篇幅讲解。

悲观锁的实现——synchronized

synchronized是悲观锁的典型实现,有关它的用法,可以参考我的这篇文章浅说Synchronized,早期的synchronized十分笨重,所幸在1.6之后进行了大量的优化,锁性能提升了很多,关于synchronized的优化,可以参考我的这篇文章Synchronized的优化。

CAS的缺陷——ABA问题

假设有这样的一种情况,x的内存值首先是A,线程1读取到了A,之后忙别的事情了,该值在之后被线程2改成了B,接着又被线程3改成了A,线程1此时进行CAS操作,发现内存值还是A,于是进行了更新操作。但是这个A已经不是原来的A了,或者说不是之前那个版本的A了。

解决这种缺陷,可以使用带版本号或时间戳的CAS,A值每次被更新后,版本号加1,或者更新时间戳。此时内存值与期望值相等,但却不是线程期望的版本号。

此时的A→B→A,就变成了A(version=1)→B(version=2)→A(version=3)。当使用带版本号的CAS后,就可以避免ABA问题。

CAS与synchronized适用场景

线程冲突比较小时,CAS进行自旋操作,synchronized升级为轻量级锁,也是在自旋,两者的效率差不多。

线程冲突严重时,CAS绝大部分的自旋操作将大量浪费CPU的时间片,此时synchronized升级为重量级锁,但在这种情况下,synchronized的效率远高于CAS。(因为在线程冲突严重时,synchronized已经意识到轻量级锁的自旋操作效率低下,主动升级为重量级锁,所以这里的忙循环的开销远远大于线程切换的开销)。

JAVA中的CAS操作

AtomicInteger实现了CAS,可以原子性地更新一个int类型数据,其实底层也是调用Unsafe类。但是如果要一次原子性地更新多个变量,可以使用AtomicReference,当然这个存在上述的ABA问题,这时可以使用带版本号机制的CAS实现类——AtomicStampedReference,该类使用了一个stamp字段来表示版本号,代码如下图所示:

(编辑:长春站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读