2013-07-15 14 views
0

我想知道如果我的(可能很奇怪)用例可能在VCL中用VCL實現。我的應用程序依賴於從可緩存的API服務器接收響應,延遲非常低(如果可能,則爲亞毫秒)。應用程序的編寫方式是適當地處理「空」響應(並且在某些情況下是有效的響應),並且API的設計方式使得非空響應長時間有效(即天)。返回合成響應,然後在Varnish中獲取並緩存對​​象?

所以,我想要做的是什麼配置清漆使其:

  1. 試圖查找(和返回),對於給定的API調用
  2. 在高速緩存未命中緩存的響應,立即返回一個「空」的響應,並排隊等待後端
  3. 開,這是在#2高速緩存未命中的URL未來的呼叫請求,返回現在緩存響應

是否有可能使清漆ac用這種方法單獨使用VCL?如果沒有,是否有可能寫VMOD來做到這一點(如果是這樣,指針,提示等,將不勝感激!)

回答

0

我不認爲你可以單獨使用VCL,但使用VCL和一些客戶端邏輯,你可以很容易地管理它,我想。

在vcl_miss中,使用錯誤200返回空白文檔,並在默認情況下設置名爲X-Try-Again的響應標頭。 在客戶端應用程序中,當使用X-Try-Again設置接收到空的響應時,請求異步地使用相同的資源,但向請求添加一個名爲X-Always-Fetch的標頭。您的應用程序不會等待響應,或者在應用程序到達時執行任何操作。 也在vcl_miss中,檢查是否存在相同的X-Always-Fetch標頭。如果存在,則返回(取)而不是空文檔。這將請求後端的內容並將其緩存以備未來請求。

我還發現這篇文章可以提供一些幫助,雖然相比,只是用你的客戶端代碼的實現是一個有點笨重對我說:http://lassekarstensen.wordpress.com/2012/10/11/varnish-trick-serve-stale-content-while-refetching/

相關問題