博客
关于我
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/

    你可能感兴趣的文章
    OpenCV_ cv2.imshow()
    查看>>
    opencv——图像缩放1(resize)
    查看>>
    Opencv——模块介绍
    查看>>
    OpenCV与AI深度学习 | 2024年AI初学者需要掌握的热门技能有哪些?
    查看>>
    OpenCV与AI深度学习 | CIB-SE-YOLOv8: 优化的YOLOv8, 用于施工现场的安全设备实时检测 !
    查看>>
    OpenCV与AI深度学习 | OpenCV图像拼接--Stitching detailed使用与参数介绍
    查看>>
    OpenCV与AI深度学习 | OpenCV快速傅里叶变换(FFT)用于图像和视频流的模糊检测(建议收藏!)
    查看>>
    OpenCV与AI深度学习 | SAM2(Segment Anything Model 2)新一代分割一切大模型介绍与使用(步骤 + 代码)
    查看>>
    OpenCV与AI深度学习 | YOLO11介绍及五大任务推理演示(目标检测,图像分割,图像分类,姿态检测,带方向目标检测)
    查看>>
    OpenCV与AI深度学习 | YOLOv11来了:将重新定义AI的可能性
    查看>>
    OpenCV与AI深度学习 | YOLOv8重磅升级,新增旋转目标检测,又该学习了!
    查看>>
    OpenCV与AI深度学习 | 使用OpenCV轮廓检测提取图像前景
    查看>>
    OpenCV与AI深度学习 | 使用Python和OpenCV实现火焰检测(附源码)
    查看>>
    OpenCV与AI深度学习 | 使用PyTorch进行小样本学习的图像分类
    查看>>
    OpenCV与AI深度学习 | 使用YOLO11实现区域内目标跟踪
    查看>>
    OpenCV与AI深度学习 | 使用YOLOv8做目标检测、实例分割和图像分类(包含实例操作代码)
    查看>>
    OpenCV与AI深度学习 | 使用单相机对已知物体进行3D位置估计
    查看>>
    OpenCV与AI深度学习 | 初学者指南 -- 什么是迁移学习?
    查看>>
    OpenCV与AI深度学习 | 十分钟掌握Pytorch搭建神经网络的流程
    查看>>
    OpenCV与AI深度学习 | 基于GAN的零缺陷样本产品表面缺陷检测
    查看>>