本文将介绍 Load balancer 的意义、原理以及分类
意义
Load balancer 即网络负载均衡,是将流量进行统一分配均衡,分到到一组后端服务的应用。对部署负载均衡的应用来说,具有以下意义:
- 可用性:所有流量只分发到单台后端服务器,容易导致服务宕机、服务不稳定;如果有多台服务器共同承担流量,能提高服务的稳定性;
- 可扩展性:通过在一组后端服务的前端设置负载均衡器,可以使得后端服务是可伸缩、可扩展的,可以根据流量情况、重点时段进行服务的关闭和开启;
- 安全性:在后端服务前的负载均衡器,可以作为一层网络安全屏障,对恶意流量进行识别,暂停到过热、不稳定的后端机器的流量,识别对某台机器的恶意攻击并进行隔离;
- 可观察性:所有应用流量都会流经负载均衡器,可以进行流量的日志记录;根据日志观察流量的特点,并针对性地进行服务改进和升级;
原理
Load Balance 既然是对网络流量的负载均衡,那么根据需要“均衡”的流量的层次,分为四层负载均衡和七层负载均衡,即按照计算机网络分层原理中的传输层、应用层进行流量“均衡”:
- 四层负载均衡:根据传输层协议(TCP、UDP、FTP)的资源特征进行流量“均衡”,比如根据客户端IP、目标IP分发流量到后端,不管传输的应用层内容,只是进行流量的“均衡”分配;
- 七层负载均衡:根据应用层的特征进行流量分配,比如根据URI、HTTP-Headers、Session进行流量分配,这样使得流量尽量“均衡”到后端,也可以通过参数设置保证某些连贯请求由一个机器连续处理(高效利用单台机器的缓存),避免连贯请求消耗多台机器的资源;
无论是四层还是七层负载均衡,都需要解决一个核心问题:如何分配流量到一组后端服务,即一个请求到来后如何选择转发的后端服务器。主要有以下常用方法:
- 轮询:对一组服务器进行轮询,每台后端服务处理的流量都相等;
- 加权与阈值:根据后端服务的性能,静态或动态设定权值与阈值,根据权值分配流量,根据阈值限定最高流量;这样保证“能者多劳”,安全均衡;
- 最少连接数/最快处理时间:先随机选取一个子组的后端服务,然后根据当前这组机器的最少连接数或最快平均处理时间,选定流量分配目标;
- URI Hash:根据请求的URI特征进行哈希,根据哈希值映射到某台机器,并记录这个URI->哈希值的映射,后面的流量进行复用;这样可以使得某类请求(某些API、某些资源请求),专门由某台机器处理,避免所有机器缓存某项资源(如某张图片的获取,由一台后端服务缓存即可);
- IP Hash:根据请求的客户端IP进行哈希,根据哈希值映射到后端机器;与 URI Hash 相似,这样可以使得某个客户的连贯请求由单台机器处理,该机器处理并缓存该客户的数据,避免多台机器缓存相同的客户数据,避免资源浪费;
- 哈希环:构建一个环数值域,将后端机器根据IP或其他特征映射到环上;流量到来时也根据特征映射到环上,在环上顺时针的最近的机器即是均衡分配的目标后端;这样可以更方便地调整后端服务的权值、阈值等,也可以方便扩展、删除机器,调整环数据以及哈希算法即可;
分类
根据实际应用场景,负载均衡有以下类别: