云上应用技术架构 - 负载均衡
链接:https://github.com/svc-design/ebooks/
负载均衡
负载均衡是网络基础设施的关键组件,它的主要功能是将网络流量平均分配到多个服务器,以提高响应速度,增加冗余和可靠性,同时防止单点故障。在公有云环境中,只有高性能和可靠的基础网络才能提供媲美 IDC 网络的 F5 等负载均衡。
传统的负载均衡技术
基础负载均衡,例如 Linux Virtual Server(LVS),主要通过 IP 地址和端口号来分发流量。
应用层负载均衡,例如 Nginx 和 HAProxy,不仅可以通过 IP 地址和端口号来分发流量,还可以根据 HTTP/HTTPS 的 URL、HTTP 头部、Cookie 等应用层信息来分发流量。
在这其中,F5 负载均衡器是一种常见的硬件负载均衡器,以其高性能,高可靠性和丰富的功能而闻名。F5 提供了一系列产品,包括 Local Traffic Manager (LTM)、Global Traffic Manager (GTM)、Application Security Manager (ASM)等,满足了从本地到全球范围内的负载均衡需求。
云原生时代的负载均衡技术
然而,在云原生时代,随着容器化和微服务架构的普及,传统的基础和应用层负载均衡解决方案不能无法满足容器化应用的需求。这就需要新的负载均衡控制器来解决这些问题。
Ingress 控制器:Ingress Controllers 是 Kubernetes 中用于管理外部访问集群内部服务的 API 对象。Ingress Controller 如 Nginx Ingress Controller、Traefik 等,可以根据 Ingress 资源的规则动态地更新负载均衡器或反向代理的配置。
API Gateway 控制器:API Gateway 是处理 API 调用的服务器,它充当了微服务和应用程序用户之间的接口。它可以提供诸如请求路由、负载均衡、身份验证、授权、健康检查、断路器、限流等功能。在云原生环境中,API Gateway 通常以 Kubernetes Ingress Controller 的形式存在,如 Kong、Ambassador 等。
还有一些新兴的负载均衡技术,如服务网格(Service Mesh)和 XDP/EBPF。服务网格是一种用于处理服务间通信的基础设施层,它使得这些通信变得可见、可管理和可控。而 XDP(Express Data Path)/EBPF(Extended Berkeley Packet Filter)则是 Linux 内核中的新技术,可以用于实现高性能的数据包处理。这些新兴技术为云原生环境下的负载均衡带来了更多可能性。
常见负载均衡技术对比
以下是对 LVS、Nginx、服务网格、XDP/EBPF 进行的简单比较和总结。具体选择哪种技术取决于你的特定需求和环境
常见负载均衡与相关云服务对比
相关文档参考链接
硬件和网络技术:
高带宽交换机:https://www.cisco.com/c/en/us/products/switches/what-is-a-network-switch.html
F5:https://www.f5.com/services/resources/glossary/load-balancer
等价多路径(ECMP):https://en.wikipedia.org/wiki/Equal-cost_multi-path_routing
RDMA over Converged Ethernet (RoCE):https://www.roceinitiative.org/roce-technology/
Open vSwitch (OVS):https://www.openvswitch.org/
SDN(Software Defined Networking):https://www.sdxcentral.com/networking/sdn/definitions/software-defined-networking-sdn-definition/
NFV(Network Functions Virtualization):https://www.sdxcentral.com/networking/nfv/definitions/nfv-network-functions-virtualization/
多租户隔离技术:
云厂商自研硬件:
AWS Nitro:https://aws.amazon.com/ec2/nitro/
Google Andromeda 虚拟网络堆栈:https://cloud.google.com/blog/products/networking/andromeda-22-ga-enabling-faster-simpler-and-more-reliable-cloud-networking
Azure SmartNIC:https://azure.microsoft.com/en-us/blog/smartnics-in-the-public-cloud/
阿里云 X-Dragon:https://www.alibabacloud.com/blog/alibaba-cloud-launches-x-dragon-to-ramp-up-rds-performance_594738
腾讯云 FPGA 自研智能网卡:https://www.xilinx.com/solutions/data-center/data-center-acceleration/smart-nic.html
开源软件技术:
Linux Virtual Server (LVS): http://www.linuxvirtualserver.org
Nginx: https://nginx.org/
HAProxy: https://www.haproxy.org/
Istio (服务网格): https://istio.io/
Cilium (基于 eBPF 的服务网格和网络策略): https://cilium.io 以下是一些使用 Go 和 C++编写的微服务负载均衡和代理软件,以及关于 XDP 的相关链接:
Traefik: Traefik 是一个开源的反向代理和负载均衡器,特别适合微服务架构。https://traefik.io/
Fabio: Fabio 是一个由 Go 编写的快速、现代、零配置的 HTTP 路由器,适用于部署在 Consul 上的微服务。https://github.com/fabiolb/fabio
Envoy: Envoy 是一个开源的边缘和服务代理,设计用于云原生应用 https://www.envoyproxy.io/
XDP/EBPF:https://ebpf.io/what-is-ebpf/
XDP 介绍:XDP 是 Linux 内核网络栈的一部分,提供了在数据包到达内核栈之前进行处理的能力,它可以极大地提高网络性能。https://cilium.io/blog/2018/04/17/why-is-the-kernel-community-replacing-iptables/
使用 XDP 进行网络编程:这是一篇关于如何使用 XDP 进行网络编程的教程。https://developers.redhat.com/blog/2018/12/14/write-and-run-your-first-xdp-program-today/
云服务商负载均衡服务:
AWS Elastic Load Balancer: https://aws.amazon.com/elasticloadbalancing/
Google Cloud Load Balancing: https://cloud.google.com/load-balancing
Microsoft Azure Load Balancer: https://azure.microsoft.com/en-us/services/load-balancer/
阿里云负载均衡: https://www.aliyun.com/product/slb
版权声明: 本文为 InfoQ 作者【深蓝】的原创文章。
原文链接:【http://xie.infoq.cn/article/58a3448f3f24079eb07defe57】。
本文遵守【CC BY-NC】协议,转载请保留原文出处及本版权声明。
评论