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

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

3天内不再提示

分布式系统模式概述——Low-Water Mark

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

作者: Unmesh Joshi

译者: java达人

预写日志中的索引,表示可以丢弃日志的哪一部分。

问题

预写日志维护对持久性存储的每一次更新。随着时间的进展,它会无限制地增长。Segmented Log允许一次处理较小的文件,但是如果不检查,总磁盘存储量将无限制增长。

解决方案

有一种机制可以告诉日志记录机器可以安全地丢弃日志的哪一部分。该机制提供了最低的偏移量或low water mark,在此之前的日志可以丢弃。让任务在后台的单独线程中运行,该任务连续检查可以丢弃日志的哪一部分并删除磁盘上的文件。

this.logCleaner = newLogCleaner(config);this.logCleaner.startup();

日志清理器可以实现为定时任务

public void startup() { scheduleLogCleaning();}

private void scheduleLogCleaning() { singleThreadedExecutor.schedule(() -> { cleanLogs(); }, config.getCleanTaskIntervalMs(), TimeUnit.MILLISECONDS);}基于快照的Low-Water Mark

大多数共识实现(例如Zookeeper或etcd(在RAFT中定义))都实现了快照机制。在此实现,存储引擎需要定期快照。除快照外,它还存储成功应用的日志索引。参考“Write-Ahead Log”模式中的简单键值存储实现,可以采取以下快照:

public SnapShot takeSnapshot() { Long snapShotTakenAtLogIndex = wal.getLastLogEntryId(); return new SnapShot(serializeState(kv), snapShotTakenAtLogIndex);}

一旦快照成功保存在磁盘上,日志管理器将获得Low-Water Mark,以丢弃较旧的日志。

List<WALSegment> getSegmentsBefore(Long snapshotIndex) { List<WALSegment> markedForDeletion = new ArrayList<>(); List<WALSegment> sortedSavedSegments = wal.sortedSavedSegments; for (WALSegment sortedSavedSegment : sortedSavedSegments) { if (sortedSavedSegment.getLastLogEntryId() < snapshotIndex) { markedForDeletion.add(sortedSavedSegment); } } return markedForDeletion;}基于时间的Low-Water Mark

在某些系统中,不一定要使用日志来更新系统状态,可以在给定的时间窗口后丢弃日志,而不必等待任何其他子系统共享可以删除的最低日志索引。例如,在像Kafka这样的系统中,日志将保留7周;消息时间超过7周的所有日志段都将被丢弃。对于此实现,每个日志条目还包括创建时的时间戳。然后,日志清理器可以检查每个日志段的最后一个条目,并丢弃早于配置的时间窗口的日志段。

private List<WALSegment> getSegmentsPast(Long logMaxDurationMs) { long now = System.currentTimeMillis(); List<WALSegment> markedForDeletion = new ArrayList<>(); List<WALSegment> sortedSavedSegments = wal.sortedSavedSegments; for (WALSegment sortedSavedSegment : sortedSavedSegments) { if (timeElaspedSince(now, sortedSavedSegment.getLastLogEntryTimestamp()) > logMaxDurationMs) { markedForDeletion.add(sortedSavedSegment); } } return markedForDeletion;}
private long timeElaspedSince(long now, long lastLogEntryTimestamp) { return now - lastLogEntryTimestamp;}

例子

?所有共识算法(例如Zookeeper和RAFT)中的日志实现均实现基于快照的日志清理

?Kafka中的存储实现遵循基于时间的日志清理

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

    关注

    0

    文章

    146

    浏览量

    19194
  • Mark
    +关注

    关注

    0

    文章

    17

    浏览量

    8381
收藏 人收藏

    评论

    相关推荐

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

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

    Acrel-1000DP光伏监控系统分布式光伏10KV并网系统的应用

    分布式光伏发电系统的发电量,提高分布式光伏发电系统的利用率。发展分布式光伏发电对优化能源结构、实现“双碳目标”、推动节能减排、实现经济可持续
    的头像 发表于 04-22 15:57 481次阅读
    Acrel-1000DP光伏监控<b class='flag-5'>系统</b>在<b class='flag-5'>分布式</b>光伏10KV并网<b class='flag-5'>系统</b>的应用

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

    分布式光伏发电系统的发电量,提高分布式光伏发电系统的利用率。发展分布式光伏发电对优化能源结构、实现“双碳目标”、推动节能减排、实现经济可持续
    的头像 发表于 04-22 15:56 893次阅读
    <b class='flag-5'>分布式</b>光伏监控<b class='flag-5'>系统</b>解决方案

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

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

    鸿蒙OS 分布式任务调度

    鸿蒙OS 分布式任务调度概述 在 HarmonyO S中,分布式任务调度平台对搭载 HarmonyOS 的多设备构筑的“超级虚拟终端”提供统一的组件管理能力,为应用定义统一的能力基线、接口
    的头像 发表于 01-29 16:50 440次阅读

    什么是分布式架构?

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

    分布式节点服务器是什么?

    部署在不同的服务器上进行处理和存储,以实现负载均衡和容错处理。这种架构模式旨在提高系统的可扩展性、可靠性和性能表现,以满足大规模数据处理、复杂任务处理等需求。 分布式节点服务器的实现方式有多种,其中最常用的
    的头像 发表于 01-12 15:04 689次阅读
    <b class='flag-5'>分布式</b>节点服务器是什么?

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

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

    redis分布式锁的应用场景有哪些

    Redis分布式锁是一种基于Redis实现的分布式锁机制,可以在分布式环境下确保资源的独占性,避免并发访问时的数据争用问题。下面将详细介绍Redis分布式锁的应用场景。
    的头像 发表于 12-04 11:21 1370次阅读

    zookeeper分布式原理

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

    分布式通信是什么 分布式网络搭建

    智能机器人的功能繁多,全都放在一个计算机里,经常会遇到计算能力不够、处理出现卡顿等情况,如果可以将这些任务拆解,分配到多个计算机中运行岂不是可以减轻压力? 这就是分布式系统,可以实现多计算平台
    的头像 发表于 11-27 15:49 729次阅读
    <b class='flag-5'>分布式</b>通信是什么 <b class='flag-5'>分布式</b>网络搭建

    Java手写分布式锁的实现

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

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

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

    springcloud如何实现分布式

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

    springclould分布式教程

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