大型配置缓存同步



一个平台在中央MySQL数据库中拥有它的所有配置数据。

对于在平台中运行的进程,此配置在缓存中读取内存,该缓存包含具有复杂数据结构的对象 - 适合运行实时平台的目的。

我需要帮助定期将此中央缓存分发到每个分布式组件。目前,应用程序进程需要在缓存同步过程中暂停其常规任务,其中缓存同步是指清除旧的内存中缓存并从 MySQL 中的新数据重新创建它们。

我能想到的一种选择是让进程在生成缓存副本时处理旧缓存,然后从旧切换到新并删除旧缓存。但是缓存确实非常大,预计还会增长。

有没有更好的选择?

提前感谢!

瓶颈是什么?公羊?网络?何时需要将数据转换为内部表示?

无论如何,以下是其他选项的数量:

  1. 如果一致性约束允许,则将配置拆分为块并逐个更新这些块。这将防止内存不足。(Node 下载块 #0,将其转换为内部应用程序格式并删除块 #0 的先前版本;接下来它移动到块 #1;依此类推)。
  2. 根据您使用的语言/平台,可以创建将配置转换为内部应用程序格式的独立工具,而不是在每个节点上单独执行此操作。例如,如果您需要在大量排序数字列表中进行二叉搜索,转换工具可能会从mysql加载所有值,对它们进行排序并写入文件。接下来,将此文件复制到每个节点,每个节点加载此文件替换以前的版本。节点仍然会暂停片刻,但您不会浪费转换时间。
  3. 逐个更新节点(如果一致性要求允许这样做):从群集中删除节点 #0,在其上删除旧版本的配置,加载新版本;添加回群集;移动到下一个节点。
  4. 只需添加更多内存。

最新更新