通常来说,负载均衡的职责是将网络请求或者其他形式的负载“均摊”到不同的机器上,避免集群中部分服务器压力过大,而另一些服务器比较空闲的情况,让每台服务器获取到适合自己处理能力的负载。在为高负载服务器分流的同时,还可以避免资源浪费,一举两得。
负载均衡可分为软件负载均衡和硬件负载均衡,其中软件负载均衡比较常见,比如Nginx,它会对接受请求进行分配,避免少数服务提供者负载过大而导致的部分请求超时。因此将负载均衡到每个服务提供者上,是非常必要的。
在分布式的微服务系统中,多台服务器同时提供一个服务,并统一到服务配置中心,消费者通过查询服务配置中心,获取服务到地址列表,需要选取其中一台来发起RPC远程调用。如何选择则取决于具体的负载均衡算法,对应于不同的场景选择不尽相同。负载均衡算法的种类有很多种,常见的负载均衡算法包括轮询法、随机法、源地址哈希法、加权轮询法、加权随机法、最小连接法、Latency-Aware等,需根据具体的应用场景选取对应的算法。
本文将围绕爱奇艺内容理解业务对TFServing服务调用的几个问题,以及应对这些问题的解决思路和方案进行介绍。
01
背景介绍
爱奇艺内容理解业务大多使用深度学习模型,而模型的在线服务依赖于爱奇艺深度学习推理平台。通常,推理平台使用gRPC作为服务框架,部署在QAE平台上,使用QLB四层(以下简称QLB-4)作为负载均衡方案。理论上一个VIP对应多台后端服务器,通过QLB-4自身的负载均衡策略,可以实现有效的服务器负载均衡访问,但是在大量的深度学习模型在线服务调用过程中,我们发现有以下几类问题:
QLB-4未能实现真正的负载均衡,流量未被均匀分配,存在部分服务器访问量明显过多问题。
当有新的服务端实例时(包括重启和新增场景),客户端流量不能分配到新的服务端实例上,需要重启客户端,流量才会重新分配到新的服务端实例。
当客户端数量小于服务端数量时,一定会有部分服务端一直没有接收到客户端请求。
02
基于QLB-4的TFServing服务调用一
些问题的实验复现
本次实验将gRPC 客户端和服务端均部署在QAE上,服务端入口网络流量这一指标能直接体现服务端请求接收情况,因此选用服务端入口网络流量作为观测指标。以下实验图x轴为时间轴,y轴为当前时间段网络流量的平均值,具体实验如下&#