Apache Ignite 的 Pages Writes Throttling(页面写入节流)


🌟 一、什么是 Checkpointing(检查点机制)?

在 Apache Ignite 中:

  • 数据是先保存在内存中(RAM),然后异步写入磁盘。
  • 当数据被修改时,它首先被更新在内存中的"页"上(称为 Dirty Page 脏页)。
  • 这些脏页最终需要被持久化到磁盘文件中,以确保数据不会因节点宕机而丢失。
  • 这个将脏页从内存同步到磁盘的过程就叫做 Checkpointing(检查点机制)

📌 简单来说:Checkpointing 是把内存中修改过的数据定期刷到磁盘上。


⚠️ 二、为什么 Checkpointing 可能导致写性能下降甚至归零?

情况1:脏页在写入前又被修改了

  • 如果一个脏页在等待 checkpoint 写入磁盘的过程中再次被修改:
    • 它的旧状态 会被复制到一个叫 Checkpointing Buffer(检查点缓冲区) 的特殊区域。
    • 这样做的目的是为了保证 WAL(Write-Ahead Logging)机制的一致性。

🔁 举个例子:

假设你修改了一个页 A,它变成脏页;

在它还没被 checkpoint 到磁盘前,你又改了一次;

那么第一次修改的内容必须被保留下来(放到 checkpoint buffer),以便将来恢复使用。

问题来了:

  • 如果很多页都在频繁修改,checkpoint buffer 就会迅速被填满。
  • 一旦 buffer 溢出(overflow) ,Ignite 就会 暂停所有写操作,直到当前 checkpoint 完成。
  • 结果就是:写入性能骤降为 0!

情况2:脏页比例达到阈值

  • 即使 checkpoint 正在运行,如果又有大量新的脏页产生,达到了系统设定的阈值:
    • Ignite 会 再次触发一个新的 checkpoint
    • 并且会 阻塞所有写操作,直到第一个 checkpoint 完成。

📌 所以,如果磁盘慢或写入压力大,就会不断出现这种情况,形成一种类似"链锯"的行为(Checkpointing Chainsaw)------不停触发 checkpoint、阻塞写入、再触发...


🧠 三、Pages Writes Throttling 是怎么解决这个问题的?

为了解决上面提到的写入性能骤降问题,Ignite 提供了 Pages Writes Throttling(页面写入节流) 机制。

它的工作原理如下:

  • 当 checkpoint buffer 快满了 或者 dirty page 比例快速上升时:
    • Ignite 主动 降低写入速度,让写入的速度不超过磁盘可以处理的能力。
  • 相当于给写入操作加上了一个"限速器",不让它们太快地堆积在 checkpoint buffer 中。

类比理解:

想象你在高速公路上开车(写入操作),前方施工(checkpoint 处理慢)。如果不减速,就会堵死(buffer overflow → 停止写入)。

Throttling 就像是交通管制,告诉你:"别开太快,前面来不及处理。"


✅ 四、总结一下关键点:

概念 含义
Dirty Page 已在内存中修改但尚未写入磁盘的数据页
Checkpointing 定期将内存中的脏页写入磁盘,用于持久化和恢复
Checkpointing Buffer 存放脏页的旧版本,用于 WAL 日志一致性
Checkpointing Chainsaw 不断触发 checkpoint 导致写入阻塞的现象
Pages Writes Throttling 当写入速度过快时,自动限制写入速率,避免系统崩溃

💡 五、建议做法

如果你遇到写入性能波动剧烈、甚至中断的问题,可以尝试:

  1. 启用 Pages Writes Throttling(默认已启用)
  2. 调整相关参数
    • setCheckpointWriteOrder():控制是否顺序写
    • setThrottlingEnabled(true):显式启用节流
  3. 优化磁盘性能
    • 使用更快的 SSD
    • 避免磁盘 IO 成为瓶颈
  4. 合理设置 Checkpointing 时间间隔
  5. 监控脏页数量和 checkpoint buffer 使用情况

如果你有具体的配置、日志内容或性能表现,我可以帮你进一步分析和调优。

相关推荐
DolphinScheduler社区18 小时前
DolphinScheduler 3.3.2 如何调用 DataX 3.0 + SeaTunnel 2.3.12?附 Demo演示!
java·spark·apache·海豚调度·大数据工作流调度
YaBingSec1 天前
玄机网络安全靶场:Apache HTTPD 解析漏洞(CVE-2017-15715)WP
java·笔记·安全·web安全·php·apache
SuperherRo2 天前
服务攻防-中间件安全&Apache&Tomcat&Jetty&Weblogic&AJP协议&反序列化&CVE漏洞
中间件·tomcat·apache·jetty·weblogic
回忆2012初秋2 天前
时序库.net平台下的推荐 SonnetDB,一文分析清除他与Apache IoTDB的区同
apache·iotdb
家有娇妻张兔兔3 天前
Apache POI 导出 Word 踩坑实录:Word 分栏为什么做不好左右平铺
c#·word·apache·poi·分栏
HashData酷克数据3 天前
官宣:Apache Cloudberry (Incubating) 2.1.0 正式发布!
apache
weixin_394758033 天前
直播间小程序码生成问题修复代码清单
android·小程序·apache
YaBingSec4 天前
玄机靶场—Apache-druid(CVE-2021-25646) WP
java·开发语言·笔记·安全·php·apache
回忆2012初秋6 天前
.NET 时序数据操作实战:Apache IoTDB连接与 CRUD 完全指南
.net·apache·iotdb
weixin_430750936 天前
部署FreeRadius+php+apache+mariaDB+daloradius 实现认证计费功能
php·apache·mariadb·daloradius·freeradius