【问题标题】:Architectural tips on building a shared resource for different processess [closed]为不同进程构建共享资源的架构技巧 [关闭]
【发布时间】:2011-03-10 02:56:06
【问题描述】:

在我工作的公司中,我们正在处理一个大问题:我们有一个由多个处理单元组成的系统。我们这样做是为了让每个模块都有特定的功能。这些模块之间的集成是使用队列系统(速度不快,但我们正在努力)并在这些模块之间复制消息来完成的。问题在于,这会产生大量开销,因为其中四个系统需要相同类型的数据,并且保持这些模块的一致性很糟糕。

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

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

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

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

  • 像记忆一样快
  • 这可以为我提供冗余(主动-被动是可以的,主动主动是好的)

【问题讨论】:

  • 你是把这一切都放在一台机器上吗?如果没有,你就不会“像记忆一样快”
  • 共享内存部分在同一台机器上。冗余部分位于不同的机器上。所以,除了复制部分,一切都应该作为本地内存

标签: c++ linux architecture


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2011-09-26
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    • 2010-09-20
    • 1970-01-01
    • 2012-01-04
    • 2015-12-23
    • 1970-01-01
    相关资源
    最近更新 更多