美文网首页
Nginx POST 请求缓存的使用

Nginx POST 请求缓存的使用

作者: onmeiei | 来源:发表于2020-10-27 14:54 被阅读0次

    背景

    最近有个系统多中心上线,网络管理员监控到,微服务集群到公共数据库的跨中心网络流量飙到特别高。通过日志发现,存在大量的字典数据请求(每个用户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的旧数据。

    相关文章

      网友评论

          本文标题:Nginx POST 请求缓存的使用

          本文链接:https://www.haomeiwen.com/subject/jtkxvktx.html