2016-08-08 70 views
2

我們有一個正在生產中運行的memcached羣集。現在我們用一個Couchbase集羣替代memcached作爲持久緩存層。問題是如何實現這個切入點以及如何預熱Couchbase存儲桶。顯然,我們不能簡單地切換到冷Couchbase,因爲從舊緩存開始會導致整個網站停止運行。Couchbase熱身策略

我在想的一個選擇是首先將Couchbase作爲memcached節點進行預熱。這意味着Couchbase正在使用(非持久性)memcached存儲桶,並像其他任何memcached節點一樣獲取緩存設置/獲取流量。關於它的好處是代碼更改最少(需要配置moxi代理以獲取memcached流量,並將該節點註冊爲memcached節點)。稍後我們會將所有memcached存儲桶轉換爲Couchbase。但不確定Couchbase支持這兩種類型的存儲桶之間的轉換。

第二個選項是在開始時設置持久Couchbase存儲桶(而不是非持久性memcached存儲桶)。我們更改生產緩存客戶端以將所有流量複製到memcached和coucbase羣集。我們監控Couchbase存儲桶,一旦緩存項目達到特定大小,我們完成切換。一個小缺點是更改緩存客戶端的額外複雜性。

想法?在8月9日

編輯2016

正如我後來發現,轉換memcached的桶桶couchbase不Couchbase支持。所以第一種選擇是不可行的。

最後我們決定在每個應用程序主機中設置Client-side (standalone) proxy。我們從主機到主機遞增地增加緩存流量。這樣,網站上的變化就足夠小了。

回答

1

如果你想要方便,工作量少,並且被證明運行良好,做到以下幾點:

  1. 設置每個應用程序服務器上的客戶端沒戲。
  2. 將Moxi指向Couchbase羣集上的Couchbase存儲桶。
  3. 更改您的Web應用程序服務器以指向本地MOXI安裝。
  4. 對於您的下一個代碼修訂,開始將您的代碼轉換爲使用Couchbase SDK而不是memcached。

是的,有一段時間,緩存中的東西不會很熱,但Couchbase不會很長時間才能填充。這種方法被用於所有的時間切換。這很容易,幾乎是傻瓜證明。有一件事我看到人們做的是在切換之前嘗試將現有的memcached服務器上的東西複製到Couchbase中,但我不確定的是他們如何在memcached中新增每個值的關鍵字。

另外請注意,Moxi是一個臨時的步驟,可以輕鬆地從常規的memcached中取出,這很好,但從長遠來看,切換到SDK要好得多。 SDK具有比純memcached更多的功能。

不要使用memcached存儲桶,因爲它們沒有HA,持久性或Couchbase的任何功能。

+0

謝謝,柯克。這是我們最終決定要做的。應用程序方面似乎是一個合理的選擇。現在我們甚至可能會離開這樣的設置並切換到SDK,因爲在代碼中切換緩存客戶端非常麻煩。 –

+0

此外,在切換之前將事務從memcached複製到coucbbase的問題也是如此。這似乎增加了複雜性而不是解決問題。 –