0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

分布式系统模式—High-Water Mark

电子设计 来源:电子设计 作者:电子设计 2020-12-24 12:56 次阅读

作者: Unmesh Joshi

译者: java达人

预写日志中的索引,显示最近一次成功的复制。

问题

服务器崩溃并重新启动后,可使用“Write-Ahead Log”模式恢复状态。但是,如果服务器发生故障,Write-Ahead Log不足以提供可用性。如果单个服务器发生故障,则客户端将无法运行,直到服务器重新启动。为了获得更多可用的系统,我们可以在多个服务器上复制日志。使用领导者和追随者模式,领导者会将其所有日志条目复制到追随者法定数。现在,如果领导者失败,则可以选举新的领导者,并且客户可以像以前一样继续使用集群。但是仍然有几处可能出问题:

? leader在将其日志发送给任何追随者之前可能会失败。? 领导者可能会在向一些追随者发送日志条目时失败,无法将其发送给大多数的追随者。

在这些错误场景中,一些追随者可能在其日志中丢失条目,而一些追随者可能拥有比其他追随者更多的条目。因此,对于每个follower来说,了解日志的哪一部分对客户端是安全可用的就变得很重要了。

解决方案

high-water mark是日志文件的一个索引,它记录已知已成功复制到追随者Quorum的最后一个日志条目。在复制过程中,领导者还会将high-water mark传递给追随者。集群中的所有服务器应该只向请求低于high-water mark更新的客户端传输数据。

这是操作顺序:

Figure 1: High-Water Mark

对于每个日志条目,leader将其附加到其本地预写日志中,然后将其发送给所有追随者。

leader (class ReplicationModule...)
private Long appendAndReplicate(byte[] data) { Long lastLogEntryIndex = appendToLocalLog(data); logger.info("Replicating log entries from index " + lastLogEntryIndex); replicateOnFollowers(lastLogEntryIndex); return lastLogEntryIndex; }
private void replicateOnFollowers(Long entryAtIndex) { for (final FollowerHandler follower : followers) { replicateOn(follower, entryAtIndex); //send replication requests to followers } }

追随者处理复制请求并将日志条目附加到它们的本地日志中。在成功附加日志条目之后,它们将拥有的最新日志条目索引响应到leader。该响应还包括服务器的当前Generation Clock。

follower (class ReplicationModule...)
private ReplicationResponse handleReplicationRequest(ReplicationRequest replicationRequest) { List

Leader在收到响应时跟踪在每个服务器上复制的日志索引。

class ReplicationModule…
recordReplicationConfirmedFor(response.getServerId(), response.getReplicatedLogIndex()); long logIndexAtQuorum = computeHighwaterMark(logIndexesAtAllServers(), config.numberOfServers()); if (logIndexAtQuorum > replicationState.getHighWaterMark()) { var previousHighWaterMark = replicationState.getHighWaterMark(); applyLogAt(previousHighWaterMark, logIndexAtQuorum); replicationState.setHighWaterMark(logIndexAtQuorum); }

通过查看所有追随者的日志索引和领导者本身的日志,并获取大多数服务器上可用的索引,可以计算出High-Water Mark。

class ReplicationModule…
Long computeHighwaterMark(List

领导者将high-water mark作为常规心跳的一部分或作为单独的请求向追随者传播。追随者随后相应地设定了他们的high-water mark。

审核编辑:符乾江
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 服务器
    +关注

    关注

    12

    文章

    8751

    浏览量

    84734
  • 分布式系统
    +关注

    关注

    0

    文章

    143

    浏览量

    19172
  • Mark
    +关注

    关注

    0

    文章

    17

    浏览量

    8373
收藏 人收藏

    评论

    相关推荐

    分布式SCADA系统的特点的组成

    在工业自动化和能源管理领域,SCADA(Supervisory Control And Data Acquisition)系统扮演着至关重要的角色。其中,分布式SCADA系统凭借其独特的结构和功能
    的头像 发表于 06-07 14:43 379次阅读

    分布式光伏监控系统解决方案

    程瑜 安科瑞电气股份有限公司 上海嘉定 201801 摘 要: 分布式光伏发电特指在用户场地附近建设,运行方式多为自发自用,余电上网,部分项目采用全额上网模式分布式光伏全额上网的优点是可以充分利用
    的头像 发表于 04-22 15:56 759次阅读
    <b class='flag-5'>分布式</b>光伏监控<b class='flag-5'>系统</b>解决方案

    分布式光伏电力监控系统解决方案

    安科瑞薛瑶瑶18701709087 分布式光伏现状 自发自用、余电上网模式 完全自发自用(防逆流)模式 全额上网模式 0.4kV并网系统  
    的头像 发表于 03-18 11:18 594次阅读
    <b class='flag-5'>分布式</b>光伏电力监控<b class='flag-5'>系统</b>解决方案

    什么是分布式架构?

    分布式架构是指将一个系统或应用拆分成多个独立的节点,这些节点通过网络连接进行通信和协作,以实现共同完成任务的一种架构模式。这种架构模式旨在提高系统
    的头像 发表于 01-12 15:04 1034次阅读
    什么是<b class='flag-5'>分布式</b>架构?

    分布式系统硬件资源池原理和接入实践

    把各个设备的硬件外设抽象为外设信息单元,外设信息在各个可信设备之间自动同步,如此,实现了外设信息的全局可见;结合分布式硬件虚拟化技术,实现任意设备之间的硬件外设能力跨设备调用;分布式硬件资源池作为系统
    发表于 12-06 10:02

    zookeeper分布式原理

    Zookeeper是一个开源的分布式协调服务,可以用于构建高可用、高性能的分布式系统。它提供了一个简单且高效的层次命名空间,可以用来存储配置信息、状态信息、命名服务等。Zookeeper的设计目标
    的头像 发表于 12-03 16:33 539次阅读

    Java手写分布式锁的实现

    随着互联网业务的发展,原本单机部署的系统演化成如今的分布式集群系统后,由于分布式系统多线程
    的头像 发表于 11-17 15:51 479次阅读
    Java手写<b class='flag-5'>分布式</b>锁的实现

    什么是分布式直流电源?分布式直流电源的范围 分布式直流电的特性

    什么是分布式直流电源?分布式直流电源的范围 分布式直流电的特性  分布式直流电源(Distributed DC Power Supply)是指分布
    的头像 发表于 11-16 11:17 931次阅读

    springcloud如何实现分布式

    Spring Cloud是基于Spring Boot开发的一套分布式系统解决方案,它主要包括了多个子项目,如服务注册与发现、配置中心、负载均衡、断路器、路由等等。通过使用Spring Cloud
    的头像 发表于 11-16 11:01 583次阅读

    springclould分布式教程

    Spring Cloud是一个基于Spring Boot的分布式系统开发工具,它提供了一系列的分布式系统解决方案,可以帮助开发者快速构建和部署分布式
    的头像 发表于 11-16 10:59 403次阅读

    分布式电源并网逆变器系统设计

    电子发烧友网站提供《分布式电源并网逆变器系统设计.doc》资料免费下载
    发表于 11-15 11:21 0次下载
    <b class='flag-5'>分布式</b>电源并网逆变器<b class='flag-5'>系统</b>设计

    HarmonyOS分布式文件系统开发指导

    分布式文件系统概述 分布式文件系统(hmdfs,HarmonyOS Distributed File System)提供跨设备的文件访问能力,适用于如下场景: ● 两台设备组网,用户可
    发表于 11-14 17:14

    如何评估分布式PLL系统的相位噪声?

    如何评估分布式PLL系统的相位噪声? 要评估分布式PLL系统的相位噪声,我们需要先了解什么是PLL系统和相位噪声。PLL(Phase Loc
    的头像 发表于 11-06 10:26 572次阅读

    tldb提供分布式锁使用方法

    前言:分布式锁是分布式系统中一个极为重要的工具。目前有多种分布式锁的设计方案,比如借助 redis,mq,数据库,zookeeper 等第三方服务
    的头像 发表于 11-02 14:44 798次阅读
    tldb提供<b class='flag-5'>分布式</b>锁使用方法

    分布式文件系统的设计原理是什么?

    什么是分布式文件系统分布式文件系统(DFS)是一种计算机文件系统,使用户能够从多个分布式位置存
    的头像 发表于 10-17 17:35 725次阅读