4.2 负载均衡的特性
本节将简要总结负载均衡器提供的高层特性。但并不是所有负载均衡器都提供这里的所有特性。
负载均衡:如同名字,负载均衡器首要职责是保证系统整体负载均衡。从简单的随机选择、Round Robin,到更复杂的考虑各种延迟和后端负载状态的算法,目的都是为了选择一个合适的后端来处理一个连接或一个请求。
服务发现:负载均衡器判断它有哪些可用后端。不同形式负载均衡的服务发现差异很大,这里给出几个例子:
- 静态配置文件。
- DNS。
- Zookeeper、Etcd、Consul 等。
- Envoy 的通用数据平面 API。
健康检查:负载均衡器判断它的后端是否正常工作,监控检查的方式大概分为两类:
- 主动:负载均衡器定时向后端发送 ping 消息(例如,向 /healthcheck 发送 HTTP 请求), 以此测量后端健康状态
- 被动:负载均衡器从数据流中检测健康状态。例如,如果四层负载均衡发现一个后端有三次连接错误,或者七层负载均衡,发现后端出现 503 错误码,负载均衡器就认为这个后端不健康;
黏性会话:对于一些特定应用,保证属于同一 session 的请求落到同一后端非常重要。这可能需要考虑缓存、结构复杂的临时状态等问题。session 的定义也并不相同,可能会包括 HTTP cookies、客户端连接特性(properties),或者其他一些属性。
可观测性:网络在本质上是不可靠的,负载均衡器通常需要导出统计、跟踪和日志信息,以帮助运维判断出了什么问题并修复它。负载均衡器输出的可观测性数据差异很大。高级的负载均衡器提供丰富的输出,包括数值统计、分布 式跟踪以及自定义日志。需要指出的是,丰富的可观测数据并不是没有代价的,负载均衡器需要做一些额外的工作才能产生这些数据。但是这些数据带来的收益要远远大于为产生它们而增加的那点性能损失。
安全和 DoS 防御:尤其在边缘部署拓扑情况下,负载均衡器通常需要实现很多安全特性,包括限速、鉴权和 DoS 防御(例如,给 IP 地址打标签及分配标识符、tarpitting 等等)。