2009-02-04 55 views
0

我有一個服務接受來自提供者的回調。 動機:我不想失去任何回調(除非我的網絡變得無法訪問)。備份持久性存儲。我有什麼選擇?

讓我們假設不可能發生,我的MySQL服務器有一段時間無法到達, 我想回退到次要持久性存儲一旦我試多次和失敗。

我有什麼選擇?隊列,內存緩存?

回答

1

你說你正在收到「回調」 - 你還沒有弄清楚它們是什麼。協議是什麼?它通過網絡嗎?

如果是HTTP,那麼我認爲最好的辦法是如果您的應用程序無法將數據寫入永久存儲器,它應該返回一個錯誤(如果協議中存在「稍後再試」),則返回來電者,誰應該稍後再試。

像回調這樣的異步過程應該始終能夠應對下游故障並排隊它的請求。

我已經與支付提供商合作,在這種情況下(貝寶)。如果您無法完整處理請求,則只需將錯誤發回給調用者。

+0

是的提供者將通過HTTP調用我的服務。是的,他們正在發送金融交易,雖然這不是貝寶。 – ashitaka 2009-02-04 10:23:13

0

我推薦某種排隊服務器。我個人使用Starling,並取得了很好的成績。它說的是memcache協議,因此很容易用作持久隊列。 Starling on Github

+0

感謝FlipFlop。我會考慮Starling。 Github正在成爲項目的溫牀。 – ashitaka 2009-02-04 03:25:11

0

我已經在SQLite中爲此放入了一個隊列。雖然在我的情況下,它是爲了防止丟失到MySQL服務器的網絡鏈接 - 數據是本地生成的。

0

您可以擁有一臺備用MySQL服務器,並在主服務器發生故障時切換到該服務器。如果它只是故障轉移存儲,那麼可以在應用程序服務器上本地運行它。