Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Kubernetes,我们还需要多进程/gunicorn吗?_Kubernetes_Multiprocessing_Gunicorn_Python Multiprocessing - Fatal编程技术网

在Kubernetes,我们还需要多进程/gunicorn吗?

在Kubernetes,我们还需要多进程/gunicorn吗?,kubernetes,multiprocessing,gunicorn,python-multiprocessing,Kubernetes,Multiprocessing,Gunicorn,Python Multiprocessing,在面向机器的部署中,通常情况下,人们会使用gunicorn来启动一些工作人员来服务传入的请求。(是的,worker\u类将进一步定义worker进程内的行为) 在Kubernetes集群中部署时,我们是否仍然gunicorn(或者确切地说,我们仍然需要多进程部署) 基本上,每个正在运行的容器都是一个进程(每个pod配置一个容器)。一项服务背后运行的多个吊舱已经相当于gunicorn所提供的功能。换句话说,依赖Kubernetes服务而不是gunicorn 是否仍然需要gunicorn 是的,一个

在面向机器的部署中,通常情况下,人们会使用
gunicorn
来启动一些工作人员来服务传入的请求。(是的,
worker\u类
将进一步定义worker进程内的行为)

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

基本上,每个正在运行的容器都是一个进程(每个pod配置一个容器)。一项服务背后运行的多个吊舱已经相当于
gunicorn
所提供的功能。换句话说,依赖Kubernetes服务而不是gunicorn

是否仍然需要
gunicorn

是的,一个pod与一个进程并不完全相同(每个pod中的一些开销用于相应的容器),但除此之外,没有
gunicorn
,我们可能会错过什么

编辑 澄清:是的,仍然需要
gunicorn
或其他
wsgi
http
服务器来运行python应用程序。我的问题实际上是关于
多进程
方面(如标题中的多进程/gunicor)

还需要gunicorn吗

真的不需要。Kubernetes可以处理向上和向下的扩展(吊舱/容器),就像gunicorn使用例如an或a,以及其他类似的东西一样


事实上,你不需要它,它不需要你不能使用gunicorn。您完全可以在一个pod/容器中有多个进程,由。请记住,Kubernetes资源管理器最终将为您的容器(在pod中运行)指定资源的请求和上限。Gunicorn用于服务WSGI(Web服务器网关接口)应用程序,因此它是一个服务器,而不仅仅是多进程编排工具。手头的Kubernetes是一个编排工具,有助于管理基础架构。它不讲HTTP,也不知道任何WSGI规范。
换句话说,您不能在光秃秃的kubernetes吊舱上运行WSGI应用程序,您仍然需要WSGI服务器liike Gunicorn、uWSGI等来为应用程序提供服务

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

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

我们最终可能会有1500个吊舱运行一个服务,但我们已经测试过,当只运行30个副本时,性能与所需资源相比要好得多,每个副本运行50个服务


我们要做的唯一额外的事情就是监控每个pod的50个服务,所以如果其中一个停止,它就会重新启动。如果它们都有一些错误,我们将对POD进行健康检查,并重新创建POD。

您可能需要考虑使用TysFooSoM模型服务器(参见)。


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

hey@Ken4scholars,感谢您的评论。我编辑了我的问题以澄清问题。@MartinNowosad
python manage.py runserver
为嵌入WSGI服务器的Django开发服务器提供午餐。所以您仍然有一个WSGI服务器。在生产环境中,此服务器未被使用,因为它未准备好生产,并且缺少生产环境中所需的许多功能。这就是为什么在生产中使用Gunicorn/uWSGI或其他生产就绪的WSGI服务器。你不能仅仅启动一个k8s吊舱,因为它将无法与你的Django应用程序对话或说HTTP。当然,您可以在开发服务器上运行k8s,但由于上述原因,我们严格不建议这样做。@MartinNowosad再次阅读我的文章和我的评论-如果没有WSGI服务器,您不能用k8s替换gunicorn。您经常提到的开发服务器也是WSGI服务器。我特别提到Gunicorn,因为它在帖子中,但我也说没有WSGI服务器。也许再试试看这篇文章。我看不出有什么必要进一步讨论,所以这是我最后的评论。祝你有一个愉快的一天我不明白,我以为你需要gunicorn来提供应用程序,没有它flask应用程序如何工作?烧瓶应用程序看起来像什么?它看起来像我们在网上看到的基本开发应用程序吗(hello world)?另外,如果我们确实包括gunicorn,我们是否只将工作进程设置为1?您可以选择不使用gunicorn而使用hello world的方法,或使用1进程的gunicorn,两者都可以工作。我只是看不到gunicorn的好处,除非它使用一个进程比hello world方法快,否则不要在生产环境中使用RUNSERVER。它没有经过安全审计或性能测试。(这就是它将如何保持下去。我们的业务是制作Web框架,而不是Web服务器,因此改进此服务器以处理生产环境超出了Django的范围。)请看:我认为目前还没有最佳实践(人们说的很多都是受旧习惯的影响)。有传闻称,将gunicorn部署到Kubernetes后,很难发现内存问题。OOM killer杀死pod中的gunicorn子进程,这意味着如果pod内存不足,它永远不会真正死亡。主进程只是重新启动子进程。这是一个问题,因为没有记录任何内容。此外,gunicorn的流程管理与Kubernetes不一致,Kubernetes有自己的健康检查。我来这里想知道uvicorn在kuber中是否足够