Reverse-Proxy

在對 Squid 的多個請求中,將單個請求發送到後端並在未命中時將其他請求排隊

  • August 29, 2016

當資源記憶體未命中時,我想通過讓 Squid 向伺服器發送單個請求來保護後端伺服器。在獲取期間,其他請求應暫停,直到單個請求返回。

標頭stale-while-revalidate幾乎可以滿足我的要求,但是當時間max-age和時間stale-while-revalidate都過去時,沒有過時的響應,並且多個請求將被發送到後端。

該指令collapsed_forwarding似乎正是我正在尋找的。但我無法讓它按預期工作,在 max-age 期限內仍然看到對後端的多個請求。我正在使用具有 40 個執行緒的 SoapUI 5.2.1 簡單負載測試對此進行測試。

我目前對 Squid (3.5.19) 的配置是預設配置,有以下更改:

#Queue incomming requests when a request is send to the backend. I.E. collapse request into a single backend request.
collapsed_forwarding on

# Squid normally listens to port 3128
http_port 3128 accel no-vhost defaultsite=localhost ignore-cc

#Backend requires basic auth
cache_peer 127.0.0.1 parent 53142 0 no-query originserver name=myAccel login=username:password

#Allow caching of files that have a ttl of 1 seconds
minimum_expiry_time 1 seconds

acl our_sites dstdomain localhost
http_access allow our_sites
cache_peer_access myAccel allow our_sites
cache_peer_access myAccel deny all

請求 URI:/rest/information/bridge/Test?isrs=AB12345

響應頭Cache-Control no-transform, max-age=2

就目前而言,反向代理似乎無法實現collapsed_rowarding 的預期效果。我已經在回复的 squid 郵件列表中問了這個問題(在發送了一些日誌之後):

折疊轉發尚不適用於記憶體重新驗證請求。工廠正在努力實施折疊的重新驗證(在某些環境中),但我不能保證具體的傳遞日期或將涵蓋您的特定環境。

查看郵件列表了解更多詳情: http: //lists.squid-cache.org/pipermail/squid-users/2016-June/011021.html

引用自:https://serverfault.com/questions/782877