2016-07-26 55 views
1

我們使用Varnish Cache作爲前端服務給很多客戶,而我們通過寬限期服務器陳舊內容,而任何後端生病。增加後端生病時的清漆寬限時間

我們現在有一個失敗的後端,我們想增加寬限期(雖然它生病了),這是一種可能的情況嗎?我試着在文檔中挖掘並沒有發現任何東西。

光油4

回答

1

清漆緩存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); 
     } 
    } 
} 

欲瞭解更多信息,請查詢:

+0

謝謝,但我仍然沒有得到它。情景是,我有你所說的vcl_hit,並設置寬限爲5h,後端生病了。我想增加這些5小時,讓我們說10小時左右,但它仍然生病,這是一種可能的情況? –

+1

據我所知,如果您使用寬限值爲X小時的內容將內容存儲在Varnish Cache中,則該內容將在存儲插入X小時後從存儲中刪除,並且在VCL中無法執行任何操作避免(你有''beresp.keep'',但我認爲這裏沒有用)。因此,唯一的解決方案是使用高於最長期望後端中斷的寬限值來存儲objets。 –

+0

明白了,謝謝,我非常感謝你的幫助:) –