“软件化”是负载均衡发展的必然趋势
时间已经到了2022年。除了少数办公网络的场景,中国的互联网公司已经普遍使用纯软件的负载均衡解决方案。而在很多非互联网行业的企业,还在大量使用硬件负载均衡设备。关于“负载均衡是否应该软件化”这个问题,很多使用者还存在一些疑惑。本文将尝试对于这个问题给出解答。
1. 背景说明
负载均衡是数字化的重要基础设施。在诞生之初,负载均衡以硬件设备的形态存在,著名的厂商包括F5、Radware、深信服、迪普科技等。
随着互联网业务的快速发展,对于负载均衡产生了非常旺盛的需要。在数据中心内,只要服务器超过2台,就需要使用负载均衡。在中国互联网发展的早期,各互联网公司普遍购置了F5等公司提供的硬件负载均衡设备。在很多人的印象中,F5就等于负载均衡。
互联网的流量快速的增长,硬件负载均衡器的高额成本对于互联网公司来说是一个沉重的负担。1998年,章文嵩博士发起了LVS(Linux Virtual Server)项目,基于标准服务器、Linux操作系统和LVS软件,就可以提供负载均衡的功能。在2010年之前,中国的大型互联网公司已经普遍从硬件负载均衡器切换到LVS。
在2010年后,中国各大互联网公司的业务流量快速增长,LVS的功能和性能都已经无法满足需求。头部的互联网公司开始自研四层负载均衡软件。百度首先基于Tilera众核技术研发了新一代的网络负载均衡系统【1】,之后又基于Intel DPDK技术研发了BGW系统【2】。其它互联网公司也自研了类似的系统。这些系统有力的支撑了各大互联网公司的业务发展。
LVS、BGW等都是四层负载均衡软件。在七层负载均衡领域,Nginx逐步成为了各大互联网公司的标配。“在特定的场景,使用专用系统来替代通用系统”,这是互联网企业不断技术升级的一个基本方法论。“四七层分离”是以上原则和方法论在负载均衡领域在再次印证【3】。对于大部分互联网公司来说,LVS + Nginx就是负载均衡的标准和最佳实践。由于Nginx在安全性、稳定性、研发效率等方面存在的问题,百度于2014年基于Go语言研发了新一代的企业级七层负载均衡开源软件BFE【4】【5】。
时间已经到了2022年。除了少数办公网络的场景,中国的互联网公司已经普遍使用纯软件的负载均衡解决方案。而在很多非互联网行业的企业,还在大量使用硬件负载均衡设备。关于“负载均衡是否应该软件化”这个问题,很多使用者还存在一些疑惑。本文将尝试对于这个问题给出解答。
2. 负载均衡软件化的技术基础
如果想要全面替代负载均衡硬件设备,负载均衡软件必须要具有和硬件设备相同的功能和性能。
根据现有的技术水平,可以很明确的说:在负载均衡领域,硬件可以实现的功能,软件全都可以实现,而且软件的性能一点儿都不差。
负载均衡分为四层和七层。四层负载均衡,也被称为网络负载均衡,仅用于对TCP、UDP流量进行处理。四层负载均衡在转发中主要基于IP地址、端口等信息。七层负载均衡,也被称为应用负载均衡,支持HTTP、HTTPS、SSL、TLS等协议的处理。七层负载均衡在转发中可以利用应用层的信息(如HTTP的请求头部)。
对于四层负载均衡来说,百度所研发的BGW系统在DPDK技术的支持下,在单台x86服务器上可以处理50Gb/s网络流量,每秒可以处理的新建连接超过100万个。各项指标已经和一台中高端的F5负载均衡设备(购买价格> 50万元)相当。
对于四层负载均衡场景,由于处理逻辑非常简单,硬件设备所独有的FPGA、ASIC等技术都没有用武之处。
其实,F5、深信服等主流厂商都推出了和硬件产品功能类似的软件产品,如F5 VE【6】、深信服vAD【7】。这些软件可以运行在标准服务器上,功能也非常强大。但是由于各方面的考虑,并没有大力推广。
对于七层负载均衡来说,硬件设备同样没有优势。由于七层的处理逻辑非常复杂,难以利用FPGA或ASIC来进行硬件加速。在硬件设备中,七层的处理也是通过在通用CPU处理器上运行软件的方式来实现。我们可以观察到,对于一台负载均衡硬件设备,一旦使用了七层的相关功能,性能会急剧下降,这就是因为流量从专用硬件构成的“快路径”(Fast Path)改为由通用CPU构成的“慢路径”(Slow Path)来处理。而相比于普通的服务器,负载均衡设备属于专用硬件,成本要高的多。
总之,负载均衡软件在功能和性能方面,并不比硬件差。
3. 负载均衡软件化的优势
既然在功能和性能方面负载均衡软件和硬件没有差距,则和硬件设备相比,负载均衡软件具有压倒性的优势:
(1)成本降低
负载均衡软件使用标准服务器,相比专用硬件平台具有明显的成本优势。例如,在四层负载均衡场景,负载均衡软件方案的综合成本比硬件设备方案至少降低50%。
(2)升级容易
对于硬件设备来说,升级固件(Firmware)或内置软件是一个非常高危的操作,非常容易失败。在很多情况下,只能停机离线后升级。
负载均衡软件作为应用层软件,有非常成熟和通用的升级方式。而且因为使用的是标准服务器,在稳定性要求非常高的情况下,甚至可以先调拨新的服务器安装新版软件,在将流量切换到新服务器后、再将原有的服务器资源释放。这种升级方式是硬件设备难以支持的。
(3)支持快速扩缩容
硬件的采购周期很长,从启动购买到部署到位一般至少要2-3个月的时间。负载均衡软件可以按需快速部署,从需求发起到交付的时间可以控制在1天以内。
另外,现在各企业都经常基于互联网开展线上营销活动,活动流量往往和平时相比增长数倍。如果仅为活动需要而在平时储备大量负载均衡硬件设备,在经济上非常不划算。如果使用负载均衡软件,可以在活动前临时扩容,而在活动结束后及时释放资源。
(4)供应链易于管理
站在负载均衡的厂商和中间商角度,负载均衡硬件设备的供应链管理的难度和成本都是非常高的。这些困难和成本最后都会转嫁给负载均衡产品的最终使用者。
和硬件设备相比,负载均衡软件的供应链管理成本要低的多。由此而产生的收益也一定会被最终的使用者感知到。
4. 负载均衡软件化的可能疑问和解答
以上论述了负载均衡软件化的技术基础和优势。但可能仍然有读者会对负载均衡的软件化方向存在一些疑问。这里将列一些可能的问题,并尝试给出解答。
Q1:负载均衡软件不如硬件设备可靠?
稳定性和安全性是负载均衡的第一需求。很多人可能会对负载均衡软件的稳定性存在疑虑。下面对这个问题给出一些分析。
首先,对于硬件负载均衡设备来说,其中很多功能也是通过软件来实现的。硬件负载均衡中的软件并没有理由具有比独立的负载均衡软件具有更高的稳定性。
其次,负载均衡硬件设备使用专用硬件,在硬件的稳定性方面确实比普通服务器要高一些。但是,负载均衡软件往往通过使用多实例并行处理的方式来提供容错能力,这样的方法比硬件设备经常使用的主备方式还要更先进一些。
第三,在七层负载均衡软件方面,新出现的一些开源软件比现有的硬件设备中的软件还要更稳定。在“为什么BFE可以取代Nginx”【5】一文中,对七层负载均衡的生态做了对比和分析。基于Go语言或Rust语音的实现方案,比基于C语言或C++语言的方案具有更高的稳定性和安全性。而在硬件设备中,普通使用的正是C语言或C++语言的实现。
总之,“负载均衡软件不如硬件设备可靠”仅是一种感觉,经不起细致的推敲。
Q2:负载均衡软件不如硬件设备易于运维?
可运维性和可管理性是对于负载均衡的另外一个重要需求。是不是负载均衡软件在可运维性方面就更差一些呢?
软件的运维和硬件的运维确实存在一定的差异,不能简单的将负载均衡硬件设备的运维方法平移到负载均衡软件上来。而且,在运维技术的发展和进化方面,软件其实是比硬件更先进的。下面举两方面的例子来说明。
(1)在配置方面
对于传统的网络硬件设备来说,主要使用命令行方式。命令行的问题大家都很清楚:输入和输出都是文本,而不是结构化数据,想实现自动化非常困难;在执行的速度方面也很慢。
对于软件来说,已经普遍使用API接口方式。API接口调用使用结构化数据,很容易在外部编程实现自动化。API接口的执行速度也比命令行方式快的多。
(2)在状态监控方面
对于传统的网络硬件设备来说,主要使用SNMP来获取设备的状态信息。SNMP的好处是有统一的标准,缺点是能够获得的数据很有限。
对于负载均衡软件来说,可以使用软件监控的思路,对外提供更多的状态信息。比如BFE开源项目,一个程序对外提供数千个状态变量,可以非常全面的反映程序的运行情况。而且基于BFE研发的商业版软件还提供了非常详细的业务流量报表数据,可以提供分钟级的细粒度业务流量信息。这样的能力是传统负载均衡硬件设备完全无法提供的。
5. 总结
几十年来,IT技术领域日新月异,变化不断。纵观历史,无论一个技术、一种产品曾经多么流行、多么强大,如果其不符合技术发展的趋势,最终都会被淘汰,这样的故事一再上演!
在数据中心中,近些年来云计算和云原生的发展势不可挡,其本质是尽可能的使用“标准服务器+软件”的方式来取代专用硬件,从而获得成本、效率、可运维性等方面的进步。“负载均衡软件化”不过是云计算化和云原生化的一个具体表现而已。
综上所述,“软件化”是负载均衡发展的必然趋势。请各位读者辨之!
参考文献
[1] 探秘百度基于64核处理器的负载均衡系统,http://m.techweb.com.cn/article/2013-02-21/1278021.shtml
[2] 《万亿级流量转发:BFE核心技术与实现》, https://github.com/baidu/bfe-book
[3] 负载均衡为什么要“四七层分离”, BFE开源项目公众号,https://mp.weixin.qq.com/s/plJ9x7DXMAme7LsTp4FSUQ
[4] BFE开源项目,https://github.com/baidu/bfe
[5] 为什么BFE可以取代Nginx,BFE开源项目公众号,https://mp.weixin.qq.com/s/F17a068m-zgb2ffN7PaCYQ
[6] F5 Virtual Edition,https://www.f5.com/products/big-ip-services/virtual-editions
[7] vAD的部署说明,https://bbs.sangfor.com.cn/forum.php?mod=viewthread&tid=32101