有关为不同进程构建共享资源的体系结构提示

时间:2010-06-30 12:39:10

标签: c++ linux architecture

在我工作的公司,我们正在处理一个巨大的问题:我们有一个系统,包含几个处理单元。我们这样做,所以每个模块都有特定的功能。这些模块之间的集成是使用队列系统完成的(这不是很快,但我们正在处理它)并在这些模块之间复制消息。问题是这会产生大量开销,因为其中四个系统需要相同类型的数据,并且维护这些模块的一致性是不好的。

系统的另一个要求是冗余,所以我想一次性解决这两个问题。

所以我在考虑使用某种共享资源。我查看了共享内存(这很好,但如果导致程序不一致的module crashes可能导致锁定不一致),并且可能会从段中执行一些“原始副本”到另一台计算机来执行冗余。

所以我开始寻找替代方案,想法和类似的东西。我找到了一个noSQL,但我不知道我要求的速度是否足够。

我需要一些东西(理想情况下):

  • 类似记忆的快速
  • 这可以为我提供冗余(主动 - 被动是好的,主动主动是好的)

1 个答案:

答案 0 :(得分:1)

我也认为共享内存是要走的路。要提供冗余,请让每个进程将要更改的数据复制到本地/非共享内存。只有在模块完成其工作后,才将其复制回共享内存。确保“复制到共享内存”部分尽可能小,并且在执行复制时不会出错。你可以使用的一些技巧是:

  • 准备本地内存中的所有数据并使用一个memcpy操作将其复制到共享内存
  • 使用单个值表示写入的数据有效。这可以是布尔值,也可以是版本号,表示共享内存中写入的数据的“版本”。