nginx前端,后端是n个docker容器,docker容器是nginx+php-fpm,已知每个容器都有可能故障,容器故障时前端会有502或者504错误,前端偶尔也会有网络延迟
目前的做法和问题
nginx前端使用tengine,并开启健康检查
假设interval设置为3s,fall为2,那么如果后端在上一次检查结束后立即挂掉,即有近6s的时间请求依然会转发到故障后端
假设timeout设置为1s,那么如果前端网络延迟,会导致瞬时全部后端都超时,直接返回502给用户。但是如果在增大timeout值,那么健康检查将没有多大意义,正常的时候后端一般50ms以内会响应,1s已经不能过滤掉高负载后端
后端docker使用tengine,开启sysguard模块
同上,在interval间隔内挂掉,仍有部分请求到达后端,如果后端负载在阈值频繁波动,那么5xx错误可能会比没有健康检查和sysguard还多
请问有什么解决办法吗?
不知道你的前端应用场景是怎么样的,貌似负载很高的样子,不太可能直接暴露错误给用户吧,大不了提示用户稍后再试下,这深入研究还是得看看什么技术架构,从根上找问题