2

TL;DR有没有办法并行部署 App Engine 模块?

我使用 Google 的App Engine SDK for Go构建了一个 go 应用程序。该应用程序定义了多个模块。这些模块是自包含的,不需要跨其他模块的任何类型的依赖。

当我尝试将模块部署到 Google Cloud 时,我不禁注意到这些模块是按顺序上传的。如果部署相对较快,这会很好,但是每个模块都需要它自己的 Go 二进制文件的冗余编译。因此,除了常规的上传时间之外,每次我想部署时,我都必须等待我的应用程序编译 [模块计数] x [编译时间]。

显而易见(快速)的解决方案是并行部署,因此我创建了一个简单的 bash 脚本来独立部署每个模块。我立即使用这个“解决方案”遇到的问题是来自 App Engine API 的 HTTP 500 响应。跨越所有模块的整个伞式应用程序似乎在任何单个模块更新时都会“锁定”。这种情况会创建一个竞争条件,在这种条件下,只有第一个触发部署的模块成功,其他模块失败。

我担心这是 App Engine 中遗留语言的遗留问题。由于每个模块都使用相同的 Go 二进制文件,因此实际上不需要多次编译相同的代码。重复编译是多余的,没有办法绕过锁。

一种假设的解决方案,我对它只有模糊的理解,是并行编译和串行部署。我想这种方法将涉及拆开配置工具并对其进行重新设计以按照上述方式执行 - 尽管我不能肯定地说(还)。

这里的任何帮助都将非常感激。谢谢!

4

1 回答 1

1

您可以部署到您的 App Engine 应用程序的另一个“版本”,然后在部署所有模块后,进行非常快速的版本切换?

如果您需要/想要那种东西,版本还允许流量拆分。

于 2015-01-12T11:09:50.620 回答