Heroku dynos/内存/进程究竟是如何工作的?

Heroku dynos/内存/进程究竟是如何工作的?,heroku,heroku-cli,Heroku,Heroku Cli,对于任何使用过Heroku的人(可能还有任何以前部署过PaaS并有经验的人): 我对Heroku所说的“dynos”的含义、dynos如何处理内存以及用户如何扩展感到困惑。我读到他们将dynos定义为“应用容器”,这意味着dyno1的内存/文件系统不能被dyno2访问。这在理论上是有道理的 Heroku使用的容器称为“dynos”。dynos是独立的虚拟化Linux容器,设计用于根据用户指定的命令执行代码。() 此外,如果我理解正确,用户可以通过诸如heroku ps:scale web=1等命

对于任何使用过Heroku的人(可能还有任何以前部署过PaaS并有经验的人):

我对Heroku所说的“dynos”的含义、dynos如何处理内存以及用户如何扩展感到困惑。我读到他们将dynos定义为“应用容器”,这意味着dyno1的内存/文件系统不能被dyno2访问。这在理论上是有道理的

Heroku使用的容器称为“dynos”。dynos是独立的虚拟化Linux容器,设计用于根据用户指定的命令执行代码。()

此外,如果我理解正确,用户可以通过诸如
heroku ps:scale web=1
等命令定义实例化了多少dyno或“应用容器”

我最近创建了一个webapp(一个Flask/gunicorn应用程序,如果这很重要的话),我在其中声明了一个变量,用于跟踪有多少用户访问了某条路线(我知道,这不是最好的方法,但无论如何都不相关)。在本地测试中,它似乎工作正常(即使对于多个客户端)

当我部署到Heroku时,只有一个web dyno(
Heroku ps:scale web=1
),我发现情况并非如此,而且变量似乎有多个实例,并且更新方式不同。我知道不同的dyno之间不共享内存,但我只有一个运行服务器的dyno。所以我认为这个变量/web应用程序应该只有一个实例?dyno是否在单个/多个进程上运行我的服务器?如果是,我如何限制它

注意,这个web应用程序确实将文件保存在磁盘上,通过每个API请求,我检查文件是否存在。因为它是,这告诉我,我是从同一个dyno请求

也许有人能启发我?我是部署的初学者,但愿意学习/理解更多

dyno是否在单个/多个进程上运行我的服务器

:

Gunicorn在每个dyno中分叉多个系统进程,以允许Python应用程序支持多个并发请求,而不要求它们是线程安全的。在Gunicorn术语中,这些被称为工作进程(不要与Heroku工作进程混淆,后者在自己的动态中运行)

建议为此设置设置配置变量。如果设置了WEB_并发环境变量,Gunicorn将自动接受该变量

heroku config:set WEB_CONCURRENCY=3
Heroku根据进程的动态大小自动设置
WEB\u并发性
环境变量。此功能旨在为您的应用程序提供一个合理的起点。我们建议您了解进程的内存需求,并相应地设置此配置变量

解决方案不是限制您的进程,而是修复您的应用程序。相反,将数据存储在中

注意,这个web应用程序确实将文件保存在磁盘上,通过每个API请求,我检查文件是否存在。因为它是,这告诉我,我是从同一个dyno请求


如果你只是想看看你在哪个dyno上,好吧。但您可能不想将实际数据保存到dyno的文件系统中,因为它是。每当dyno重新启动时,您将丢失对文件系统所做的所有更改。这(每天至少一次)。

你在这里问了很多问题,但我会建议一个相关的傻瓜来解决这一问题。但总的来说,事实上,这里可能有足够的答案。我再加一个。