现代七层负载均衡和代理
Jun 19, 2023 23:30 · 1851 words · 4 minute read
原文:https://blog.envoyproxy.io/introduction-to-modern-network-load-balancing-and-proxying-a57f6ff80236
七层负载均衡的现状
过去几年七层负载均衡器/代理的开发逐渐回暖,这与分布式系统中持续推动微服务架构非常吻合。此外,自动扩展、容器调度的兴起意味着,在静态文件中配置静态 IP 的日子一去不复返了系统不仅在更多地利用网络,而且变得越来越动态化,需要负载均衡器提供新功能。
协议支持
现代的七层负载均衡器显式支持许多不同协议。负载均衡器对应用程序流量的了解越多,它在可观察性输出、高级负载均衡和路由方面就可以做的越复杂。例如,Envoy 明确支持 HTTP/1、HTTP2、gRPC、Redis、MongoDB、MySQL 和 DynamoDB 的七层协议解析和路由。
动态配置
如上所述,分布式系统逐渐动态化,Istio 就是如此。
高级负载均衡
现在七层负载均衡器通常内置了高级负载均衡功能,例如超时重试、限速、断路器、缓冲区、基于内容的路由等等。
可观测性
越来越动态的系统变得愈加难以调试。健壮的特定协议的可观察输出也许是现代七层负载均衡器提供的最重要的功能。输出统计、分布式追踪和可自定义日志记录现在是任何七层负载均衡方案必须得。
可扩展性
用户通常希望更容易地扩展七层负载均衡器以添加自定义功能。这可以通过编写插件并将其加载到负载均衡器中实现。许多负载均衡器还支持脚本,通常是 Lua。
容错
通常,我们将七层负载均衡器视为可扩展且无状态的,使用通用软件可以轻松水平扩展七层负载均衡器。此外,七层负载均衡器处理和状态追踪比四层复杂得多。尝试构建主备七层负载均衡器在技术上是有可能的,但工作量巨大。
总之,在四层和七层负载均衡器领域,行业正在从高可用对转向通过一致性哈希收敛的水平可扩展系统。
全局负载均衡和集中式控制平面
未来的负载均衡将把单个负载均衡器视为商业设备。在我看来,真正的创新和商业机会都在控制平面中。图 13 展示了一个全局负载均衡系统:
- 每个边车代理与三个不同区域内的后端通信
- 如图所示,90% 的流量被发送到 C 区,A 和 B 两个区域都只承载 5%
- 边车代理和后端都向负载均衡器周期性地上报状态,这使得负载均衡器能够综合考虑延迟、成本、负载、当前故障等因素做出决策
- 全局负载均衡器定期为每个边车代理配置当前的路由信息
全局负载均衡器将能够执行单个负载均衡器无法做到的复杂任务:
- 自动探测并绕开区域性故障
- 应用全局安全和路由策略
- 使用机器学习和神经网络检测和缓解流量异常,包括 DDoS 攻击
- 提供集中式的用户界面和可视化工具,帮助工程师了解并正确操作整个分布式系统
要实现全局负载均衡,作为数据平面的负载均衡器必须具备复杂的动态配置能力。有关该主题的更多信息请阅读 Envoy 的通用数据平面 API 和 服务网格数据平面 vs. 控制平面。
从硬件到软件的演变
到目前为止,本文只是简单提到了硬件与软件的区别,主要在四层负载均衡器中。那么在这个领域里有哪些行业趋势呢?
- 从前,路由器和负载均衡器一直都是非常昂贵的专用硬件。
- 越来越多的专用三层/四层网络设备正在被普通服务器硬件、网卡和基于 IPVS、DPDK、fd.io 等框架构建的软件解决方案所取代。使用 Linux 和 DPDK 编写的自定义用户空间应用程序,成本不到 5000$ 的现代数据中心服务器可以轻松喂饱 80Gbps 的网卡。同时,便宜的路由器/交换机也可在惊人的聚合带宽和 PPS 下执行 ECMP 路由,打包作为商业路由器使用。
- 像 NGINX、HAPROXY 和 Envoy 这样的高级七层软件负载均衡器也在快速迭代,并吞食以前 F5 等厂商的领域。因此,七层负载均衡器也在向软件解决方案发展。
- 同时,整个行业朝着 IaaS、CaaS 和 FaaS 的方向发展,由主要的云商推动,意味着越来越少的工程师需要了解物理网络的原理。
总结和负载均衡器的未来
- 负载均衡器在现代分布式系统中是关键组件
- 两种类型负载均衡器:四层和七层
- 四层负载均衡器正在向水平可扩展的分布式一致性哈希解决方案发展
- 由于动态微服务架构的普及,七层负载均衡器最近被大量研究
- 全局负载均衡和控制面数据面分离是负载均衡的未来,也是大部分创新和商机所在
- 行业正在向基于开源软硬件的网络解决方案发展。我相信像 F5 这样的传统负载均衡厂商会被开源软件和云商取代。像 Arista/Cumulus 等传统路由器/交换机厂商最终也将被公有云商和其自主研发的物理网络所替代。
总的来说,这是计算机网络领域一个非常有趣的时期!拥抱开源软件和使用软件解决方案的转变正在加速。此外,随着分布式系统通过 serverless 模式不断提升动态性,底层网络和负载均衡系统的复杂性也在相应增长。