分享

更多

   

DNS负载均衡&&HTTP负载均衡

2017-12-15  缕梦菲烟

DNS负载均衡

最早的负载均衡技术,利用域名解析实现负载均衡,在DNS服务器,配置多个A记录,这些A记录对应的服务器构成集群。大型网站总是部分使用DNS解析,作为第一级负载均衡。如下图:

优点

  1. 使用简单:负载均衡工作,交给DNS服务器处理,省掉了负载均衡服务器维护的麻烦
  2. 提高性能:可以支持基于地址的域名解析,解析成距离用户最近的服务器地址,可以加快访问速度,改善性能;

缺点

  1. 可用性差:DNS解析是多级解析,新增/修改DNS后,解析时间较长;解析过程中,用户访问网站将失败;
  2. 扩展性低:DNS负载均衡的控制权在域名商那里,无法对其做更多的改善和扩展;
  3. 维护性差:也不能反映服务器的当前运行状态;支持的算法少;不能区分服务器的差异(不能根据系统与服务的状态来判断负载)

 实践建议

将DNS作为第一级负载均衡,A记录对应着内部负载均衡的IP地址,通过内部负载均衡将请求分发到真实的Web服务器上。一般用于互联网公司,复杂的业务系统不合适使用。如下图:

HTTP负载均衡

Nginx是一个高性能的HTTP和反向代理服务器,

通过其本身的Upstream模块,我们可以将其作为7层负载均衡服务器使用,其支持的负载均衡策略如下:

1,轮询:将请求依次轮询发给每个服务器

2,最少链接:将请求发送给持有最少活动链接的服务器

3,IP哈希:通过哈希函数决定请求发送给哪个服务器

4,权重:服务器的权重越高,处理请求的概率越大

系统整体结构如下:

    

一. Nginx/ Haproxy比较

    早期版本Nginx只能在HTTP层负载,不支持TCP,经过1.9和1.11两个大版本的大跃进般开发,目前在功能和特性上,已经大幅超越haproxy ,当然haproxy也有自己的长处。

比如:

stream module:同时支持TCP和UDP,也支持haproxy的proxy protocol。

stream module的TLS卸载:可以把TLS在nginx卸载掉,后端只需要跑http或者明文tcp流。得益于nginx的多进程和对TLS硬件加速卡的支持,对于大流量网站这是非常重要的功能。

SNI Preread:基于SNI协议的host头做负载均衡。在一些特殊场合很有用处,比如严格管理私钥的场景,也可以在不改动现有架构的场景下,由nginx统一调度流量。

IP Transparency:对这个功能没实际测试过。看官方文档应该类似SNAT和DNAT的功能。相比Linux的NAT功能,nginx能做的更多,比如负载均衡、url路由等等。

TLS:双证书、HTTP/2、TLS v1.3(1.13版)
gnu/linux的新特性的利用:fastopen, SO_REUSEPORT, IP_BIND_ADDRESS_NO_PORT

缓存模块的切片模块

而且,nginx还有几个大杀器:map模块、lua、js和shared memory。

1)HAProxy对于后端服务器一直在做健康检测(就算请求没过来的时候也会做健康检查):
后端机器故障发生在请求还没到来的时候,haproxy会将这台故障机切掉,但如果后端机器故障发生在请求到达期间,那么前端访问会有异常。也就是说HAProxy会把请求转到后端的这台故障机上,并经过多次探测后才会把这台机器切掉,并把请求发给其他正常的后端机,这势必会造成一小段时间内前端访问失败。
2)Nginx对于后端的服务器没有一直在做健康检测:
后端机器发生故障,在请求过来的时候,分发还是会正常进行分发,只是请求不到数据的时候,它会再转向好的后端机器进行请求,直到请求正常为止。也就是说Nginx请求转到后端一台不成功的机器的话,还会再转向另外一台服务器,这对前端访问没有什么影响。
3)因此,如果有用HAProxy做为前端负载均衡的话 ,如果后端服务器要维护,在高并发的情况,肯定是会影响用户的。但如果是Nginx做为前端负载均衡的话,只要并发撑得住,后端切掉几台不会影响到用户。


一. Nginx / LVS 转发策略

LVS采用的是同步请求转发的策略。同步转发是在lvs服务器接收到请求之后,立即redirect到一个后端服务器,由客户端直接和后端服务器建立连接。

Nginx采用的是同步请求转发的策略。异步转发是nginx在保持客户端连接的同时,发起一个相同内容的新请求到后端,等后端返回结果后,由nginx返回给客户端。

在其它的均衡器(lvs/haproxy/apache等)里,每个请求都是只有一次机会的,假如用 户发起一个请求,结果该请求到达后台服务器后,后台服务器刚好挂掉了,那么这个请求就失败了;而nginx因为是异步的,所以这个请求可以重新发往下一个后台,下一个 后台返回了正常的数据,于是这个请求就能成功了。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。如发现有害或侵权内容,请点击这里 或 拨打24小时举报电话:4000070609 与我们联系。

    猜你喜欢

    0条评论

    发表

    类似文章
    喜欢该文的人也喜欢 更多