2012-11-08 55 views
3

什麼是在網絡服務器應用程序服務器之間應用緩存層的好工具。緩存策略,以減少Web應用程序服務器上的負載

基本要求:

  1. 應用服務器需要一種方法來從緩存中刪除的項目,並把項目在緩存中的過期日期。
  2. Web服務器需要一種以非常輕量,快速的方式將項目從緩存中取出的方式,而無需在應用程序服務器上分配線程。
  3. 它並不一定需要是分佈式緩存(可從多臺機器訪問),但它不會傷害。

策略我已經考慮:

  1. 靜態文件緩存。請求進入,被哈希,如果我們提供了一個文件,如果沒有,我們將請求路由到應用服務器。是高I/O問題還是因併發導致文件鎖定問題?由於內存中的內核級高速緩存,文件系統實際上是否非常快速準確嗎?
  2. 使用鍵值數據庫,如mongodb或redis。這會將完成的HTML/JSON片段存儲在數據庫中。如果需要,網絡服務器將配備從數據庫讀取並路由到應用程序服務器。應用程序服務器將配備插入/刪除數據庫。
  3. 內存緩存像memcached或Varnish(不太瞭解Varnish)。我唯一關心的是memcached,我希望在任何給定的時間緩存3-10 GB的數據,這比我可以在內存中安全分配的要多得多。 memcached是否有一種方法泄漏到文件系統?

嘗試這種類型的緩存層時,有些技術和陷阱的想法?

+0

Mongodb/redis可以輕鬆地緩存一些數據,尤其是來自SQL的查詢(這大致是Twitter對cassandra的處理)。通常我發現的一個很好的選擇是將半永久緩存(如MongoDB/redis)與memcached混合使用,在memcached中保留小熱量以提高速度,但通過在mongodb/redis中存儲更大的信息來提高速度 – Sammaye

+0

服務數據之間沒有顯着差異來自memcache並從MongoDB/Redis提供服務,前提是後者在內存中有這些選項(MongoDB在數據足夠熱的時候做,但Redis並非100%,但我相信)。 memcache的另一個小問題是它是分佈式的,但不一定需要複製。如果一個memcache節點失敗,它將不得不重新啓動冷,這可能會導致你的問題。 –

+0

如果相關,我不想緩存「數據」。在大多數情況下,緩存將被完整呈現HTML或HTML片段。這並不是真正意義上的減少SQL查詢的方法。這是減少整個應用程序堆棧上的負載,但將緩存層移動到Web服務器的一種方法。 – Nucleon

回答

3

您還可以在內存數據網格中使用GigaSpaces XAP進行緩存,甚至託管您的Web應用程序。您可以選擇僅緩存選項,或將兩者的強大功能結合起來,並沿着其他方式獲得對環境的單一管理。

與您建議的關鍵值對方法不同,使用GigaSpaces XAP,您將能夠進行復雜的查詢,如SQL,基於對象的鏡架等等。在緩存場景中,您應該更具體地查看本地緩存相關的功能。

Local Cache

Web Container

聲明,我在GigaSpaces的開發。

埃坦

0

只是爲了利用相干(http://coherence.oracle.com/)的POV回答這個問題:

1。應用程序服務器需要一種方法來從緩存中刪除項目,並將項目放入緩存並具有到期日期。

// remove one item from cache 
cache.remove(key); 

// remove multiple items from cache 
cache.keySet().removeAll(keylist); 

2. Web服務器需要一種方式來拉一個非常輕量級的項目從緩存中,快速的方式,而不在應用服務器上需要線程分配。

// access one item from cache 
Object value = cache.get(key); 

// access multiple items from cache 
Map mapKV = cache.getAll(keylist); 

3.不neccessarily需要一個分佈式緩存(從多臺機器訪問),但它不會傷害。

  • 彈性。只需添加節點。自動發現。自動負載平衡。沒有數據丟失。沒有中斷。每次添加節點時,都會獲得更多的數據容量和更多的吞吐量。
  • 自動高可用性(HA)。殺死一個進程,沒有數據丟失。殺死一臺服務器,沒有數據丟失。

內存緩存像memcached或Varnish(不太瞭解Varnish)。我唯一關心的是memcached,我希望在任何給定的時間緩存3-10 GB的數據,這比我可以在內存中安全分配的要多得多。 memcached是否有一種方法泄漏到文件系統?

  • 同時使用RAM和閃存。透明。輕鬆處理每個Coherence節點10甚至100s的千兆字節(例如每個物理服務器最多可達TB或更多)。

爲了充分披露,我在甲骨文公司工作。本文所表達的意見和觀點屬於我自己的觀點,並不一定反映我的僱主的意見或看法。

相關問題