2010-03-15 41 views
8

我需要使用東西來協調我的系統與幾個消費者/生產者,每個消費者/生產者運行在不同操作系統的不同機器上。我一直在研究使用MySql來做到這一點,但它似乎很難。生產者/消費者系統使用數據庫(MySql),這是可行的嗎?

我的要求很簡單:我希望能夠隨時添加或刪除消費者/生產者,因此他們不應該依賴彼此。當然,一個數據庫會很好地分離兩者。

我一直在尋找MySql的Q4M消息隊列插件,但它使用起來似乎很複雜。

我真的需要一些關於如何最好地構建我的系統的建議。

+0

你問的是架構?消息隊列是標準解決方案。你在問建立Q4M的技術問題嗎?請將您的問題集中在一般的架構或特別是Q4M上。兩者都很難回答。 – 2010-03-15 17:47:24

+0

這個問題是關於體系結構。我將在Q4M編譯中發佈另一個具體的內容。 – johnrl 2010-03-15 19:13:37

+0

如果您確實在詢問架構,請問您可以編輯您的問題以關注架構? Q4M問題的分散使人們難以理清問題並提供合理的幫助。請刪除分散注意力的內容並專注於您的問題。 – 2010-03-16 10:26:52

回答

5

我需要用什麼來協調 幾個 消費者/生產者各有不同 操作系統

這是一個消息隊列上 不同的機器上運行我的系統。不要追求其他選擇。其他一切(即使用插入和刪除的數據庫)極其緩慢和麻煩。由於(1)數據庫速度慢,(2)數據庫非常龐大且複雜,(3)您有鎖定和爭用問題,這些問題會導致每個事務可能會很慢,(4)它比問題所需要的開銷要多得多。

有許多消息隊列解決方案。

如果你不能使Q4M工作,你應該移動到另一個。

http://en.wikipedia.org/wiki/Message_queue

http://linux.die.net/man/7/mq_overview

http://qpid.apache.org/

http://code.google.com/p/httpsqs/

+0

我明白了。感謝您的鏈接。我想我會使用消息隊列解決方案。 MSMQ聽起來像一個很好的解決方案(對.net)。 – johnrl 2010-03-16 10:48:26

1

我認爲沒有第三方軟件是可行的。

我的第一個設計是這樣的:

  • 生產者將數據寫入到數據庫
  • 爲了保證一致性,必須使用事務
  • 消費過程中的數據(讀取和刪除)也使用交易。

由於事務要求,InnoDB是存儲引擎的合理選擇。你也必須謹慎選擇隔離級別。我的第一個猜想是「可序列化」,以避免幻影讀取,但也可能是較弱的水平。

如果性能和可伸縮性是一個問題,您應該考慮使用「真正的」消息解決方案。推出你的產品很可能會導致性能和/或可擴展性問題。

2

它實際上是(相當)複雜,建立這樣的系統。 (我公平地說,因爲它當然是可行的)。

如果你有多個生產商和一個消費者,這很容易。所有生產者同時寫入,並且單個消費者只要可見(提交)即可讀取數據。

但是,如果你想要與幾個消費者的可擴展性,你將需要創建一個不平凡的鎖定方案。 (你必須確保沒有行被分派給兩位消費者,這是不容易實現與數據庫事務和鎖。天真的解決方案,導致所有的消息傳送的序列,像你只有一個消費者,這是我們不想要的。 )。

我會建議使用內置的解決方案。你也可以閱讀this question關於類似的問題。

0

這要看情況。

在我的情況下,只有一個製片人讓每天成千上萬的消息,一些消費者在接下來的24小時,其中每一個需要幾個minites完成消費這些消息。所以,我認爲mysql會滿足我的要求,我可以使用這些事務來確保消費者之間的一致性。

希望它會有所幫助。