2010-06-30 65 views
0

在我工作的公司中,我們正在處理一個巨大的問題:我們有一個由多個處理單元組成的系統。我們是這樣做的,所以每個模塊都有特定的功能。這些模塊之間的集成是通過使用隊列系統完成的(雖然速度並不快,但我們正在研究它),並在這些模塊之間複製消息。問題是這會產生很大的開銷,因爲其中四個系統需要相同類型的數據,並且保持這些模塊的一致性是不好的。關於爲不同流程構建共享資源的建築技巧

該系統的另一個要求是冗餘,所以我想一次性殺死這兩個問題。

所以我想使用某種共享資源。我研究過共享內存(這很好,但如果module crashes導致程序不一致,可能會導致鎖定不一致),並且可能會從該段執行一些「原始複製」到另一臺計算機以執行冗餘。

所以我開始尋找替代品,想法和類似的東西。我發現一個是noSQL,但我不知道我要求的速度是否足夠。

我需要的東西(理想):

  • 記憶樣快速
  • 這可能爲我提供冗餘(主動 - 被動是確定的,積極主動爲好)
+0

你把這一切都放在一臺機器上?如果沒有,你沒有得到「像內存一樣快」 – Stephen 2010-06-30 12:48:36

+0

共享內存部分是在同一臺機器上。冗餘部分位於不同的機器上。所以,除了複製部分之外,所有東西都應該作爲本地內存使用 – scooterman 2010-06-30 14:30:48

回答

1

我也覺得那共享內存是要走的路。爲了提供冗餘,讓每個進程都將要更改的數據複製到本地/非共享內存。只有在模塊完成其工作後,纔將其複製回共享內存。確保「複製到共享內存」部分儘可能小,並且在複製時不會出現任何問題。你可以使用一些技巧是:

  • 準備在本地內存中的所有數據,並使用一個memcpy的操作將它複製到共享內存
  • 使用單個值,表明寫入的數據是有效的。這可能是一個布爾值或類似於版本號的東西,它指示寫入共享內存的數據的'版本'。