技术文章:分布式系统模式-High-Water Mark
任何客户端只能读取低于high-water mark的日志条目。超出high-water mark的日志条目对客户机是不可见的,因为没有确认条目是否被复制,如果leader失败,而其他服务器被选为leader,这些日志条目可能不可用。
class ReplicationModule…
public WALEntry readEntry(long index) { if (index > replicationState.getHighWaterMark()) { throw new IllegalArgumentException("Log entry not available"); } return wal.readAt(index); }
日志截取
当服务器在崩溃/重启后加入集群时,总是有可能在其日志中有一些冲突条目。因此,每当服务器加入集群时,它都会与集群的领导者进行检查,以了解日志中的哪些条目可能存在冲突。然后,它将日志截取到与leader匹配的条目位置,然后使用后续条目更新日志,以确保其日志与集群的其余部分匹配。
考虑下面的例子。客户端发送请求以在日志中添加四个条目。leader成功地复制了三个条目,但是在将entry4添加到自己的日志后复制失败。其中一个追随者被选为新的领导者,并从客户端那里接受更多的条目。当故障的leader再次加入集群时,它的entry4发生冲突。因此,它需要将其日志截取到entry3,然后添加entry5使日志与集群的其他服务器匹配。
Figure 2: Leader Failure
Figure 3: New Leader
Figure 4: Log Truncation
任何在暂停后重启或重新加入集群的服务器都会找到新的leader。然后,它显式地请求当前的High-Water Mark,将其日志截取到High-Water Mark处,然后从leader获取超过High-Water Mark的所有条目。像RAFT这样的复制算法可以通过检查自己日志中的日志项和请求的日志项来找出冲突项。删除具有相同日志索引但处于较低Generation Clock的条目。
class ReplicationModule…
private void maybeTruncate(ReplicationRequest replicationRequest) throws IOException { if (replicationRequest.hasNoEntries() || wal.isEmpty()) { return; }
List
支持日志截取的一个简单实现是保存日志索引和文件位置的映射。然后在给定索引处截取日志,如下所示:
class WALSegment…
public void truncate(Long logIndex) throws IOException { var filePosition = entryOffsets.get(logIndex); if (filePosition == null) throw new IllegalArgumentException("No file position available for logIndex=" + logIndex);
fileChannel.truncate(filePosition); }例子
? 所有共识算法都使用High-Water Mark的概念来知道何时应用提议的状态变化。例如 在RAFT共识算法中,High-Water Mark称为“CommitIndex”。? 在Kafka复制协议中,有一个单独的索引被称为“High-Water Mark”。消费者只能看到High-Water Mark之前的条目。? Apache BookKeeper具有“最后确认添加”的概念,该条目已成功复制到quorum。
领导者选举可能会出现一个微妙的问题。在任意服务器向客户端传送数据之前,我们要确保集群中的所有服务器都有最新的日志。
这个场景有一个微妙的问题是,现有的领导者在向所有追随者传播High-Water Mark之前就失败了。在领导者选举成功后,RAFT会在领导者的日志中附加一个no-op无操作条目,并且只有在被它的追随者确认后才会为客户端服务。在ZAB中,在开始服务客户端之前,新领导者显式地尝试将其所有条目推送给所有追随者。
图片新闻
最新活动更多
-
5月10日立即下载>> 【是德科技】精选《汽车 SerDes 发射机测试》白皮书
-
5月16日火热报名>>> OFweek锂电/半导体行业数字化转型在线研讨会
-
5月22日立即报名>>> OFweek 2024新周期显示技术趋势研讨会
-
5月28日立即观看>> 【在线研讨会】Ansys镜头点胶可靠性技术及方案
-
5月31日立即报名>> 【线下论坛】新唐科技2024未来创新峰会
-
6月18日立即报名>> 【线下会议】OFweek 2024(第九届)物联网产业大会
- 1 拆机实锤!华为Pura70使用新芯片,推测为7nm,性能如何?
- 2 华为P70系列即将强势来袭,能否再次复制华为Mate60系列的辉煌?
- 3 中国芯片基地诞生:一年产量1055亿颗,占全国30%,三省共占67%
- 4 华为麒麟9010、苹果A17、高通8Gen3对比,差距有多大?
- 5 避免内卷?中国大陆4大芯片代工厂,产能、营收、优势介绍
- 6 形势严峻!暴增256%,中国还在疯狂进口ASML光刻机
- 7 过去14个月,山东从荷兰进口了12台光刻机
- 8 华为Pura70又打脸了?美国商务部长:华为芯片没那么先进
- 9 MTK和Intel联手,投资RISC-V芯片新贵谋发展?
- 10 华为Pura70证明:我们7nm已没问题,接下来是5nm、3nm
发表评论
请输入评论内容...
请输入评论/评论长度6~500个字
暂无评论
暂无评论