checkpoint 机制具体实现示例详解

 更新时间:2023年02月07日 15:54:26   作者:点滴星光  
这篇文章主要为大家介绍了checkpoint 机制具体实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

checkpoint 机制的具体实现

我们都知道为了优化分布式存储系统中 NameNode 的重启性能,我们引进了 checkpoint 机制和 FsImage 快照,使得 FsImage 和 editslog 共同为系统元数据提供持久化功能。

那么我们今天就来学习一下,checkpoint 机制具体应该要怎么实现??

BackNode 节点冷备份

NameNode 的主要工作时维护系统中文件元数据,并实现其持久化;在每执行一个操作之后,NameNode 都要生成一个 editslog,最后刷盘(但是不是每生成一条数据就刷盘一次)。

从这我们可以发现,NameNode 进程,它需要额外分配出来一个线程,后台线程定时的去进行磁盘IO的操作,其实这个是很影响本地 CPU 负载的;另外,假设这时候来了很多操作请求,那么系统中将有大量的线程用来来更新内存的文件目录树,这时候肯定是要加锁的了。此时如果系统还要每隔一段时间,耗费比如说几秒钟,甚至几分钟的时间来对文件目录树进行加锁,读取数据,写入本地磁盘;这样就会导致更新文件目录树,和读取文件目录树写入磁盘,它们之间会产生巨大的锁的冲突。

如果上述所有操作都在 NameNode 上执行的话,就太影响 NameNode 节点的性能了。

为此,我们需要考虑给系统中增加一个角色——BackNode,其实它的功能就有点像 HDFS 中的 SecondaryNameNode。

BackNode 是充当于 NameNode 的一个冷备份的角色,我们可以将 checkpoint 的操作交给其来执行,这样就可以减轻 NameNode 这边的性能消耗了。

checkpoint 的实现

BackNode 在启动的时候会启动一个 checkpoint 的调度任务:

// 调度任务:fsImageCheckpointer
defaultScheduler.schedule("FSImage Checkpoint操作", fsImageCheckpointer,
        backupnodeConfig.getCheckpointInterval(), backupnodeConfig.getCheckpointInterval(), TimeUnit.MILLISECONDS);

这是一个定时任务,每隔一段时间就会被执行一次。

下面我们一起来看看 checkpoint 任务具体需要做些什么?

  • 判断当前系统中的 txid 和上一次 checkpoint 时的是否一致,不一致才继续执行
  • 根据当前系统中的数据生成 FsImage
  • 处理掉旧的 FsImage

具体代码如下:

/**
 * checkpoint 任务
 */
@Override
public void run() {
    log.info("BackupNode启动checkpoint后台线程.");
    try {
        // 如果是正在恢复元数据,则直接返回
        if (nameSystem.isRecovering()) {
            log.info("正在恢复元数据...");
            return;
        }
        // 当前 maxid 和 之前记录的 maxid 相等
        if (nameSystem.getMaxTxId() == lastCheckpointTxId) {
            log.info("EditLog和上次没有变化,不进行checkpoint: [txId={}]", lastCheckpointTxId);
            return;
        }
        // 以下讨论的情况是:当前 maxid 和 之前记录的 maxid 不相等(大于)
        // 对当前内存中的数据生成快照
        FsImage fsImage = nameSystem.getFsImage();
        // 更新记录中的 maxid
        lastCheckpointTxId = fsImage.getMaxTxId();
        // 路径
        String fsImageFile = backupNodeConfig.getFsImageFile(String.valueOf(System.currentTimeMillis()));
        log.info("开始执行checkpoint操作: [maxTxId={}]", fsImage.getMaxTxId());
        // 写入FsImage文件
        doCheckpoint(fsImage, fsImageFile);
        // 上传 FsImage 给 NameNode
        uploadFsImage(fsImageFile);
        // 删除旧的FSImage
        namenodeClient.getDefaultScheduler().scheduleOnce("删除FSImage任务", fsImageClearTask, 0);
    } catch (Exception e) {
        log.error("FSImageCheckPointer error:", e);
    }
}

以上就是checkpoint 机制具体实现示例详解的详细内容,更多关于checkpoint 机制实现的资料请关注脚本之家其它相关文章!

相关文章

  • Java分形绘制山脉模型

    Java分形绘制山脉模型

    这篇文章主要为大家详细介绍了Java分形绘制山脉模型,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • 学习Java内存模型JMM心得

    学习Java内存模型JMM心得

    这篇文章主要介绍了学习Java内存模型JMM的心得以及对其原理做了深入的介绍,有兴趣的朋友学习下吧。
    2017-12-12
  • SpringBoot项目中访问HTML页面的实现示例

    SpringBoot项目中访问HTML页面的实现示例

    本文主要介绍了SpringBoot项目中访问HTML页面的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08
  • Java常见基础数据结构

    Java常见基础数据结构

    这篇文章主要介绍了Java常见数据结构面试题,带有答案及解释,希望对广大的程序爱好者有所帮助,同时祝大家有一个好成绩,需要的朋友可以参考下,希望可以帮助到你
    2021-07-07
  • Spring Boot中整合PageHelper实现分页功能详细步骤

    Spring Boot中整合PageHelper实现分页功能详细步骤

    在Spring Boot项目中整合PageHelper并实现分页查询功能的全部步骤,通过以上配置和代码,我们可以轻松地实现数据库分页查询,提高了开发效率并改善了用户体验,感兴趣的朋友跟随小编一起看看吧
    2024-05-05
  • java模拟实现银行ATM机操作

    java模拟实现银行ATM机操作

    这篇文章主要为大家详细介绍了java模拟实现银行ATM机操作,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • java8列表中通过stream流根据对象属性去重的三种方式

    java8列表中通过stream流根据对象属性去重的三种方式

    这篇文章主要介绍了java8列表中通过stream流根据对象属性去重的三种方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • springboot多租户设计过程图解

    springboot多租户设计过程图解

    这篇文章主要介绍了springboot多租户设计过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • 浅析Java中的Caffeine缓存源码

    浅析Java中的Caffeine缓存源码

    这篇文章主要介绍了浅析Java中的Caffeine缓存源码,Caffeine是一个Java开发的高性能缓存库,它提供了一种简单而强大的方式来管理内存中的缓存数据,Caffeine的设计目标是提供快速、高效的缓存访问,同时保持简单易用的API,本文针对其部分源码做出解析,需要的朋友可以参考下
    2023-10-10
  • Java Swing中JTable渲染器与编辑器用法示例

    Java Swing中JTable渲染器与编辑器用法示例

    这篇文章主要介绍了Java Swing中JTable渲染器与编辑器用法,结合实例形式较为详细的分析了Swing中JTable渲染器与编辑器的功能、使用方法及相关注意事项,需要的朋友可以参考下
    2017-11-11

最新评论