负载均衡的几种类型

Posted IT在线自学

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了负载均衡的几种类型相关的知识,希望对你有一定的参考价值。

 负载均衡,就是将请求分发到不同服务器上去响应,让每个服务器的负载达到均衡的状态。现在负载均衡是每个在线应用不可缺少的环节,所以我们需要了解一下负载均衡的模型和类型,当然在实际解决问题时模型会变的很复杂。本文只讨论软件方案,并不涉及硬件。文末会有一点点小干货,是我在新浪课堂上听的一点知识,关于新浪负载均衡的演进和使用。



一、负载均衡

负载均衡的目的就是让请求到达不同的服务器上。一次请求到服务器之间,有那么多环节,因此可以实现的方法有很多种,实际应用中不外乎以下几种方式。

1.HTTP重定向负载均衡

这种方案实现起来非常简单,但是需要浏览器请求两次服务器才能完成。并且重定向服务器很容易编程瓶颈,因为一次重定向返回的过程,也是一次标准HTTP请求,如果集群内有10台机器,那HTTP重定向服务器的流量将是应用服务器的10倍,如果有100台估计就要宕机了,所以伸缩性能受到了很大的限制。还有使用302响应码重定向,不利于网站的SEO。

2.DNS域名解析负载均衡

但是这种方法也有很大的缺点,DNS是多级解析,每一级都会缓存DNS记录,如果某个服务器变动了,DNS记录更新的时间将会很长,这个速度取决于域名服务商。

一般大型网站都会使用DNS域名解析,利用域名解析作为一级负载均衡手段。你可以使用 dig <域名> 的方法查看某个域名的A记录,你会发现很多网站会有多条A记录。

3.反向代理负载均衡

这种方法就是使用反向代理服务器,它一般在web服务器前面,这个位置也正好是负载均衡服务器的位置,所以大多数反向代理服务器同时也提供负载均衡的功能。

反向代理服务器转发请求是在HTTP协议层面,因此也叫应用层负载均衡,由于应用层在七层网络模型中的第七层,所以一般也称为七层负载均衡。优点就是和反向代理功服务器功能集成在一起,部署简单。缺点是反向代理服务器是所有请求和响应的中转站,其性能可能会成为瓶颈。

4.网络层负载均衡

网络层的负载均衡在内核进程完成数据转发,有更好的性能。但是由于响应请求的流量要经过负载均衡服务器,容易成为瓶颈。

5.数据链路层负载均衡

这种方式称作三角传输模式,单臂模式,也叫做直接路由方式(DR)。使用DR方式的链路层负载均衡是目前大型网站使用最广的一种负载均衡手段。

二、关于负载均衡演进

一个应用的流量从多到少,负载均衡的演进基本都是一个套路,新浪也不例外(以下内容有修改),大致打演进过程如下:

  1. nginx做反向代理的同时也做七层负载均衡。

  2. 使用四层的代理负载均衡,并使用主备,一般使用HAproxy或者LVS

  3. 使用单臂模式加七层代理集群,一般是LVS(DR模式)主备+HAproxy集群(七层负载均衡)

Nginx 做负载均衡是非常方便的,如果一个机器满足不了需求了,可以直接做一个反向代理加上负载均衡。四层的代理负载均衡比七层负载均衡性能好很多,集群规模可以迅速扩大,并且可以细分服务。当公司的规模很大的时候,有多个机房、多个大型服务时,LVS(单臂)+HAproxy(七层)就更适合了,如下图所示(网上盗了一张图):

 

最近我听了一节新浪有关负载均衡的讲座,其实是一个简短的课程。新浪的演进过程和上面三个步骤很像,没有太多的差异。目前大多数服务正在使用2和3的模式,将来需要全量SSL加密,所以新浪准备在LVS层上加一个SSL加解密集群。请求进LVS的443端口,之后被转发到SSL集群中进行解密,再回到LVS下接HAproxy的80端口,做七层负载均衡。

这样可以收紧证书,也可以将服务的入口统一,虽然在性能上可能会有很大的挑战。负载均衡未来的发展可能将会是四层代理+ospf集群模式,每一层都是代理。

三、总结

现在使用的负载均衡无外乎这几种方式,或者几种方式的组合。

我相信很多大厂能用这种模式解决高并发高性能的问题,很多其他服务也是没有问题的。

这篇文章只是负载均衡的基础知识,并没有涉及到太多的应用,LVS、HAproxy、Nginx等在使用中还有很多细节的区别,但都是以上模型。

关于这三个软件的负载均衡,如果以后使用到了会再讨论。


以上是关于负载均衡的几种类型的主要内容,如果未能解决你的问题,请参考以下文章

web实现负载均衡的几种实现方式

负载均衡的几种方式

Web负载均衡的几种实现方式

负载均衡实现的几种方式

负载均衡的几种实现技术

负载均衡的几种方式