nginx前端,后端是n个docker容器,docker容器是nginx+php-fpm,已知每个容器都有可能故障,容器故障时前端会有502或者504错误,前端偶尔也会有网络延迟
目前的做法和问题
假设interval设置为3s,fall为2,那么如果后端在上一次检查结束后立即挂掉,即有近6s的时间请求依然会转发到故障后端
假设timeout设置为1s,那么如果前端网络延迟,会导致瞬时全部后端都超时,直接返回502给用户。但是如果在增大timeout值,那么健康检查将没有多大意义,正常的时候后端一般50ms以内会响应,1s已经不能过滤掉高负载后端
同上,在interval间隔内挂掉,仍有部分请求到达后端,如果后端负载在阈值频繁波动,那么5xx错误可能会比没有健康检查和sysguard还多
请问有什么解决办法吗?
漂亮男人2017-05-16 17:22:56
不知道你的前端应用场景是怎么样的,貌似负载很高的样子,不太可能直接暴露错误给用户吧,大不了提示用户稍后再试下,这深入研究还是得看看什么技术架构,从根上找问题
曾经蜡笔没有小新2017-05-16 17:22:56
个人感觉这东西是避免不了的 负载大了就优化程序或者增大集群 该出的错误还是要出 只不过写个含糊的名字就可以了
淘宝也经常系统忙 知乎没事还自己给自己服务器提问呢