《从零开始学架构》五:高性能负载均衡

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_41594698/article/details/102697878

1 高性能负载均衡:分类及架构

当单服务器的性能无法满足业务需求时,就需要设计高性能集群来提升系统整体的处理性能。

高性能集群的复杂度主要体现在任务分配,需要设计合理的任务分配策略,将计算任务分配到多台服务器上执行。

需要增加一个任务分配器,以及为任务选择一个合适的任务分配算法.

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

1.1 DNS 负载均衡

一般用来实现地理级别的均衡。

本质是 DNS 解析同一个域名可以返回不同的 IP 地址,不同地区的用户访问同一个域名可以返回此域名在相应地区的ip

优点:

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

就近访问,提升访问速度:DNS 解析时可以根据请求来源 IP,解析成距离用户最近的服务器地址,可以加快访问速度,改善性能。

缺点:

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

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

分配策略比较简单:DNS 负载均衡支持的算法少;不能区分服务器的差异(不能根据系统与服务的状态来判断负载);也无法感知后端服务器的状态。

可以使用 HTTP 协议实现一个私有的 DNS 系统,即HTTPDNS,这样的方案和通用的 DNS 优缺点正好相反。

1.2 硬件负载均衡

通过单独的硬件设备来实现负载均衡功能

优点:

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

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

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

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

缺点:

价格昂贵

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

1.3 软件负载均衡

通过负载均衡软件来实现负载均衡功能,常见的有 Nginx 和 LVS

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

优点:

简单:无论是部署还是维护都比较简单。

便宜:只要买个 Linux 服务器,装上软件即可。

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

缺点:相比硬件负载均衡

性能一般:一个 Nginx 大约能支撑 5 万并发。

功能没有硬件负载均衡那么强大。

一般不具备防火墙和防 DDoS 攻击等安全功能。

1.4 典型架构

组合的基本原则:
DNS 负载均衡用于实现地理级别的负载均衡;
硬件负载均衡用于实现集群级别的负载均衡;
软件负载均衡用于实现机器级别的负载均衡。
在这里插入图片描述
一般在大型业务场景下才会这样用,如果业务量小,也许使用Nging就够了

2 高性能负载均衡:算法

算法类型:

任务平分类:负载均衡系统将收到的任务平均分配给服务器进行处理,这里的“平均”可以是绝对数量的平均,也可以是比例或者权重上的平均。

负载均衡类:负载均衡系统根据服务器的负载来进行分配,这里的负载并不一定是通常意义上我们说的“CPU 负载”,而是系统当前的压力,可以用 CPU 负载来衡量,也可以用连接数、I/O 使用率、网卡吞吐量等来衡量系统的压力。

性能最优类:负载均衡系统根据服务器的响应时间来进行任务分配,优先将新任务分配给响应最快的服务器。

Hash 类:负载均衡系统根据任务中的某些关键信息进行 Hash 运算,将相同 Hash 值的请求分配到同一台服务器上。常见的有源地址 Hash、目标地址 Hash、session id hash、用户 ID Hash 等。

2.1 轮询

负载均衡系统收到请求后,按照顺序轮流分配到服务器上。

“简单”是轮询算法的优点,也是它的缺点

2.2 加权轮询

负载均衡系统根据服务器权重进行任务分配;
权重一般是根据硬件配置进行静态配置的,采用动态的方式计算会更加契合业务,但复杂度也会更高。

加权轮询是轮询的一种特殊形式,其主要目的就是为了解决不同服务器处理能力有差异的问题

2.3 负载最低优先

负载均衡系统将任务分配给当前负载最低的服务器

”负载“根据不同的任务类型和业务场景,可以用不同的指标来衡量,如连接数、CPU等

此算法解决了轮询算法中无法感知服务器状态的问题,由此带来的代价是复杂度要增加很多。

2.4 性能最优类

负载最低优先类算法是站在服务器的角度来进行分配的,而性能最优优先类算法则是站在客户端的角度来进行分配的,优先将任务分配给处理速度最快的服务器,通过这种方式达到最快响应客户端的目的。

通过响应时间这个外部标准来衡量服务器状态

复杂度也很高

2.5 Hash类

负载均衡系统根据任务中的某些关键信息进行 Hash 运算,将相同 Hash 值的请求分配到同一台服务器上

目的主要是为了满足特定的业务需求:源地址 Hash、ID Hash

源地址 Hash:将来源于同一个源 IP 地址的任务分配给同一个服务器进行处理,适合于存在事务、会话的业务,达到用户每次都是访问到同一台服务器的目的。

ID Hash:将某个 ID 标识的业务分配到同一个服务器中进行处理,这里的 ID 一般是临时性数据的 ID(如 session id),同样达到用户每次都是访问到同一台服务器的目的。

猜你喜欢

转载自blog.csdn.net/qq_41594698/article/details/102697878