Caddy 實戰(八)- 利用緩衝提升反向代理的性能
上一篇 Caddy 實戰(七)| 反向代理中的健康檢查 已經爲你介紹了 Caddy 如果通過健康檢查,來確保一個上游(後端)服務是可用的,今天呢,就爲你介紹 Caddy 如何通過緩衝提高反向代理的性能,降低上游服務的負載。
什麼是緩衝
反向代理是客戶端和後端服務之間的橋樑,所以這裏面就有 2 個鏈接:
-
客戶端到 Caddy 代理服務的鏈接
-
Caddy 代理服務到上游(後端)服務的鏈接
假如沒有緩衝,Caddy 會把後端服務的數據直接傳輸到客戶端,如果客戶端到 Caddy 的速度比較慢,後端服務就會一直被這個客戶端佔用;如果有多個客戶端這樣,那麼後端服務的負載就會比較大,處理客戶端的響應就會比較慢,甚至出現無響應超時的情況。
而 Caddy 的反向代理中的緩衝就是解決這個問題的,通過它可以提升效率。
Caddy 的緩衝配置
在 Caddy 中,反向代理的緩衝配置只有 4 個,配置格式如下所示:
reverse_proxy [<matcher>] [<upstreams...>] {
# backends
to <upstreams...>
...
# streaming
flush_interval <duration>
buffer_requests
buffer_responses
max_buffer_size <size>
}
也就是 streaming
的這部分,下面分別說明他們的作用:
-
flush_interval
: 它定了一個時間,表示 Caddy 應該多久把響應的緩衝數據 flush 到客戶端。如果是-1
,表示立即 flush,沒有任何緩衝的時間。通過它 Caddy 可以控制相應數據分發的節奏。這裏需要注意的是,如果請求內容類型text/event-stream
或者沒有指定內容長度的 HTTPS 協議,那麼該值將自動被設置爲-1
。原理使用的是time.AfterFunc
這個延遲執行函數。 -
buffer_requests
:如果設置,表示啓用 Request Body 的緩衝,Caddy 會把 Request Body 放到一個緩衝器中,然後把緩衝器中的 Request Body 發給上游(後端)服務。因爲要緩衝,所以會影響效率,一般只有在上游服務需要立即讀取 Request Body(不允許有延遲)的時候才啓用。 -
buffer_responses
:和buffer_requests
一樣,只不過它是把上游服務的響應放到緩衝器中,它對提升上游服務的處理性能有很大幫助。 -
max_buffer_size
:爲以上兩個啓用的緩衝器設置的最大大小,也就是最大緩衝器中只能存放這麼多數據。
示例演示
只看配置可能會有點枯燥,現在我們通過一些配置示例,來看下他們的用法。
reverse_proxy /api/* node1:80 node2:80 node3:80 {
flush_interval 1s
buffer_responses
max_buffer_size 4k
}
以上配置表示啓用了上游服務的響應緩衝,並且設置緩衝器的大小爲 4kb。 flush_interval
設置爲 1s
表示每隔 1s
向客戶端 flush 一次上游服務的響應。
注意這裏的buffer_responses
是沒有值的,它是一個 bool
類型的設置,只要有buffer_responses
這個設置,就表示爲 true
,buffer_requests
也一樣。
小結
Caddy 作爲一個 Web 服務器,的確功能強大,這篇主要是控制數據庫的傳輸和緩衝,下一篇,將爲你介紹,在反向代理中,Caddy 如何控制客戶端以及上游服務的頭信息。
本文爲原創文章,轉載註明出處, 歡迎掃碼關注公衆號
flysnow_org
或者網站 asf http://www.flysnow.org/ ,第一時間看後續精彩文章。覺得好的話,請猛擊文章右下角「好看」,感謝支持。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/SKGrPCp239dcQi1rGKPZWQ