高并发负载均衡

Posted PHP开源社区

tags:

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


最近研究了几个关于阿里研究院对于高并发的解决方案,总结一下,涨涨姿势。


企业级web项目架构图

高并发负载均衡

1、客户端通过企业防火墙发送请求

2、在App服务器如tomcat接收客户端请求前,面对高并发大数据量访问的企业架构,会通过加入负载均衡主备服务器将请求进行转发到不同web服务其中。

3、服务器通过访问数据库进行交互,同样高并发大数据会涉及到数据库处理高并发的方案

4、另外会添加多台服务器用作缓存、消息处理等

 

高并发一般会发生在1、负载均衡处 2、数据库高并发;阿里研究院也针对这两个并发情况提供了相应的解决方案。

 

高并发初期解决方案:

应对高并发,解决方案大多从服务器级别和应用程序级别【硬件和软件】两个方向进行。如增大服务器的CPU,增加内存,或者直接购买高性能服务器。

但随着业务的不断增加,服务器性能也达到瓶颈。第二个方向就是从应用程序级别也就是软件设计编码方向,html静态化、图片服务器分离、分布式缓存,减少客户端访问时并发请求的数据。

 

下面介绍3种利用负载均衡解决高并发访问的方案


一、DNS

什么是DNS?

Domain Name System,域名系统是因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网。

例如我们将程序发布到192.168.55.145 和144两台服务器上,通过DNS可以设置一个统一的访问入口,如www.Max1209.com对这两台服务器上的服务进行访问。

用户直接访问www.Max1209.com主机名而不需记住机器IP,通过主机名,最终得到该主机名进行域名解析得到对应的IP地址进行访问。


DNS如何实现负载均衡?

在DNS服务器中,可以为多个不同的IP配置同一个名字,这个数据被发送给其他名字服务器,而最终查询这个名字的客户机将在解析这个名字时随机使用其中一个地址。

因此,对于同一个名字,不同的客户机会得到不同的地址,因此不同的客户访问的也就是不同地址的Web服务器。


简单说,也就是一个外观,给部署了同一个网站的n多台服务器设置同一个名字,不同地区或者不同特点的用户访问同一个名字,实际接收客户请求的是外观里的不同ip的服务器,从而达到负载均衡的目的。

 

同时面对更高访问量需求,DNS可以以设置成树状,多个DNS服务器将请求分发给下一个DNS服务器,N层解析之后再访问到应用服务器,这样就可以增加应用服务器的个数,应对更大并发数据请求。

高并发负载均衡 

但使用DNS负载均衡的时候,如果服务器发生故障,DNS继续把请求发送给故障机器,一直到把故障服务器从DNS中移走为止,这样用户就只能等到DNS连接超时后才能访问到目标网站。


前面谈到,实现负载均衡主要可以通过软、硬件两个方面进行,例如硬件上购买RadWare等硬件设备,或者通过软件策略实现负载均衡。软件策略上使用广泛有Nginx 和LVS。

 

在介绍两款工具之前,先聊聊负载均衡的应用场景

 

普通web应用部署到多台应用服务器上,客户端通过访问应用服务器发送请求,最简单的就是n对1模式,n个客户端访问同一个应用服务器,这种情况当并发量大了,就无法应对,而且,如果只有一台服务器时,这个服务器挂了,那么对于网站来说是个灾难;解决方案便可以横向扩充n台应用服务器,并且客户端访问与应用服务器中间加上负载均衡配置,负载均衡能实现的效果主要有三个:

高并发负载均衡 

1、转发功能:按照一定的算法【权重、轮询】,将客户端请求转发到不同应用服务器上,减轻单个服务器压力,提高系统并发量。

2、故障移除:通过心跳检测的方式,判断应用服务器当前是否可以正常工作,如果服务器期宕掉,自动将请求发送到其他应用服务器。

3、恢复添加:如检测到发生故障的应用服务器恢复工作,自动将其添加到处理用户请求队伍中。


下面接着介绍实现负载均衡的两款常用方案


一、Nginx

什么是nginx

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler使用。其特点是占有内存少,并发能力强,中国大陆使用nginx网站用户有:百度、新浪、网易、腾讯等。

优点:

  • 可运行linux,并有windows 移植版

  • 在高并发情况下,Nginx 可支持高达50000个并发连接数的响应。

Nginx如何实现负载均衡?

  •  Nginx反向代理

Nginx利用自身反向代理功能,在conf配置文件中添加反向代理地址,以代理服务器的身份接受客户端发送过来的请求,然后将请求转发给内部网络上的应用服务器,并将从服务器上得到的结果返回给客户端,此时代理服务器对外就表现为一个服务器,不过它只负责转发请求,不负责处理。
  •  Nginx转发策略

Nginx转发请求可按照调度规则通过轮询、ip哈希、URL哈希、权重等多种方式对应用服务器做负载均衡,同时还支持后端服务器的健康检查,也就是上面讲的故障移除和恢复添加功能。

nginx 的 upstream目前支持的分配算法: 

  • 轮询(默认) 

每个请求按时间顺序逐一分配到不同的应用服务器,如果应用服务器down掉,能自动剔除。 

  • 权重

      通过配置权重,指定轮询几率,权重和访问比率成正比,用于应用服务器性能不均的情况。 

  • ip_哈希算法

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个应用服务器,可以解决session共享的问题。 


 

二、LVS:


什么是LVS?

Linux Virtual Server,Linux虚拟服务器,主要使用集群技术实现和Linux操作系统实现一个高性能、高可用的服务器虚拟的服务器集群系统。


LVS主要组成部分为:

服务器池(server pool/ Realserver),是一组真正执行客户请求的服务器,执行的服务一般有WEB、MAIL、FTP和DNS等。

共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。这也是LVS跟Nginx区别之处:LVS可通过共享存储结构实现多个应用服务器间的session共享。


LVS如何实现负载均衡?

LVS主要通过IP负载均衡技术VS/NAT、VS/TUN、VS/DR实现负载均衡。简单介绍第一个VS/NAT,它是一种最简单的方式,所有的RealServer只需要将自己的网关指向Director即可。客户端可以是任意操作系统,但此方式下,一个Director能够带动的RealServer比较有限。在VS/NAT的方式下,Director也可以兼为一台RealServer。


往期相关文章:



来源:
https://blog.csdn.net/daybreak1209/article/details/50964934

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

高并发负载均衡

初识千万级高并发负载均衡软件HaProxy

千万级高并发负载均衡软件HAproxy

云上负载均衡,轻松面对高并发

大数据高并发---负载均衡

大数据高并发---负载均衡