点击上方蓝色“飞雪无情”关注我,设个星标,第一时间看文章
上一篇 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/ ,第一时间看后续精彩文章。觉得好的话,请猛击文章右下角「好看」,感谢支持。
—— 精彩推荐 ——
扫码关注
分享、点赞、在看就是最大的支持
文章评论