博客
关于我
TiDB Binlog 源码阅读系列文章(六)Pump Storage 介绍(下)
阅读量:643 次
发布时间:2019-03-13

本文共 1896 字,大约阅读时间需要 6 分钟。

valueLog 组件

valueLog 是 Pump Storage 中一个关键组件,负责将 Binlog 事件持久化存储到磁盘上的 logFile 文件。其核心功能包括定位 Binlog 事件、管理 logFile 文件以及优化磁盘存储结构。值得注意的是,valueLog 中的每条 Binlog 记录都由唯一的 StartTs 和 CommitTs 作为键值存储,而 value 则是一个指针,指向 valueLog 中的具体 Binlog 记录。

valueLog 的结构体定义如下:

type valueLog struct {	buf *bytes.Buffer // 用于写入当前 log 文件的缓冲区	dirPath   string	// log 文件所在的数据目录	sync      bool	// 是否同步到磁盘	maxFid    uint32	// log 文件中的最大 Fid	// filesLock sync.RWMutex	// 用于保护文件 map 的同步锁	// filesMap map[uint32]*logFile	// 存储所有 Fid 对应的 logFile 对象	// opt *Options	// 应用配置}

logFile 文件在 Pump 数据目录下以特定命名保存,例如 "000001.log",其中 "000001" 即为 log 文件编号的 Fid。valueLog 组件通过 maxFid 确定当前最大的 Fid,并仅将 Binlog 写入该 Fid 对应的 logFile。filesMap 用于存储所有 Fid 的映射关系。

valueLog 的主要功能包括:

  • 定位 Binlog 事件:通过 StartTs 和 CommitTs 作为键值快速定位对应的 Binlog 记录。
  • 持久化存储:将 Binlog 事件编码后写入 logFile 文件。
  • 文件管理:定期扫描 logFile 文件,维护其映射关系,优化磁盘存储结构。
  • 值得注意的是,valueLog 在关闭时会检查 logFile 是否已完成写入。如果 logFile 已有 footer(文件尾部标志),则直接关闭;否则,会扫描 logFile 内存中的所有 Binlog 事件,更新 maxTS,并在文件尾部添加 footer,以便下次启动时快速定位 Binlog 记录。

    slowChaser 组件

    slowChaser 是 Pump Storage 用于应对 GoLevelDB 写入缓慢或暂停的情况的优化组件。它通过定期扫描磁盘上的 logFile 文件,读取未写入KV存储的 Binlog 事件,并将其写入 GoLevelDB,以避免影响 Pump Storage 的整体性能。

    slowChaser 的主要功能包括:

  • 初始化与启动:在 Pump 收到 Binlog 事件后启动,监控 KV 写入速度。
  • 定期扫描:从指定的 valuePointer 开始,逐次读取 logFile 中的 Binlog 事件,写入 KV 存储。
  • 优化机制:通过定期检查和关闭,确保在 KV 写入恢复正常后及时停止扫描,以免影响性能。
  • slowChaser 的运行机制较为复杂。它会在以下场景下启动:

    • 当 GoLevelDB 因 compaction 操作导致写入变慢或暂停时。
    • 当 Pump 服务器接收到大量 Binlog 事件,导致 KV channel 被填满。

    在运行过程中,slowChaser 会通过定期检查确认 KV 写入是否恢复正常。如果确认后,会关闭当前轮次的扫描操作。如果 KV 写入速度未能恢复,slowChaser 会继续进行下一轮扫描。

    值得注意的是,slowChaser 的扫描操作会增加磁盘读取和 KV 写入的开销,因此其使用应谨慎,仅在必要时启动,以避免对整体性能造成负面影响。

    小结

    本文详细介绍了 Pump Storage 中的两个关键组件:valueLog 和 slowChaser。valueLog 负责将 Binlog 事件持久化存储到磁盘,优化文件管理和定位机制;slowChaser 则用于应对 KV 存储的性能瓶颈,通过定期扫描和写入优化系统性能。理解这两个组件的工作原理,对于掌握 TiDB 的 Pump 部分源码具有重要意义。

    在下一篇文章中,我们将深入介绍 Drainer Server 模块,阐述其启动机制、状态维护以及全局 Binlog 数据管理方法,为进一步理解 TiDB 的 Binlog 处理系统奠定基础。

    转载地址:http://hbkoz.baihongyu.com/

    你可能感兴趣的文章
    NoSQL&MongoDB
    查看>>
    NoSQL介绍
    查看>>
    Notepad ++ 安装与配置教程(非常详细)从零基础入门到精通,看完这一篇就够了
    查看>>
    Notepad++在线和离线安装JSON格式化插件
    查看>>
    notepad++最详情汇总
    查看>>
    notepad如何自动对齐_notepad++怎么自动排版
    查看>>
    Notification 使用详解(很全
    查看>>
    NotImplementedError: Cannot copy out of meta tensor; no data! Please use torch.nn.Module.to_empty()
    查看>>
    Now trying to drop the old temporary tablespace, the session hangs.
    查看>>
    nowcoder—Beauty of Trees
    查看>>
    np.arange()和np.linspace()绘制logistic回归图像时得到不同的结果?
    查看>>
    np.power的使用
    查看>>
    NPM 2FA双重认证的设置方法
    查看>>
    npm ERR! ERESOLVE could not resolve报错
    查看>>
    npm error Missing script: “server“npm errornpm error Did you mean this?npm error npm run serve
    查看>>
    npm error MSB3428: 未能加载 Visual C++ 组件“VCBuild.exe”。要解决此问题,1) 安装
    查看>>
    npm install digital envelope routines::unsupported解决方法
    查看>>
    npm install 卡着不动的解决方法
    查看>>
    npm install 报错 EEXIST File exists 的解决方法
    查看>>
    npm install 报错 ERR_SOCKET_TIMEOUT 的解决方法
    查看>>