3

我有一個高性能的應用程序,我正在考慮使分佈式(使用rabbitMQ作爲MQ)。應用程序使用數據庫(當前爲SQLServer,但我仍然可以切換到其他內容)並將其大部分緩存在RAM中以提高性能。 這會導致問題,因爲當其中一個應用程序寫入數據庫時​​,其他人的緩存數據庫變得過時。高性能應用程序緩存數據庫表

我覺得這是在高可用性社區中發生的事情,但是我找不到任何有用的東西。我想我不是在尋找正確的東西。 有沒有開箱即用的解決方案?

PS:我很抱歉,如果這屬於serverfault - 因爲這是一個發展問題我想它屬於這裏

編輯: 應用程序讀取和寫入到數據庫中。由於我正在更改要分發的應用程序 - 現在有多個應用程序讀寫數據庫。緩存是在每個分佈式應用程序中完成的,它們不知道其他應用程序的數據庫更改。 我的意思是 - 如何知道數據庫是否已更新,如果他不是更新的數據庫?

+0

這是什麼意思,「當其中一個應用程序寫入數據庫時​​,其他人的緩存數據庫變得過時。」你有多個應用程序共享數據庫嗎?什麼樣的緩存?它是應用程序的本地緩存,還是...? – ryan1234

+0

編輯原始問題,嘗試和澄清事情 – Nitay

+0

關閉緩存.... –

回答

2

因此,您在各種服務器上有一個數據庫和許多應用程序。每個應用程序都有自己的緩存,所有的應用程序都在讀取和寫入數據庫。

查看分佈式緩存而不是本地緩存。檢查memcached或AppFabric。我已經成功使用AppFabric在Microsoft堆棧中緩存事物。您可以簡單地向AppFabric添加新節點,並自動分發對象以實現高可用性。

如果您移動到共享緩存,則可以將緩存中對象的到期時間放入。試着抵制在事情發生變化時主動驅逐物品的誘惑。這成爲一個非常困難的問題。

我會建議隔離你的關鍵項目,只緩存一次。例如,在拍賣網站上工作時,我們非常積極地緩存。我們只緩存了一次拍賣商品的價格。這樣當其他人競標時,我們只需要做一次驅逐。我們不必瀏覽整個緩存並詢問「價格在哪裏出現?改變它!」

對於95%的數據,讀取將自行失效,寫入操作不會立即影響它們。當新的寫入進來時,需要將5%的數據驅逐出去。這就是我稱之爲「重要項目」的內容。事物總是需要更新。

希望能給你點子!

+0

分佈式緩存...聽起來像我需要的東西。你有在C++環境下的經驗嗎? – Nitay

+1

我不這樣做,但請查看C++ memcached客戶端。 http://code.google.com/p/memcached/wiki/Clients – ryan1234

+0

會做。非常感謝 – Nitay