Nginx服务之代理和负载

纸上得来终觉浅,绝知此事要躬行。

Nginx服务之代理和负载

0. 性能分析

用于反向代理,HAProxy是支持最全面,成本最低的方案。

0.1 缺点分析

Nginx 社区版的缺点(反向代理和负载均衡功能上)

  • Session 会话持久保持
    • Nginx官方给出的解决方案是使用ip_hash调度算法,根据访问客户端的源IP地址进行请求分发调度到后端服务器的。表面上看起来没有什么问题,但是实际应用起来就会发现几乎不可行。
    • 比如为学校做一个选课系统,服务器放在服务网段,学生在普通网段,两个网段互通全靠NAT,Nginx收到的IP全都是同一个源IP,那么这个负载均衡没有就没有生效。
  • 后端服务器的健康监测
    • Nginx官方给出的解决方案是被动监测的方式。
    • 如下例所示,意思就是如果 9191 这个端口某次连接超时或者失败次数超过了 max_fails 次,就会被判定为服务不可用,然后等待 fail_timeout 这么长时间之后自动认为其可用,不管到底真的修复了没有。然后再次重试 max_fails 次。
    • 这还不算最坑爹的,更麻烦的是在 Nginx 上你无法查看各个后端节点的状态,不知道哪台宕机了或者卡了不好用了。如果你后端有一百台被负载均衡的服务器,光检查可用性这一点 Nginx 社区版就完败。