阿小信大人的头像
Where there is a Python, there is a way. 阿小信大人

Nginx load-balancing methods笔记2015-12-25 15:48

原文链接:https://www.nginx.com/blog/scaling-web-applications-nginx-part-load-balancing/

load-balancing和caching的好处

  • 分发请求负载,提高请求处理效率,减少请求失败
  • 用多台服务器处理请求,单个服务器不会被打爆,用户的请求URL都是一样的
  • Nginx的caching可以分担web server加载静态文件的压力,会让已经缓存了这些资源的服务器去加载

load-balancing的五种方法

  1. Round Robin

默认的load balancing方法。

upstream myapp {
    server webserver1.example.com;
    server webserver2.example.com;
    server webserver3.example.com;
}

在请求过来时,按顺序分发请求,第一次来的server1上,第二次打到server2上,第三次打到server3上,第四次又回到server1上,1-2-3,1-2-3, ... 的这样循环

Round Robin也可以加权重,

upstream myapp {
    server webserver1.example.com weight = 2;
    server webserver2.example.com weight = 1;
    server webserver3.example.com weight = 1;
}

这样配置后,请求会这样打:1-1-2-3,1-1-2-3, ...

  1. Least Connected

这种方法是每次来的请求都会打到当前连接数最少的upstream里的web server上, 比如有3台server,1,2都有10个连接,3只有1个连接,如果在接下来的9个请求1和2的10个连接都没有断开,那么这9个请求都会被打到3上

  1. IP Hash

IP Hash会将IP地址的前3个8位元相同的请求打到同一台机器上,来简单的保持回话。 这种方法有个弊端是有些内网统一出口ip都会被打到同一台机器,不能有效的实现load-balancing。

  1. Generic Hash

Generic Hash可以自定义请求的分发,可以根据IP地址和查询变量或者URL或者其他参数, 当这些参数都和上次一样时就会将请求打到上次的那台机器

  1. Least Time

Least Time只能在Nginx Plus中用,和Least Connected类似,会将请求打到连接数最少并且响应速度最快(响应时间最短)的机器上。 同时,它也可以像Round Robin一样使用权重

如何选择该用哪种load-balancing方法

Round Robin适用于所有的server配置和位置(同一个机房?)都一样,所有的请求都是短暂的请求

Least Connected适用于所有的server配置和位置都一样,请求处理时间长度会变的会话

IP Hash适用于需要简单的会话保持(根据客户IP地址的前3个八位元决定被用的服务器)

Generic Hash适用于需要简单的会话保持(基于参数组合的哈希决定被用的服务器)

Least Time适用于servers在不同的位置且拥有不同的配置,请求会话长度是可变的,可用于健康检查

关于load-balancing需要了解的

  • load-balancing会丢掉空的headers和带下划线的headers,underscores_in_headers配置指令可以允许接收带下划线的headers
  • load-balancing会重写Host header,用来标记该请求是经过load-balancing来的
  • hash方法因为会话保持,他的结果会在整个会话生命周期存在。

如果您觉得从我的分享中得到了帮助,并且希望我的博客持续发展下去,请点击支付宝捐赠,谢谢!

若非特别声明,文章均为阿小信的个人笔记,转载请注明出处。文章如有侵权内容,请联系我,我会及时删除。

#Linux/Mac#   #nginx
分享到:
阅读[884] 评论[0]

你可能也感兴趣的文章推荐

本文最近访客

发表评论