Nginx POST 请求缓存的使用

2020-10-27  本文已影响0人  onmeiei

背景

最近有个系统多中心上线,网络管理员监控到,微服务集群到公共数据库的跨中心网络流量飙到特别高。通过日志发现,存在大量的字典数据请求(每个用户1M的字典数据,各种字典……)。
由于字典数据的微服务没做缓存,直接把请求淦到数据库了,而微服务对公共数据库主库的访问是跨中心的,所以大量的重复的字典数据占用了宝贵的带宽(跨中心的带宽很有限,这个是基础设施规划的问题,一时半会解决不了的)。
箭已经射出去了,不可能现场改代码。所以在Nginx上临时做了proxy_cache来把脖子上的刀挪开。

操作

查看日志发现,获取字典数据的URL是POST请求,故需要做对POST请求进行缓存。

  1. 配置nginx.conf
http {
    proxy_cache_path dict_temp levels=1:2 keys_zone=dict_cache:1024m inactive=1h max_size=2g;
    # 其他配置
    # .......
}
location /dict {
    proxy_cache dict_cache;
    proxy_cache_valid 200 60s;
    proxy_cache_methods POST;
    proxy_cache_use_stale updating;
    proxy_cache_key "$request_uri|$request_body";
    proxy_ignore_headers Cache-Control Expires;

    # 其他配置
    # .........
}
  1. 热部署
sbin/nginx -s reload

效果

从300M跨中心带宽占用,降低到了10M跨中心带宽占用。

后话

最终,还需要把缓存的刷新放回到微服务应用层,最坏的情况,有大量的用户会看到60s的旧数据。

上一篇下一篇

猜你喜欢

热点阅读