1
我們使用Varnish Cache作爲前端服務給很多客戶,而我們通過寬限期服務器陳舊內容,而任何後端生病。增加後端生病時的清漆寬限時間
我們現在有一個失敗的後端,我們想增加寬限期(雖然它生病了),這是一種可能的情況嗎?我試着在文檔中挖掘並沒有發現任何東西。
光油4
我們使用Varnish Cache作爲前端服務給很多客戶,而我們通過寬限期服務器陳舊內容,而任何後端生病。增加後端生病時的清漆寬限時間
我們現在有一個失敗的後端,我們想增加寬限期(雖然它生病了),這是一種可能的情況嗎?我試着在文檔中挖掘並沒有發現任何東西。
光油4
清漆緩存4.x的服務內容陳舊時生病後端是一個普遍使用的緩存。你只需要實現你自己的vcl_hit
子程序。這個想法是使用高寬限期值(如24小時)緩存的內容,但限制的寬限期,以一個小的時間窗口(例如10秒)時,你的後臺是健康的:
sub vcl_hit {
if (obj.ttl >= 0s) {
# Normal hit.
return (deliver);
}
# We have no fresh fish. Lets look at the stale ones.
if (std.healthy(req.backend_hint)) {
# Backend is healthy. Limit age to 10s.
if (obj.ttl + 10s > 0s) {
return (deliver);
} else {
# No candidate for grace. Fetch a fresh object.
return(fetch);
}
} else {
# Backend is sick. Use full grace.
if (obj.ttl + obj.grace > 0s) {
return (deliver);
} else {
# No graced object.
return (fetch);
}
}
}
欲瞭解更多信息,請查詢:
謝謝,但我仍然沒有得到它。情景是,我有你所說的vcl_hit,並設置寬限爲5h,後端生病了。我想增加這些5小時,讓我們說10小時左右,但它仍然生病,這是一種可能的情況? –
據我所知,如果您使用寬限值爲X小時的內容將內容存儲在Varnish Cache中,則該內容將在存儲插入X小時後從存儲中刪除,並且在VCL中無法執行任何操作避免(你有''beresp.keep'',但我認爲這裏沒有用)。因此,唯一的解決方案是使用高於最長期望後端中斷的寬限值來存儲objets。 –
明白了,謝謝,我非常感謝你的幫助:) –