Google Go、Python 和 Java 在 Appengine 上的资源使用情况比较
谷歌的Go语言在Appengine上使用的资源会比Python和Java少吗?Go的实例启动时间比Java和Python快吗?
Go程序是以二进制文件的形式上传,还是以源代码的形式上传?如果是以源代码上传,那它是在每次实例启动时编译,还是只编译一次?
换句话说:使用Go在Appengine上会让我在成本上受益吗?(这里只考虑Appengine资源的费用,不考虑开发时间)
5 个回答
这个问题其实不太重要。
Go应用程序的内存占用最少,其次是Python,最后是Java。它们每个实例的费用差不多,所以除非你的应用需要更多的内存来提高性能,否则这个问题就不重要了。
Go的启动时间比Python短,而Python又比Java短。除非你的应用有特别的需求,需要频繁地启动和关闭实例,否则从费用的角度来看,这个问题也不重要。不过,如果你的应用在非常短的时间内需要处理大量请求,启动时间可能会成为一个优势。
正如其他回答提到的,很多费用在所有平台上是相同的,特别是数据存储操作。Go、Python和Java之间的差异对实例小时费用的影响主要与以下几点有关:
你的应用会产生很多垃圾吗?对于很多应用来说,最大的计算成本是垃圾回收。Java的垃圾回收技术最成熟,像序列化这样的基本操作速度比Python快得多。Go的垃圾回收器似乎还在不断发展中,但根据一些简单的网络搜索,似乎还没有特别引以为傲的地方。
你的应用计算密集吗?Java(即时编译)和Go在数学运算方面可能比Python更好。
这三种语言各有优缺点。大多数情况下,还是让其他问题主导你的选择吧——你最喜欢用哪种语言工作呢?
应用程序的成本不仅仅是实例的费用。我现在只使用Java运行环境,所以我不太清楚使用Python或Go会有多大的效率差异,但我觉得差别不会太大。我知道,实例并不是你需要考虑的唯一费用。根据你的应用程序的功能,你可能会发现API费用或存储费用比不同运行环境之间的小差异更重要。无论你使用什么运行环境,所有的API费用都是一样的。
语言“可能”会影响这些费用:
- 按需前端实例
- 预留前端实例
- 后端实例
与语言无关的费用:
- 高复制数据存储(每存储一GB)
- 外发带宽(每GB)
- 数据存储API(每次操作)
- Blob存储API(每GB)
- 邮件API(每封邮件)
- XMPP API(每个消息段)
- 频道API(每个频道)
谷歌的Go语言在Appengine上会比Python和Java消耗更少的资源吗?它的实例启动速度比Java和Python快吗?
是的,Go语言的实例内存占用比Python和Java少(少于10MB)。
是的,Go语言的实例启动速度比Java和Python快,因为它只需要读取一个可执行文件来启动应用程序。
另外,即使Go语言目前是单线程的,它也能通过goroutines同时处理多个请求。这意味着如果一个goroutine在等待输入输出,另一个goroutine可以处理新的请求。
Go程序是以二进制文件上传,还是以源代码上传?如果是以源代码上传,是在每次启动实例时编译,还是只编译一次?
Go程序是以源代码的形式上传的,在使用SDK部署新版本应用时会编译成二进制文件(只编译一次)。
换句话说:在成本方面,我使用Go语言在App Engine上会有好处吗?
从性能和价格的比例来看,Go语言确实有优势,但这并不会影响其他API配额的定价,正如Peter所说的那样。