File tree Expand file tree Collapse file tree 3 files changed +4
-4
lines changed
distributed-process-coordination/zookeeper
theorem&algorithm&protocol Expand file tree Collapse file tree 3 files changed +4
-4
lines changed Original file line number Diff line number Diff line change @@ -105,7 +105,7 @@ Redisson 中的分布式锁自带自动续期机制,使用起来非常简单
105
105
106
106
![ Redisson 看门狗自动续期] ( ./images/distributed-lock/distributed-lock-redisson-renew-expiration.png )
107
107
108
- 看门狗名字的由来于 ` getLockWatchdogTimeou ()` 方法,这个方法返回的是看门狗给锁续期的过期时间,默认为 30 秒([ redisson-3.17.6] ( https://github.com/redisson/redisson/releases/tag/redisson-3.17.6 ) )。
108
+ 看门狗名字的由来于 ` getLockWatchdogTimeout ()` 方法,这个方法返回的是看门狗给锁续期的过期时间,默认为 30 秒([ redisson-3.17.6] ( https://github.com/redisson/redisson/releases/tag/redisson-3.17.6 ) )。
109
109
110
110
``` java
111
111
// 默认 30秒,支持修改
Original file line number Diff line number Diff line change 18
18
19
19
简单来说, ` ZooKeeper ` 是一个 ** 分布式协调服务框架** 。分布式?协调服务?这啥玩意?🤔🤔
20
20
21
- 其实解释到分布式这个概念的时候,我发现有些同学并不是能把 ** 分布式和集群 ** 这两个概念很好的理解透。前段时间有同学和我探讨起分布式的东西,他说分布式不就是加机器吗?一台机器不够用再加一台抗压呗。当然加机器这种说法也无可厚非,你一个分布式系统必定涉及到多个机器,但是你别忘了,计算机学科中还有一个相似的概念—— ` Cluster ` ,集群不也是加机器吗?但是 集群 和 分布式 其实就是两个完全不同的概念。
21
+ 其实解释到分布式这个概念的时候,我发现有些同学并不是能把 ** 分布式和集群** 这两个概念很好的理解透。前段时间有同学和我探讨起分布式的东西,他说分布式不就是加机器吗?一台机器不够用再加一台抗压呗。当然加机器这种说法也无可厚非,你一个分布式系统必定涉及到多个机器,但是你别忘了,计算机学科中还有一个相似的概念—— ` Cluster ` ,集群不也是加机器吗?但是 集群 和 分布式 其实就是两个完全不同的概念。
22
22
23
23
比如,我现在有一个秒杀服务,并发量太大单机系统承受不住,那我加几台服务器也 ** 一样** 提供秒杀服务,这个时候就是 ** ` Cluster ` 集群** 。
24
24
179
179
180
180
嗯。。。看起来很简单,貌似懂了🤥🤥🤥。这两个 ` Queue ` 哪冒出来的?答案是 ** ` ZAB ` 需要让 ` Follower ` 和 ` Observer ` 保证顺序性** 。何为顺序性,比如我现在有一个写请求A,此时 ` Leader ` 将请求A广播出去,因为只需要半数同意就行,所以可能这个时候有一个 ` Follower ` F1因为网络原因没有收到,而 ` Leader ` 又广播了一个请求B,因为网络原因,F1竟然先收到了请求B然后才收到了请求A,这个时候请求处理的顺序不同就会导致数据的不同,从而 ** 产生数据不一致问题** 。
181
181
182
- 所以在 ` Leader ` 这端,它为每个其他的 ` zkServer ` 准备了一个 ** 队列** ,采用先进先出的方式发送消息。由于协议是 ** 通过 ` TCP ` ** 来进行网络通信的,保证了消息的发送顺序性,接受顺序性也得到了保证。
182
+ 所以在 ` Leader ` 这端,它为每个其他的 ` zkServer ` 准备了一个 ** 队列** ,采用先进先出的方式发送消息。由于协议是 ** 通过 ` TCP ` ** 来进行网络通信的,保证了消息的发送顺序性,接受顺序性也得到了保证。
183
183
184
184
除此之外,在 ` ZAB ` 中还定义了一个 ** 全局单调递增的事务ID ` ZXID ` ** ,它是一个64位long型,其中高32位表示 ` epoch ` 年代,低32位表示事务id。` epoch ` 是会根据 ` Leader ` 的变化而变化的,当一个 ` Leader ` 挂了,新的 ` Leader ` 上位的时候,年代(` epoch ` )就变了。而低32位可以简单理解为递增的事务id。
185
185
Original file line number Diff line number Diff line change @@ -144,7 +144,7 @@ CAP 理论这节我们也说过了:
144
144
145
145
那实现最终一致性的具体方式是什么呢? [ 《分布式协议与算法实战》] ( http://gk.link/a/10rZM ) 中是这样介绍:
146
146
147
- > - ** 读时修复** : 在读取数据时,检测数据的不一致,进行修复。比如 Cassandra 的 Read Repair 实现,具体来说,在向 Cassandra 系统查询数据的时候,如果检测到不同节点 的副本数据不一致 ,系统就自动修复数据。
147
+ > - ** 读时修复** : 在读取数据时,检测数据的不一致,进行修复。比如 Cassandra 的 Read Repair 实现,具体来说,在向 Cassandra 系统查询数据的时候,如果检测到不同节点的副本数据不一致 ,系统就自动修复数据。
148
148
> - ** 写时修复** : 在写入数据,检测数据的不一致时,进行修复。比如 Cassandra 的 Hinted Handoff 实现。具体来说,Cassandra 集群的节点之间远程写数据的时候,如果写失败 就将数据缓存下来,然后定时重传,修复数据的不一致性。
149
149
> - ** 异步修复** : 这个是最常用的方式,通过定时对账检测副本数据的一致性,并修复。
150
150
You can’t perform that action at this time.
0 commit comments