Caddy实战(八)| 利用缓冲提升反向代理的性能

2021年8月15日 204点热度 0人点赞 0条评论

点击上方蓝色“飞雪无情”关注我,设个星标,第一时间看文章

上一篇 Caddy实战(七)| 反向代理中的健康检查 已经为你介绍了Caddy如果通过健康检查,来确保一个上游(后端)服务是可用的,今天呢,就为你介绍Caddy如何通过缓冲提高反向代理的性能,降低上游服务的负载。

什么是缓冲

反向代理是客户端和后端服务之间的桥梁,所以这里面就有2个链接:

  1. 客户端到Caddy代理服务的链接

  2. 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 的这部分,下面分别说明他们的作用:

  1. flush_interval : 它定了一个时间,表示Caddy应该多久把响应的缓冲数据flush到客户端。如果是 -1 ,表示立即flush,没有任何缓冲的时间。通过它Caddy可以控制相应数据分发的节奏。这里需要注意的是,如果请求内容类型 text/event-stream 或者没有指定内容长度的HTTPS协议,那么该值将自动被设置为 -1 。原理使用的是 time.AfterFunc 这个延迟执行函数。

  2. buffer_requests :如果设置,表示启用Request Body的缓冲,Caddy会把Request Body放到一个缓冲器中,然后把缓冲器中的Request Body发给上游(后端)服务。因为要缓冲,所以会影响效率,一般只有在上游服务需要立即读取Request Body(不允许有延迟)的时候才启用。

  3. buffer_responses :buffer_requests 一样,只不过它是把上游服务的响应放到缓冲器中,对提升上游服务的处理性能有很大帮助。

  4. 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/ ,第一时间看后续精彩文章。觉得好的话,请猛击文章右下角「好看」,感谢支持。

——  精彩推荐  ——

Caddy实战(七)| 反向代理中的健康检查

Caddy实战(六)| 反向代理中的负载均衡

Caddy实战(五)| 配置反向代理

Caddy实战(四)| 使用API管理Caddy

Caddy实战(三)| Caddyfile 快速入门

Caddy实战(二)| Caddy命令行参数最全教程

Caddy实战(一)| 托管你的网站,只需一行命令

扫码关注


分享、点赞、在看就是最大的支持

92580Caddy实战(八)| 利用缓冲提升反向代理的性能

这个人很懒,什么都没留下

文章评论