对于用户数较多、负载较大的网站,我们通常都会使用负载均衡(LB:Load Balance)来增加服务器的承载能力。负载均衡是云计算的一个基本服务组件,通常都会搭配云主机来构建云服务,比如阿里云的SLB(Server Load Balancer)、腾讯云的CLB(Cloud Load Balancer)。
负载均衡可以将客户端请求分摊到多个操作单元上进行处理
负载均衡有很多种不同的实现方式,总的来说,可以分为硬件负载均衡与软件负载均衡两大类。
硬件负载均衡有很多设备商可以提供解决方案,比如NetScaler、F5、Array Networks等。硬件负载均衡的优势比较明显:有专业团队进行维护、性能好、且稳定可靠。
F5负载均衡器
但硬件负载均衡解决方案也有缺点,比如设备和服务费用昂贵,灵活性差,功能和容量都难以扩展。软件负载均衡相对来说,灵活性强,扩展起来更容易,所以软件负载均衡解决方案越来越受到青睐。
软件负载均衡最早通过DNS来实现,即一个域名对应多个IP地址。在应答DNS查询时,DNS服务器对每个查询将以DNS文件中主机记录的IP地址按顺序返回不同的解析结果,将客户端的访问引导到不同的机器上去,使得不同的客户端访问不同的服务器,从而达到负载均衡的目的。
DNS负载均衡的解决方案原理比较简单,不过缺点也比较明显:
后来出现了开源软件负载均衡的解决方案,最主流的就是LVS和Nginx。基于开源软件的负载均衡打破了硬件LB的垄断,降低了负载均衡的实施成本。
(1)LVS = Linux Virtual Server
LVS虚拟服务器,在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。
LVS是把负载均衡的功能做到了Linux内核里面。LVS集群采用IP负载均衡技术和基于内容请求分发技术,将一组服务器构成一个高性能的、高可用的虚拟服务器。
整个服务器集群的结构对客户是透明的,客户访问集群系统提供的网络服务就像访问一台高性能、高可用的服务器一样,而且无需修改客户端和服务器端的程序。
(2)Nginx
Nginx是一个轻量级的Web服务器,同时也是一个反向代理服务器,可以利用其反向代理的功能做负载均衡。Nginx与LVS相比主要有以下几点不同:
总的来说,Nginx的应用场合要更多一些,LVS则更适合节点比较多的大型系统。
除了在云主机上自己利用LVS或Nginx搭建负载均衡服务器,阿里云、腾讯云等云计算服务商,均提供了专门的负载均衡服务,配置容易。这些服务商的负载均衡解决方案,往往是结合了层7与层4的综合负载均衡方案,而且还需要考虑VPC网络与物理网络的不同情况(关于VPC的概念,可以参考之前的文章,《聊聊云计算:VPC与VPN有什么关系》)。具体实现方案比较复杂,这里就不过多介绍了,反正会用就行。
基于负载均衡实现的典型的云服务架构
上图就是一个基于负载均衡的典型的云服务架构。在我们搭建互联网应用时,可能需要考虑服务器的承载能力,或者需要保障服务器可用性,避免出现单点故障,使用负载均衡就是一个基本操作,掌握了LB,我们的服务就更加稳定了。