大型配置缓存同步

时间:2016-01-15 14:32:21

标签: distributed

平台将所有配置数据放在中央MySQL数据库中。

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

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

我能想到的一个选项是,在生成缓存副本的同时让进程在旧缓存中工作,然后从旧模式切换到新模式并删除旧模式。但是缓存非常庞大并且预计会增长。

有更好的选择吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

瓶颈是什么?内存?网络?是否需要将数据转换为内部表示的时间?

无论如何,这里有其他选项的数量:

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