我正在尋找一種解決方案來保證客戶端使用清漆的響應時間,而不會限制後端響應時間。限制清漆客戶端等待時間,而不是後端時間
我有大約100個不同的資源(http://host/resource.js?id = 1等),平均每秒鐘在後端計算一次。這些資源通過清漆進行緩存,因此每個資源都可以同時服務於多個客戶端。資源被包含爲同步(頁面阻止)javascript,因此響應應該快速服務(例如3秒)。因爲我想保證客戶端的響應時間,所以我想不出比在這3秒內配置後端超時更好的解決方案。一個例子vcl看起來像:
backend mybackend {
.host = "127.0.0.1";
.port = "8080";
.connect_timeout = 100ms;
.first_byte_timeout = 3s;
.between_bytes_timeout = 3s;
.probe = {
.url = "/resource?id=1";
.timeout = 3s;
.window = 4;
.threshold = 4;
.interval = 15s;
}
}
sub vcl_recv {
set req.backend = mybackend;
set req.grace = 5d;
return (lookup);
}
sub vcl_fetch {
set obj.ttl = 2m;
set obj.grace = 5d;
return (deliver);
}
我的問題是以下。在停止後端5分鐘並重新啓動後(在寬限期內清漆會提供陳舊的數據)之後,會在後端同時提取許多不同的資源(超出TTL但在寬限範圍內)。這會嚴重影響數據庫,並且在3秒內沒有任何資源被傳遞,也沒有任何資源被緩存。
如何避免此問題?我想保證客戶端的響應時間,但不限制後端的響應時間。失敗(虛擬javascript)暫時可以接受。隨着時間的推移,有什麼方法可以傳播請求嗎? (陳舊數據比錯誤更受歡迎)。
感謝, 艾弗
我會在標籤中加入編程語言,我不認爲'varnish'標籤如此受歡迎,以至於有人會注意到這個問題(我很幸運,);)。 – 2011-03-03 23:11:48
謝謝,我已經添加了java,雖然這個問題真的是關於清漆/ vcl – ivy 2011-03-03 23:17:41