美文网首页
nginx高并发低时延特点如何体现在代理模块上

nginx高并发低时延特点如何体现在代理模块上

作者: 小心我的code | 来源:发表于2021-11-26 09:50 被阅读0次

    本文背景:

    xxx系统投产前夕,由于代码中富文本内容都存到了数据库中,在查询资讯信息详情的时候加载需要几秒钟-十几秒的时间(根据返回体的大小不同而不同),所以计划先缩减咨询的图片大小,然后我们立即修改图片存储的方式(图片上传到文件服务器,db只存路径)。但是在做生产网络巡查以及流程验证时发现,《资讯详情》偶现网络异常的错误。

    1. 表现层错误:


      image.png

    2.服务端错误:


    image.png

    3.看到这里从网上了解到服务端错误并不是代码问题,于是查了nginx日志。

    [crit] 225644#0: *50493152 open() “/data/nginx/nginx/temp/proxy_temp/4/24/0000000244” 
    failed (13: Permission denied) while reading upstream, client: xxx.xxx.xxx.xx, 
    server: localhost, request: “GET /api/wx/health/info/3 HTTP/1.1”, 
    upstream: “http://ip:9000/wx/health/info/3”, host: “域名”, referrer: “域名/nc-WeChatAccount/"
    
    image.png

    看到这些错有点疑惑nginx为啥报权限不足的错误,百度搜索之后发现是nginx的机制导致的。

    百度查询的错误原因:

    当前用户是nginx,proxy_temp文件属主是nobody。
    注意: 此文件有个坑: 若nginx服务启动用户是nginx,而执行nginx -t 操作时用的是root用户,就会强行改变proxy_temp临时目录的权限(会变成nobody),注意注意!!!!
    难怪汇报permission denied。

    此时修改的文件夹的属主之后当前问题解决,但是疑惑加深了,为什么网络异常是偶现

    看到这里那么恭喜你了,经过架构师的帮助,究其原因还是nginx的机制导致。

    nginx的特点如何体现在代理服务器上

    先说一下nginx的特点:

    • 静态代理
    • 负载均衡
    • 限流
    • 黑白名单
    • ...
      此处我们重点关注代理的机制
      其实就是生产者消费者模式
      image.png
      响应结果时:client可以看做消费者,backend server可以看做是生产者,此时就存在2种可能。
    • 消费者速度 > 生产者
    • 生产者速度 > 消费者 (重点)
      nginx为了解决消费者速度慢导致的nginx与服务端的链接问题,使用了buffer来解决这一问题。下图完整表达了nginx此时的处理逻辑。也就是用buffer解决生产者速度快,消费者速度慢的问题。但是buffer毕竟空间少,当buffer满了的时候,nginx会将服务端的响应存到硬盘,所以就出现了前文的permission denied。下文详细资料参考博文:https://www.digitalocean.com/community/tutorials/understanding-nginx-http-proxying-load-balancing-buffering-and-caching
    image.png

    以上。

    相关文章

      网友评论

          本文标题:nginx高并发低时延特点如何体现在代理模块上

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