在GAE中使用"golang"的成本/性能优势是什么?

nba*_*ari 5 python performance google-app-engine go

就每个实例的配额/使用限制而言,在Google appengine GAE中使用golang而不是在GAE中运行的其他提供的语言(如python,java,php或者它们的所有行为都相同)时,是否有相当大的改进/优势?

或者基本上任何实例,无论使用何种语言,行为都相同,并且每个实例可以处理几乎相同数量的最大请求数/秒,因为这更多地关注"GAE负载均衡器"或基础结构,而不是使用的编程语言,相同的逻辑可以应用于内存,CPU使用?

icz*_*cza 4

App Engine 没有明确的限制或限制,这些限制仅在使用特定语言时适用。然而,这些语言及其技术可能意味着某些限制,例如,与启动 Go 的内置 Web 服务器相比,Java 虚拟机实例本身需要更多的内存,并且启动时间要长得多(即使启用了预热请求),因此对于 Java 实例,将保留较少的内存供 Web 应用程序本身分配和使用(对于特定计划/类型和实例)。

我没有具体的措施可以比较,但是(如果是 Go):

“代码以源代码形式部署并在云中编译......Go 是第一个在 App Engine 上运行的真正编译语言。App Engine 上的 Go 使部署高效、CPU 密集型 Web 应用程序成为可能”。(来源

如果您考虑一下,App Engine 中的其他语言都是解释型的(包括 Java,它是由虚拟机解释的字节码),而 Go 则编译为依赖于平台的本机代码并作为平台相关的本机代码运行。这应该已经说明了一些有关性能的信息。

如需“案例研究”,请查看以下博客文章:

从零到 Go:24 小时内登陆 Google 首页

该博客还包含数百万人使用的真实应用程序的一些性能报告:

动态请求

该图表直接取自 App Engine 仪表板,显示了启动期间的平均请求延迟。正如您所看到的,即使在负载下,它也不会超过 60 毫秒,中位延迟为 32 毫秒。考虑到我们的请求处理程序正在动态进行图像操作和编码,这速度非常快。

App Engine 使用 Go 标准库中包含的 Web 服务器来为您的应用程序提供服务,因此这也意味着您可以轻松地将 Go Web 应用程序移植到 App Engine,并且您确切地知道为您的应用程序提供服务的 Web 服务器会发生什么在应用程序引擎上。

找到 Python、Java 和 Go 的官方时间比较

App Engine 系统状态可以被认为是官方的并且是一个很好的比较基础。

您可以单击属于特定日期和语言的任何单元格,然后获得静态和动态 GET 延迟(安全和不安全)、错误率、CPU 使用率/延迟的详细历史统计数据。这些统计数据是在已经启动并准备好提供服务的实例上测量的。

2015 年 1 月 27 日的分析结果如下:GoJavaPython的结论:

  • 所有动态延迟大致相同
  • CPU 延迟(计算第 33斐波那契数)最适合 Java,然后是 Go,最慢的是 Python。
  • 静态文件服务时间大致相同,但 Go 最快。