高性能负载均衡之分类架构

原文:高性能负载均衡之分类架构

今天跟大家分享一下关于高性能负载均衡的分类架构相关的知识。

当然了,首先要强调一点,并不是所有的项目一开始就要求高性能的。前面我也提到过。如果不是太清楚的可以参考这篇文章:架构设计之六个复杂度来源

下面进入正题,说说高性能负载均衡之分类架构。

单服务器无论如何优化,无论采用多好的硬件,总会有一个性能天花板,单服务器的性能无法满足业务需求时,就需要设计高性能集群来提升系统整体的处理性能。

高性能集群的本质很简单,通过增加更多的服务器来提升系统整体的计算能力。由于计算机本身存在一个特点:同样的输入数据和逻辑,无论在哪台服务器上执行,都应该得到相同的输出。因此高性能集群设计的复杂度主要体现在任务分配上,如何保障任务的正常分配人,如何保障用户访问时不会因为因为某种原因出现错误影响服务,这就需要设计合理的任务分配策略,将计算任务分配到多台服务器上执行。

高性能集群的复杂性主要体现在需要增加一个任务分配器,以及为任务选择一个合适的任务分配算法。

对于任务分配器,现在更流行的叫法是“负载均衡器”。但这个名称有一定的误导性,个人觉得任务分配器更形象具体。

之所以觉得叫"负载均衡器"有一定的误导性,是因为任务分配不仅仅只是考虑计算单元的负载均衡,不同的任务分配算法目标是不一样的,有的基于负载考虑,有的基于性能(吞吐量、响应时间)考虑,有的基于业务考虑。考虑“负载均衡”已经成为了事实上的标准术语,这里我也用“负载均衡”来代替“任务分配”,但请时刻记住负载均衡不只是为了计算单元的负载达到的均衡状态。

一、负载均衡分类架构

常用的负载均衡系统包括3种:DNS负载均衡、硬件负载均衡和软件负载均衡。

负载均衡的分类架构我在前面一篇文章中说过,那篇文章叫做谈谈CDN,当然了,那个着重于CDN,对于负载均衡仅仅只是一个简单讲解,今天的这篇文章从某个角度看是对前面的补充和完善。

1.DNS负载均衡

DNS是最简单也是最常见的负载均衡方式,一般用来实现地理级别的均衡。

比如,北方的用户访问北京的机房,南方的用户访问深圳的机房。

DNS负载均衡也可以叫做链路负载均衡,示意图如下:

DNS负载均衡实现简单、成本低,但也存在粒度太粗、负载均衡算法少等缺点。仔细分析一下优缺点。

其优点有:

(1)简单、成本低:负载均衡工作交给DNS服务器处理,无需自己开发或者维护负载均衡设备;

(2)就近访问,提升访问速度:DNS解析距离用户最近的服务器地址,可以加快访问速度,改善性能;

其缺点有:

(1)更新不及时:DNS缓存的时间比较长,修改DNS配置后,由于缓存的原因,还是有很多用户会继续访问修改前的IP,这样的访问会失败,达不到负载均衡的目的,并且也会影响用户正常使用业务;

(2)扩展性差:DNS负载均衡的控制权在域名商那里,无法根据业务特点针对其做更多的定制化功能和扩展特性;

(3)分配策略比较简单:

a.DNS负载均衡支持算法少;

b.不能区分服务器的差异(不能根据系统与服务的状态来判断负载);

c.也无法感知后端服务器的状态;

针对DNS负载均衡的一些缺点,对于延时和故障敏感的业务,有一些公司自己实现了HTTP-DNS的功能,即使用HTTP协议实现一个私有的DNS系统。这样的方案和通用的DNS优缺点正好相反。

2.硬件负载均衡

硬件负载均衡是通过单独的硬件设备来实现负载均衡功能,这类设备和路由器、交换机类似,可以理解为一个用于负载均衡的基础网络设备。目前业界典型的硬件负载均衡设备有两款:F5和A10。这类设备性能强劲、功能强大,但价格都不便宜,一般只有“土豪”公司才会考虑使用此类设备。普通业务量级的公司一是负担不起,而是业务量没达到,没有必要为此浪费。

硬件负载均衡,如图所示:

硬件负载均衡也有其优缺点,分析如下:

其优点:

(1)功能强大:全面支持各层级的负载均衡,支持全面的负载均衡算法,支持全局负载均衡;

(2)性能强大,对比一下,软件负载均衡支持到10万级并发已经很厉害了,硬件负载均衡可以支持100万以上的并发;

(3)稳定性高:商用硬件负载均衡,经过良好的严格测试,经过大规模使用,稳定性高;

(4)支持安全防护:硬件均衡设备除具备负载均衡功能外,还具备防火墙、防DDOS攻击等安全功能;

其缺点:

(1)价格安昂贵:最普通的一台F5就是一台“马6”,好一点的就是“Q7”;

(2)扩展能力差:硬件设备,可以根据业务进行配置,但无法进行扩展和定制;

3.软件负载均衡

软件负载均衡通过负载均衡软件来实现负载均衡功能,常见的有Nginx和LVS,其中Nginx是软件的7层负载均衡,LVS是Linux内核的4层负载均衡。4层和7层的区别就在于协议和灵活性,Nginx支持HTTP、E-mail协议;而LVS是4层负载均衡,和协议无关,几乎所有应用都可以做,例如聊天、数据库等。

软件和硬件的最主要区别就在于性能,硬件负载均衡性能远远高于软件负载均衡性能。Nginx的性能是万级,一般的Linux服务器上装一个Nginx大概能到5万/秒;LVS的性能是十万级,据说可达到80万/秒;而F5性能是百万级,从200万/秒到800万/秒都有。

关于F5相关的信息,大家通过这个链接对F5有一个大概的了解:http://www.bjdj-info.com/index.php/chandetail/chandetail/datcid/163/flag1/180.html

当然了,除了这个之外,业界也有不少对Nginx这样的高性能Web服务器进行改造以使其达到期望值。

关于软件负载均衡图,如下所示:

软件负载均衡的优缺点如下。

其优点:

(1)简单:无论是部署还是维护都比较简单;

(2)便宜:只要买个Linux服务器,装上软件即可;

(3)灵活:4层和7层负载均衡可以根据业务进行选择,也可以根据业务进行比较方便的扩展,例如可以通过Nginx的插件来实现业务的定制化功能;

其缺点(这个缺点主要是和硬件负载均衡进行对比,当然了,并不是说软件负载均衡没法用):

(1)性能一般:一个Nginx大约支撑5万并发;

(2)功能没有硬件负载均衡那么强大;

(3)一般不具备防火墙和防DDOS功能等安全功能;

二、如何在实际中运用

上述三种负载均衡的分类架构,各有自己的所长,其实可以遵循一个组合原则来使用它们。

比如,DNS负载均衡用于实现地理级别的负载均衡;硬件负载均衡可以实现集群级别的负载均衡;软件负载均衡用于实现机器级别的负载均衡。

以我公司目前来看,主要采用的还是软件负载均衡,仅仅只是靠着阿里云的那几台机器来支撑着,当然了这对于目前而言已经足够了。

其实实际中运用,还是取决于业务吧,想博客论坛这种,如果你的博客论坛做的很不错每天几十万访问量,如果不做上述的架构规划,会影响用户的使用体验,从而降低用户粘性。

如果你的项目仅仅只是一个适合某个特定领域,使用人群每天最多也就100人,个人觉得保险起见两台机器就足够的。

小结:

本文着重将负载均衡的架构分类,有示例也有图,同时也有理论方面的。之所以想到写了这个也是看了李运华先生的《从0开始学架构》。另外我觉得看这个专栏的方式,最好还是挑自己喜欢感兴趣的看,然后做点笔记顺便根据它里面的问题做个研究。我觉得这样一来可以提高自己的兴趣,二来动了脑子可以将知识转化为身体的一部分。本人还是挺信奉一句名言,“知识就是力量”。

希望这篇文章能够给读者们带来帮助,谢谢一直关注我的朋友们。

参考资料:

李运华专栏《从0开始学架构》

许令波《深入分析JavaWeb技术内幕》

说说CDN:https://www.cnblogs.com/youcong/p/9607448.html

原文地址:https://www.cnblogs.com/lonelyxmas/p/10074123.html

时间: 2024-08-01 08:37:35

高性能负载均衡之分类架构的相关文章

高性能负载均衡缓存web架构

高性能web架构,动静分离,静态缓存. 使用LVS实现4层负载均衡,使用KeepAlived实现LVS的HA和其他服务的HA,使用Nginx实现7层负载均衡,使用Squid实现caching proxy. nginx和squid作为服务,可以在前接嵌入lvs和keepalived.这是一个可嵌套的结构,只要你服务器足够,业务也有这个必要. 高性能web架构,高性能缓存,squid不仅缓存静态资源还可以缓存动态请求,nginx实现负载均衡或者web服务: 具体还需要根据业务规模特性的需要调整结构,

lvs+keepalived+nginx实现高性能负载均衡集群(转)

lvs+keepalived+nginx实现高性能负载均衡集群 一.为什么要使用负载均衡技术? 1.系统高可用性 2.  系统可扩展性 3.  负载均衡能力 LVS+keepalived能很好的实现以上的要求,LVS提供负载均衡,keepalived提供健康检查,故障转移,提高系统的可用性!采用这样的架构以后很容易对现有系统进行扩展,只要在后端添加或者减少realserver,只要更改lvs的配置文件,并能实现无缝配置变更! 二.LVS+Keepalived介绍 1.  LVS LVS是一个开源

Nginx+Tomcat搭建高性能负载均衡集群(转)

一.       工具 nginx-1.8.0 apache-tomcat-6.0.33 二.    目标 实现高性能负载均衡的Tomcat集群: 三.    步骤 1.首先下载Nginx,要下载稳定版: 2.然后解压两个Tomcat,分别命名为apache-tomcat-6.0.33-1和apache-tomcat-6.0.33-2: 3.然后修改这两个Tomcat的启动端口,分别为18080和28080,下面以修改第一台Tomcat为例,打开Tomcat的conf目录下的server.xml

【转载】Nginx+Tomcat搭建高性能负载均衡集群

最近对负载均衡比较感兴趣,研究了公司的负载均衡的配置,用的是阿里的SLB,相当于不用运维,只需要在后台进行简单的配置就能完成Tomcat的负载均衡,索性在网上找了几篇文章去尝试搭建一个集群,然而很多都是过时了或者不全,最后找到一个测试过能成功的文章. 一.       工具 nginx-1.8.0 apache-tomcat-6.0.33 二.    目标 实现高性能负载均衡的Tomcat集群: 三.    步骤 1.首先下载Nginx,要下载稳定版: 2.然后解压两个Tomcat,分别命名为a

Nginx+Tomcat搭建高性能负载均衡集群

一.       工具 nginx-1.8.0 apache-tomcat-6.0.33 二.    目标 实现高性能负载均衡的Tomcat集群: 三.    步骤 1.首先下载Nginx,要下载稳定版: 2.然后解压两个Tomcat,分别命名为apache-tomcat-6.0.33-1和apache-tomcat-6.0.33-2: 3.然后修改这两个Tomcat的启动端口,分别为18080和28080,下面以修改第一台Tomcat为例,打开Tomcat的conf目录下的server.xml

Gtid+MGR+atlas读写分离以及负载均衡高可用架构

MySQL5.7.24 Gtid+MGR+atlas读写分离以及负载均衡高可用架构 一.服务器环境介绍: 腾讯云的云主机安装360开源的mysql中间键Atlas腾讯云机器的外网ip:119.29.97.131沧州233测试物理机器的外网ip192.168.1.233(安全起见故意写成内网的ip,其实是外网ip) 二.mysqlGtid+MGR安装 参考博文地址: 三.中间键Atlas简介 (摘抄自https://github.com/Qihoo360/Atlas) Atlas 是由 Qihoo

Tomcat +redis +nginx 搭建高性能负载均衡 集群

测试工具 nginx-1.8.1 tomcat7 redis 目标: 实现高性能负载均衡的tomcat 集群 实现步骤: 1. 首先下载Nginx,要下载稳定版: 2.然后解压两个Tomcat,分别命名为tomcat7-1和tomcat7-2: 3.然后修改这两个Tomcat的启动端口,分别为180和280,下面以修改第一台Tomcat为例,打开Tomcat的conf目录下的server.xml: tomcat 中引入了redis 第二个tomcat 类似 修改端口及可 4.然后启动两个Tomc

关于高性能负载均衡架构,这些知识点大多数人不知道

单服务器无论如何优化,无论采用多好的硬件,总会有一个性能天花板,当单服务器的性能无法满足业务需求时,就需要设计高性能集群来提升系统整体的处理性能. 高性能集群的本质很简单,通过增加更多的服务器来提升系统整体的计算能力.由于计算本身存在一个特点:同样的输入数据和逻辑,无论在哪台服务器上执行,都应该得到相同的输出.因此高性能集群设计的复杂度主要体现在任务分配这部分,需要设计合理的任务分配策略,将计算任务分配到多台服务器上执行. 高性能集群的复杂性主要体现在需要增加一个任务分配器,以及为任务选择一个合

实现基于Haproxy_NAT+Keepalived负载均衡高可用架构

实验思路: 1.做这个实验首先可以想象一个场景,用户访问webserver的时候首先会经过调度器,首先需要明白的一点就是一般公司一般是在内网,客户端是通过外网访问webserver的. 2.haproxy是一个负载均衡器,Keepalived通过VRRP功能能再结合LVS负载均衡软件即可部署一个高性能的负载均衡集群系统,也就是说haproxy是解决后端realserver负载均衡的问题,keepalived是解决调度器的高可用的问题. 3.haproxy检测到后端服务器处于不健康的状态的时候会把