Node.js 中 GAE 基本扩展的并发性

Posted

技术标签:

【中文标题】Node.js 中 GAE 基本扩展的并发性【英文标题】:Concurrency with GAE basic scaling in Node.js 【发布时间】:2019-10-02 13:07:36 【问题描述】:

我正在尝试通过将 Google Cloud Tasks 与运行 node.js 的 Google App Engine 一起使用来运行较长的任务(>10 分钟)。

目标是其他应用将数百个任务推送到 Cloud Tasks 队列,并且 Google App Engine 的每个实例将一个一个地处理这些任务。我正在使用所谓的 basic_scaling 选项来允许任务运行长达 24 小时(与 automatic_scaling 的 10 分钟限制相比)。

目前它可以工作,但似乎一个实例一次处理多个请求。

有没有办法通过“基本”扩展选项限制每个实例的最大并发请求数?

【问题讨论】:

【参考方案1】:

在官方文档中,Establish Rate Limits 下有两个标志可用于配置队列速率限制:

--max-dispatches-per-second=[DISPATCH_RATE]
--max-concurrent-dispatches=[MAX_RUNNING]

如果您试图确保一次只处理一项任务,那么--max-concurrent-dispatches 似乎是您的解决方案。

【讨论】:

如果我在basic_scaling 中设置max_instances: 3 以运行最多3 个实例会怎样。我设置--max-concurrent-dispatches=3 来完成由 3 个实例处理云任务,但每个实例一次只能处理一个任务。不幸的是,看起来任务将这 3 个并发请求发送到一个实例,而没有创建其他两个实例。从 GAE basic scaling 的文档中,我不明白它在什么条件下会启动额外的实例。你呢? 根据cloud.google.com/appengine/docs/standard/nodejs/config/…默认是10,听起来您希望App Engine以“1”的并发运行。 您指的是automatic_scaling.max_concurrent_requests,但我的问题是针对basic_scaling。为什么我关心基本缩放是上面描述的超时问题。

以上是关于Node.js 中 GAE 基本扩展的并发性的主要内容,如果未能解决你的问题,请参考以下文章

解密诡异并发问题的幕后黑手:可见性问题

并发编程中的原子性问题,可见性问题,有序性问题。

JMeter并发性测试

操作系统的基本特性

SQL Server数据库读写分离提高并发性

Java内存模型