Nginx 处理azure上Kubernetes群集的并发请求

Nginx 处理azure上Kubernetes群集的并发请求,nginx,flask,queue,gunicorn,azure-aks,Nginx,Flask,Queue,Gunicorn,Azure Aks,在kubernetes集群中处理并发请求的最佳选项是什么?在特定情况下,我在azure上使用AKS 我当前的设置使用FLASK+GUNICORN实现了我的API的多个pod,同时还使用多个pod实例化了一个nginx反向代理。 我本以为nginx的loadbalancer服务已经能够将请求重定向到流量较低的pod,但我看到的是,两个consequences请求通常会落在同一个nginx pod上,从而导致等待时间过长 我应该实现队列处理程序吗?如果是,哪种选择是最好的?是否有可以集成到AKS中的

在kubernetes集群中处理并发请求的最佳选项是什么?在特定情况下,我在azure上使用AKS

我当前的设置使用FLASK+GUNICORN实现了我的API的多个pod,同时还使用多个pod实例化了一个nginx反向代理。 我本以为nginx的loadbalancer服务已经能够将请求重定向到流量较低的pod,但我看到的是,两个consequences请求通常会落在同一个nginx pod上,从而导致等待时间过长

我应该实现队列处理程序吗?如果是,哪种选择是最好的?是否有可以集成到AKS中的azure本机服务


或者足以为我的吊舱实施就绪探测?如果是,最好的设置是什么?一个GUNICORN worker,有两个线程,一个简单的API检查端点?

除非有特殊要求,否则我会先删除Nginx反向代理,如果流量仅用于集群内访问,则依赖正常的kubernetes服务,如果用于外部访问,则使用带有入口的服务

原因是,除非您在配置Nginx反向代理时非常小心,否则它可能无法以最佳方式工作。例如,当远程访问此服务时,将执行NAT,其中有一个额外的Nginx可能会因为NAT而将请求锁定到单个会话/IP,从而将多个新请求重复发送到同一后端。Nginx入口支持许多注释来帮助配置,即:

这也可能是一个很好的适合这种情况;因为这将允许您的应用程序在配置的限制范围内随需求扩展。在我看来,如果您希望处理尽可能接近实时,那么这将是实现队列的更好方法。如果您不介意为处理添加更长的延迟,那么工作队列模型可能更适合,因为它可能需要更少的资源

正如您所提到的,您应该为您的应用程序设置就绪性和活跃性探测器,以便Kubernetes能够更好地了解他们的健康状况。准备就绪的探测是库伯内斯用来理解是否考虑一个POD准备接受流量,从而影响服务是否将流量路由到POD或不。活动性检查让kubernetes了解何时/是否应该重新启动pod,这对于在无法恢复的条件停止pod后重新启动非常有用

以下是一些有关kubernetes探测器的参考资料:


希望这能有所帮助。

我可以想象,依靠一个入口会更容易,但目前来说,这需要更多的努力,而不是结果。关于nginx代理的最佳配置有什么参考资料吗?在任何情况下,我已经在尝试,看看是否有任何相关的改进与正确的准备探针。