负载均衡

在分布式系统中正确使用负载均衡会带来如下好处:
  • 命名抽象:客户端可以通过预定义的机制来寻址负载均衡器,而不是每个客户端都需要了解每个后端(服务发现),然后将名称解析的任务委托给负载均衡器。预定义的机制包括内置库和众所周知的DNS/IP/端口地址,后面会有详细的讨论。
  • 容错:通过健康检查和各种算法技术,负载均衡器的路由方法可以绕过坏的或者超负载的后端。这也意味着运维人员可以随时优先修复后端错误。
  • 低成本和高性能:分布式系统网络一致性比较差。系统可能会横跨不同的网络区域。在一个区域内,网络之间通常以相对小的带宽建立的。而在不同的区域之间,网络大带宽成为常态(带宽的大小是指通过NIC使用的带宽量占路由器之间可用带宽的百分比)。智能的负载均衡可以尽可能保持区域内的请求流量,从而提高性能(低延迟)并降低整体系统成本(减少区域间的带宽和光纤)。

业界讨论负载均衡时,解决方式往往分为两类:L4 和 L7。指的是OSI模型的第四层和第七层

L4负载平衡器并不知道通信中的任何应用细节。
L7负载平衡由于能够检查应用流量,而产生大量好处

负载均衡器功能:
  • 服务发现
    静态配置文件
  • DNS
  • Zookeeper,Etcd,Consul 等
  • Envoy的通用数据平面API
    健康检查
    主动式:负载平衡器将定期发送ping(例如,对/healthcheck端点的HTTP请求)到后端,并用它来衡量健康状况
  • 被动式:负载均衡器从主数据流中检测健康状况。例如,如果连续出现三个连接错误,则L4负载均衡器会认为后端是不健康的
  • 负载均衡,最流行的负载均衡算法是二节点最小请求负载均衡(power of 2 least request load balancing)
  • 粘滞会话(Sticky sessions),在某些应用中,同一会话的请求到达相同的后端是很重要的
  • TLS 终止:许多L7负载均衡器会执行大量的TLS处理,包括终止,证书验证和保存,使用 SNI 的证书服务等
  • 可观察性
  • 安全性和 DoS 防范
  • 配置和控制面板

负载均衡器拓扑的类型
  • 中间代理:是最简单的负载平衡拓扑。缺点是:单点故障,伸缩瓶颈和黑箱操作
  • 边缘代理:与中间代理类似,但通常无法避免
  • 嵌入式客户端库:提供了最好的性能和可扩展性,但是需要在每种语言中实现该库,并跨所有服务升级库
  • Sidecar 代理,性能比嵌入式客户端库拓扑弱,但不受任何限制,这种拓扑已经被普遍推广为"服务网格"(Service Mesh),最受欢迎的Sidecar 代理负载平衡器是 Envoy,NGINX,HAProxy 和 Linkerd。
总体而言,Sidecar 代理拓扑(服务网格)正在逐渐取代所有其他的服务。流量进入服务网格之前,始终需要边缘代理拓扑。