在Kubernetes中,我们仍然需要多进程/独角兽吗?

时间:2019-04-04 21:06:51

标签: kubernetes multiprocessing gunicorn python-multiprocessing

通常,在面向机器的部署中,人们会使用gunicorn来启动大量工作人员来处理传入的请求。 (是的,worker_class将进一步定义工作进程中的行为)

在Kubernetes集群中进行部署时,我们是否仍gunicorn(或者确切地说,是否仍需要多进程部署)?

基本上,每个运行中的容器都是一个进程(在“每个容器一个容器”配置中)。在服务后面运行的多个Pod已经等同于gunicorn所提供的。换句话说,依靠Kubernetes服务而不是gunicorn

还需要gunicorn吗?

是的,一个Pod与一个进程并不完全相同(每个Pod在同伴容器中都有一些开销),但是除此之外,还有没有gunicorn我们可能会错过的其他东西吗?

已编辑

说明:是的,仍然需要gunicorn或其他wsgi http服务器来运行python应用程序。我的问题真的是关于multiprocess方面的问题(如标题中的 multiprocess / gunicor 一样。)

4 个答案:

答案 0 :(得分:1)

Gunicorn用于服务WSGI(Web服务器网关接口)应用程序,因此它是服务器,而不仅仅是多进程编排工具。手上的Kubernetes是一个编排工具,可帮助管理基础架构。它不讲HTTP,也不了解WSGI规范。 换句话说,您不能在裸kubernetes容器上运行WSGI应用程序,仍然需要像Gunicorn,uWSGI等WSGI服务器来为该应用程序提供服务。

答案 1 :(得分:0)

  

还需要古尼康吗?

确实不需要。 Kubernetes可以像Gunicorn一样使用HPAVPA并结合cluster autoscaler之类的东西来处理放大和缩小(荚/容器)的方式。

事实上,您不需要它,不需要它,您不能使用Gunicorn。在resource limits控制的容器/容器中,您可以完美地拥有多个进程。请记住,Kubernetes资源管理器将最终决定所请求的资源以及容器的资源上限(在pod中运行)。

答案 2 :(得分:0)

这真的取决于您的用例。如果一种解决方案比另一种更适合您,这里就没有对错之分。

我们有一个类似的用例。 我们正在运行大约 30 个相同服务的副本。每个 Pod 运行 1 个容器,该容器再次运行 50 个重复服务。

我们本来可以让 1500 个 pod 运行一项服务,但我们已经测试过,当仅运行 30 个副本时,性能与所需资源相比要好得多,每个副本运行 50 个服务。

我们唯一要做的就是监控每个 Pod 的这 50 个服务,因此如果其中一个服务停止,它就会重新启动。如果它们都有错误,我们会对 pod 运行健康检查,然后重新创建 pod。

答案 3 :(得分:0)

您可能需要考虑使用 tensorflow 模型服务器(请参阅 https://www.tensorflow.org/tfx/tutorials/serving/rest_simple)。

在实践中,我在执行模型预测时遇到过,如果尝试并行运行多个预测(即多进程),则在给定相同 CPU / GPU 资源的情况下,性能会更差。矩阵计算倾向于通过库使用低级并行性,并且尝试使用多个进程确实会导致我的经验变慢。正如其他人评论的那样,为您的用例进行自己的性能测试始终是最好的方法。