2014-02-12 25 views
0

我們目前有一個網站託管在一臺服務器上,我們正在考慮添加一臺新服務器。主要問題是關於緩存。有些項目會根據更改時間進行緩存。但是現在,它們在相同的過程中被改變,因此緩存可以失效。處理與多個服務器的陳舊緩存

如果網站託管在兩臺服務器上,可以在兩臺服務器上完成更改,並且不會通知這些更改。緩存需要保留,因爲它大大加快了網站的速度。我寧願如果緩存不在緩存服務器中進行進程外,因爲它會降低網絡速度而不是內存速度,並增加服務器的複雜性。

該網站是在.Net中實現的,使用MySQL作爲其備份數據存儲。我的問題是如何在數據更改時通知流程。當數據發生變化時,MySQL是否有可能自動通知所有已註冊的客戶端?我使用了RavenDb,它具有類似的功能,非常方便。我找不到任何類似於MySQL的東西。如果這是不可能的,任何想法如何解決這個問題?

回答

1

分佈式緩存是一個複雜的話題。這聽起來像你正在運行一個更基本的內存緩存。如果是這種情況,您需要自己處理同步,或者對數據的「最終一致性」感到滿意,假設您有一些過時的密鑰檢查機制。

就我個人而言,我會研究使用memcached(我們使用Couchbase)。您對此成爲網絡瓶頸的看法可能未被實現,但是實際情況是,內存訪問速度更快。實際上,我們注意到Couchbase緩存的速度足夠快,並且在關鍵級別上是原子性的。它將處理節點上的密鑰分發。

至於MySQL推送通知給客戶端,我不知道,但我不這麼認爲。如果你有一層代碼(DAL等)通過數據庫訪問,你可以自己模擬它。

要使緩存遵循與數據庫相同的完整性原則,也很難調和。如果你做到了這一點,那麼你所做的全部都是內存數據庫。緩存應該是一段時間內數據準確性的折衷,以提高可伸縮性。

+0

是的,我正在運行一個基本的內存中緩存。問題是這是一箇舊的代碼庫,並且緩存中的一些對象不容易序列化。因此,內存工作正常,但進程外需要它們是可序列化的。 Couchbase似乎是NoSQL數據庫,而不是緩存服務器?我認爲現在我不得不面對最終的一致性。如果數據庫服務器支持更改通知,這將是實施的一塊蛋糕。不幸的是MySQL似乎沒有。 –

+0

@KarlCassar Couchbase是一種介於兩者之間的產品。它在底層使用了memcached,但在關鍵級別提供了光盤支持和原子性,因此它是一種溫和的內存數據庫。我們傾向於使用它的緩存面比光盤背面更多。 –