Varnish 可以自動確定應該使用哪種儲存介質來記憶體對象嗎?
例如,我有一個非常緩慢且過時的後端提供程序,請求通常需要幾十秒。我們還有一台記憶體適中、儲存空間大的機器。理想情況下,我想同時使用記憶體和儲存來服務請求。
我發現:
https://info.varnish-software.com/blog/partitioning-your-varnish-cache
但這似乎意味著我必須在兩者之間手動拆分數據,這似乎具有挑戰性?
正如 Gerard H. Pille 在評論中指出的那樣,作業系統的頁面記憶體將確保熱數據儲存在記憶體中。
文件裝卸工
就 Varnish 而言,這意味著您可以使用
file
裝卸工來儲存對象。在這裡你將如何配置它:
varnishd -s file,/var/lib/varnish/storage,250G
我只關注
-s
上面範例中的參數。實際上,會有很多參數用於varnihsd
.結合 malloc 和文件
如果你有一個非常明確的指示哪些內容只存在於記憶體中,你可以定義多個stevedors,如下圖所示:
varnishd -s disk=file,/var/lib/varnish/storage,250G -s memory=malloc,32G
在VCL中,您可以執行以下操作:
sub backend_response { if(beresp.http.Content-Type ~ "^(image|video)/") { set beresp.storage = "file"; } else { set beresp.storage = "memory"; } }
文件搬運工限制
file
裝卸工人具有記憶體大量數據的能力。主要問題是隨著時間的推移它容易出現磁碟碎片。我們已經看到
file
基於設置的設置在加班時表現非常糟糕,主要是由於碎片化。另一個缺點是作業系統的頁面記憶體會猜測應該放入記憶體的正確內容。
最後,雖然磁碟是持久的,但
file
stevedore 不是:一旦你重新啟動Varnish,你的記憶體內容就消失了。海量儲存引擎
在Varnish Software,我們開發了Massive Storage Engine,這是一種先進的搬運工,可以解決存在的問題
file
。有關詳細資訊,請參閱https://docs.varnish-software.com/varnish-cache-plus/features/mse/。
免責聲明:
mse
是一個專有的裝卸工人,是Varnish Enterprise的一部分。它需要商業許可證,但有AWS、Azure和GCP的官方機器映像,您可以按小時付費,而無需預先購買許可證密鑰。MSE的可配置性更高,並且在設計時考慮了反碎片化。記憶體記憶體不依賴於作業系統的頁面記憶體,其性能優於
malloc
Varnish 中的標準實現。持久層可以根據您的需要,基於多個儲存位置進行定制。還有一個模組允許您從 VCL 中選擇特定的儲存設備(請參閱https://docs.varnish-software.com/varnish-cache-plus/vmods/mse/)。
最後,記憶體管理器功能會根據 Varnish 其他部分的記憶體需求自動調整記憶體大小。請參閱https://docs.varnish-software.com/varnish-cache-plus/features/mse/memory_governor/