当单个服务器的性能无法满足业务需求时,设计高性能集群是提升系统整体处理性能的解决方案。高性能集群的核心思想是增加更多服务器以提升整体计算能力。由于相同的输入数据和逻辑在任何服务器上执行都应该得到相同的输出,因此集群设计的复杂性主要在于任务分配。任务分配需要设计合理的策略,将计算任务分配到多台服务器上执行。
集群设计的复杂性主要体现在需要引入一个任务分配器,也称为负载均衡器。然而,负载均衡器这个术语有一定误导性,可能让人误以为任务分配的目标是保持各个计算单元的负载均衡。实际上,任务分配不仅仅考虑计算单元的负载均衡,不同的任务分配算法还考虑性能、吞吐量、响应时间和业务需求等因素。尽管“负载均衡”已成为标准术语,但请务必明白,负载均衡不仅仅是为了实现计算单元的负载均衡状态。
负载均衡分类
常见的负载均衡系统包括 3 种:DNS 负载均衡、硬件负载均衡和软件负载均衡。
DNS 负载均衡
DNS 是最简单也是最常见的负载均衡方式,一般用来实现地理级别的均衡。例如,北方的用户访问北京的机房,南方的用户访问深圳的机房。DNS 负载均衡的本质是 DNS 解析同一个域名可以返回不同的 IP 地址。例如,同样是 www.baidu.com,北方用户解析后获取的地址是 61.135.165.224(这是北京机房的 IP),南方用户解析后获取的地址是 14.215.177.38(这是深圳机房的 IP)。
下面是 DNS 负载均衡的简单示意图:
DNS 负载均衡的优点在于其简单、成本低,并能实现就近访问,从而提升了访问速度和性能。然而,它也存在一些缺点:
-
更新不及时:DNS 缓存的时间较长,修改 DNS 配置后,部分用户仍然会继续访问旧的 IP 地址,导致访问失败,影响了负载均衡的效果,也影响了用户的正常使用。
-
扩展性差:DNS 负载均衡的控制权在域名服务商手中,无法根据业务特点进行个性化定制或扩展功能。
-
算法简单:DNS 负载均衡支持的算法较少,无法区分服务器之间的性能差异,也无法感知后端服务器的状态。
针对 DNS 负载均衡的这些缺点,一些公司为了解决时延和故障敏感的业务需求,实现了 HTTP-DNS 功能,即使用 HTTP 协议搭建私有的 DNS 系统。相较于通用的 DNS 方案,HTTP-DNS 的优缺点正好相反。
硬件负载均衡
硬件负载均衡是通过独立的硬件设备来实现负载均衡功能,类似于路由器和交换机,可视为专门用于负载均衡的网络设备。目前市场上主要有两种典型的硬件负载均衡设备:F5 和 A10。这类设备性能强劲、功能强大,但价格昂贵,通常只有大型企业才会考虑使用。
硬件负载均衡的优点包括:
功能强大:支持各层级的负载均衡,包括全面的负载均衡算法和全局负载均衡。
性能强劲:相较于软件负载均衡,硬件设备的并发处理能力更强,可以支持更高的并发连接数。
稳定性高:商用硬件负载均衡设备经过严格测试和大规模使用验证,稳定性较高。
支持安全防护:硬件负载均衡设备通常还集成了防火墙、防DDoS攻击等安全功能,能够提供全面的安全保护。
然而,硬件负载均衡也存在一些缺点:
价格昂贵:硬件设备的价格较高,普通中小型企业可能难以承担。
扩展能力有限:硬件设备的扩展能力有限,难以根据业务需求进行灵活定制和扩展。
相比之下,软件负载均衡通过负载均衡软件来实现功能,常见的有Nginx和LVS。软件负载均衡相对于硬件负载均衡的主要优势在于成本较低,但其性能通常不及硬件设备。
总的来说,硬件负载均衡适用于大型企业和对性能要求较高的场景,而软件负载均衡则更适合中小型企业和对成本较为敏感的场景。
软件负载均衡
软件负载均衡是通过负载均衡软件来实现负载均衡功能,常见的有Nginx和LVS。其中,Nginx是软件的7层负载均衡,而LVS则是Linux内核的4层负载均衡。4层和7层的区别在于协议和灵活性方面。Nginx支持HTTP、E-mail等协议,而LVS是4层负载均衡,和具体的协议无关,几乎可以应用于所有类型的应用,例如聊天、数据库等。
软件和硬件负载均衡的最主要区别在于性能。硬件负载均衡的性能通常远远高于软件负载均衡。例如,Nginx的性能约为万级,一般的Linux服务器上安装一个Nginx大概能达到5万次/秒;LVS的性能则达到十万级,据说可达到80万次/秒;而F5的性能则是百万级,从200万次/秒到800万次/秒不等(数据来源网络,仅供参考,实际性能需根据业务场景进行测试)。当然,软件负载均衡的最大优势在于成本较低。一台普通的Linux服务器的批发价大概在1万元左右,相比F5的价格,这就好比自行车和宝马的差别了。
除了使用开源系统进行负载均衡外,如果业务比较特殊,还可以基于开源系统进行定制(例如,Nginx插件),甚至进行自研。
下面是 Nginx 的负载均衡架构示意图:
软件负载均衡具有以下优点:
- 简易性:无论是部署还是维护,都相对简单轻松。
- 成本低廉:只需购买一台Linux服务器,安装相应的软件即可实现负载均衡功能。
- 灵活性:可以根据业务需求选择4层或7层负载均衡,同时能够方便地进行扩展和定制,例如通过Nginx插件实现定制化功能。
虽然软件负载均衡具有以上优点,但相比硬件负载均衡,其存在一些不足之处:
- 性能一般:通常一个Nginx服务器大约只能支持5万并发连接。
- 功能相对较弱:功能方面不及硬件负载均衡强大。
- 缺乏安全功能:一般不具备像硬件负载均衡那样的防火墙和防DDoS攻击等安全功能。
负载均衡典型架构
前面我们介绍了 3 种常见的负载均衡机制:DNS 负载均衡、硬件负载均衡、软件负载均衡,每种方式都有一些优缺点,但并不意味着在实际应用中只能基于它们的优缺点进行非此即彼的选择,反而是基于它们的优缺点进行组合使用。具体来说,组合的基本原则为:DNS 负载均衡用于实现地理级别的负载均衡;硬件负载均衡用于实现集群级别的负载均衡;软件负载均衡用于实现机器级别的负载均衡。
我以一个假想的实例来说明一下这种组合方式,如下图所示。
整个系统的负载均衡分为三个层次:
地理级别负载均衡:网站 www.xxx.com 部署在北京、广州和上海三个不同的机房。当用户发起访问请求时,DNS服务根据用户的地理位置决定返回哪个机房的IP地址。例如,在图中,DNS返回了广州机房的IP地址,因此用户将被导向访问广州机房。
集群级别负载均衡:广州机房采用了F5设备进行负载均衡。F5设备收到用户请求后,进行集群级别的负载均衡,将用户请求分发给广州机房内的三个本地集群中的一个。举例来说,假设F5将用户请求发送给了“广州集群2”。
机器级别负载均衡:广州集群2内部采用Nginx进行负载均衡。Nginx接收到用户请求后,将其转发给集群内的某台服务器。这些服务器负责处理用户的业务请求并返回相应的业务响应。
需要注意的是,以上架构示例仅供参考,并非所有业务场景都需要如此严格的负载均衡层次。对于规模较小的业务,如大学论坛等,可能并不需要DNS负载均衡或F5设备,仅使用Nginx作为简单的负载均衡即可满足需求
原创文章,作者:速盾高防cdn,如若转载,请注明出处:https://www.sudun.com/ask/35489.html