TensorFlow Serving微服务架构负载均衡踩坑记录
最近在实践TensorFlow Serving微服务架构时,遇到了负载均衡配置的坑。记录一下踩坑过程和解决方案。
问题背景
我们使用Docker容器化部署了多个TensorFlow Serving实例,希望通过负载均衡分发请求。最初尝试直接用Nginx配置反向代理,但发现模型推理结果不一致。
复现步骤
- 启动两个TensorFlow Serving容器:
# 容器1
sudo docker run -d --name tf-serving-1 \n -p 8501:8501 \n -v /models:/models \n tensorflow/serving \n --model_name=model1 \n --model_base_path=/models/model1
# 容器2
sudo docker run -d --name tf-serving-2 \n -p 8502:8501 \n -v /models:/models \n tensorflow/serving \n --model_name=model2 \n --model_base_path=/models/model2
- Nginx配置(问题配置):
upstream tensorflow_servers {
server 127.0.0.1:8501;
server 127.0.0.1:8502;
}
踩坑过程
发现请求分发不均,且模型推理结果不稳定。通过排查发现:
- Docker容器间模型状态未同步
- Nginx默认轮询策略导致模型上下文混乱
解决方案
最终采用以下配置:
upstream tensorflow_servers {
server 127.0.0.1:8501 max_fails=3 fail_timeout=30s;
server 127.0.0.1:8502 max_fails=3 fail_timeout=30s;
keepalive 32;
}
server {
listen 80;
location / {
proxy_pass http://tensorflow_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
通过设置失败重试和连接保持,解决了负载均衡不均的问题。

讨论