App Engine 是一种平台即服务(Platform-as-a-Service)。这意味着您只需部署代码,平台会代劳其他所有工作。例如,如果您的应用变得非常成功,App Engine 将自动创建更多实例以处理增加的流量。
Compute Engine 是一种基础设施即服务(Infrastructure-as-a-Service)。您需要创建和配置自己的虚拟机实例。它提供更多的灵活性,并且通常比 App Engine 成本更低。缺点是您需要自己管理应用程序和虚拟机。
如果必要,您可以混合使用 App Engine 和 Compute Engine。它们都与 Google Cloud Platform 的其他部分良好地配合使用。
编辑(2016 年 5 月):
另一个重要区别:在没有请求进来时,运行在 App Engine 上的项目可以将实例数量缩减至零。在开发阶段,这非常有用,因为您可以在数周内保持慷慨的免费配额。灵活运行时(即“托管 VM”)需要至少一个实例持续运行。
编辑(2017 年 4 月):
Cloud Functions(目前处于 beta 版)是从抽象层面上比 App Engine 更高级别的服务,没有实例!它允许开发人员部署小块代码,以响应不同的事件,这些事件可能包括 HTTP 请求、Cloud Storage 中的更改等。
与 App Engine 最大的区别在于,函数按每 100 毫秒定价,而 App Engine 的实例仅在 15 分钟不活动后关闭。另一个优点是 Cloud Functions 立即执行,而对 App Engine 的调用可能需要一个新实例 - 冷启动新实例可能需要几秒钟或更长时间(取决于运行时和您的代码)。
这使得云函数非常适用于以下情况: (a) 很少调用 - 不需要保持实例一直处于开启状态以防万一, (b) 快速变化的负载,其中实例经常旋转和关闭,可能还有更多的使用情况。
GAE和GCE都是Google Cloud Platform的一部分。
更新: 2014年3月,谷歌在应用引擎下推出了一个名为Managed Virtual Machine的新服务。 Managed VMs为应用程序提供了比应用平台更多的灵活性,包括CPU和内存选项。与GCE一样,您可以为应用引擎应用程序在这些VM中创建自定义运行时环境。实际上,应用引擎的Managed VMs在IAAS和PAAS之间模糊了界限。
为了更简单易懂地解释(因为有时我们会分不清 GAE 标准版和 GAE 弹性版之间的区别):
计算引擎类似于虚拟个人电脑,您可以部署一个小型网站及数据库等内容。您需要管理所有内容并控制已安装磁盘驱动器。如果您部署了网站,则需要负责设置 DNS 等。
Google 应用引擎 (标准版) 类似于只读沙盒文件夹,您可以将代码上传到其中执行,无需担心其余部分(是的:只读 - 为您安装了一组固定库,不能随意部署第三方库)。DNS / 子域名等映射要容易得多。
Google 应用引擎 (弹性版) 实际上就像一个完整的文件系统(而不仅仅是一个受限文件夹),您具有比标准引擎更多的权限,例如读写权限(但与计算引擎相比较少)。在 GAE 标准版中,为您安装了一组固定库,不能随意部署第三方库。在弹性环境中,您可以安装应用程序所依赖的任何库,包括自定义构建环境(例如 Python 3)。
尽管 GAE 标准版处理起来非常麻烦(虽然谷歌让它听起来很简单),但在面临压力时缩放效果非常好。麻烦之处在于,您需要测试和确保与受限环境的兼容性,并确保您使用的任何第三方库不会使用您不知道的其他第三方库,这些库可能无法在 GAE 标准版上工作。实际上设置需要更长时间,但对于简单部署而言,从长远来看可能更有回报。
缺点
App Engine Flex
优点
缺点
Google Kubernetes Engine
优点
Cons
Compute Engine
Pros
缺点
Google Compute Engine
GCE是Google Cloud Platform(GCP)提供的重要服务,因为大多数GCP服务在管理层下使用GCE实例(虚拟机)(不确定哪些服务不使用)。这包括App Engine、Cloud Functions、Kubernetes Engine(之前的Container Engine)、Cloud SQL等。GCE实例是最可定制的单元,因此只有在您的应用程序无法在其他任何GCP服务上运行时才应使用它们。人们经常使用GCE将他们的On-Prem应用程序转移到GCP,因为它需要最少的更改。随后,他们可以选择使用其他GCP服务来处理其应用程序的各个组件。
Google App Engine
GAE是GCP提供的第一个服务(早在Google进入云业务之前)。它可以从0到无限数量的实例进行自动扩展(它在底层使用GCE)。它有两种版本:标准环境和灵活环境。
标准环境非常快速,当没有人使用您的应用时,可以将实例数缩减至0,并且可以在几秒钟内动态扩展和收缩,具有专用的Google服务和用于缓存、身份验证等的库。标准环境的限制是它在沙箱中运行,因此非常受限。您只能使用特定编程语言的托管运行时。最近增加了Node.js(8.x)和Python 3.x。旧版本的运行时适用于Go、PHP、Python 2.7、Java等。
灵活环境更加开放,可以使用自定义运行时,因为它使用Docker容器。因此,如果提供的运行时中没有您需要的运行时,您始终可以为执行环境创建自己的Docker文件。不过,其中的注意事项是,即使没有人使用您的应用,也需要至少运行一个实例,而且扩展和收缩需要几分钟的时间。
不要将GAE的灵活性与Kubernetes Engine混淆,因为后者使用实际的Kubernetes并提供了更多的定制和功能。当您想要无状态容器且应用程序仅依赖于HTTP或HTTPS协议时,GAE Flex非常有用。对于其他协议,Kubernetes Engine(GKE)或GCE是您唯一的选择。请参考我的其他答案以获得更好的解释。如果您熟悉其他流行的服务:
Google Compute Engine -> AWS EC2
Google App Engine -> Heroku或AWS Elastic Beanstalk
Google Cloud Functions -> AWS Lambda函数
我将用我能理解的方式来解释:
计算引擎:如果你是一个自己动手做或者有IT团队的人,你只想租用一台带有特定操作系统(例如Linux)的云计算机,那么你可以选择计算引擎。你需要自己完成所有工作。
应用引擎:如果你是Python程序员,并且想要租用一台预配置的云计算机,它带有运行Web服务器的Linux和最新的Python 3以及必要的模块和一些插件,以便与其他外部服务集成,那么你可以选择应用引擎。
无服务器容器(Cloud Run):如果你想要部署本地设置环境的完全镜像(例如:Python 3.7+ Flask + sklearn),但不想处理服务器、扩展等问题,你可以在本地使用Docker创建一个容器,然后将其部署到Google Run。
无服务器微服务(Cloud Functions):如果你想编写一堆执行特定任务的API函数,那么你可以选择Google Cloud Functions。你只需要专注于这些特定的函数,其余的工作(服务器、维护、扩展等)都会为你完成,以将你的函数暴露为微服务。
云托管的虚拟机(VMs),在云出现之前,通常称为虚拟专用服务器(VPS)。您可以像使用物理服务器一样使用它们,在其中安装和配置操作系统、应用程序、数据库,并保持操作系统更新等。这就是基础设施即服务(IaaS)。
当您有一个在数据中心的VM或服务器上运行的现有应用程序,并希望轻松将其迁移到GCP时,VMs非常有用。
App Engine主机和运行您的代码,而无需处理操作系统、网络和许多其他必须使用物理服务器或VM进行管理的内容。将其视为运行时,可以自动部署、版本化和扩展应用程序。这被称为平台即服务(PaaS)。
如果您需要自动化部署和自动化扩展应用程序,则应用引擎非常有用。除非您的应用程序需要自定义操作系统配置,否则与手动配置和管理VM相比,应用引擎通常更具优势。
App Engine为开发人员提供了控制Google Compute Engine核心的能力,同时为Google Compute Engine数据处理应用程序提供面向Web的前端。
另一方面,Compute Engine提供了直接和完整的虚拟机操作系统管理。要展示您的应用,您需要资源,而Google Cloud Storage非常适合存储您的资产和数据,无论它们用于什么用途。全球范围内的托管可快速访问数据。可靠性保证在99.95%的正常运行时间,Google还提供备份和恢复数据的功能,而且不可思议的是,存储空间是无限的。
您可以使用Google Cloud Storage管理您的资产,存储、检索、显示和删除它们。您也可以快速读写保存在Cloud Storage中的平面数据表。Google Cloud中的下一个是BigQuery。使用BigQuery,您可以在几秒钟内分析大量的数据,我们谈论的是数百万条记录。访问通过简单的用户界面或代表状态转移(REST)接口处理。
数据存储,正如您所猜测的那样,并不是问题,并且可以扩展到数百TB。BigQuery可通过一系列客户端库进行访问,包括Java、.NET、Python、Go、Ruby、PHP和Javascript等。一种名为NoSQL的类似SQL的语法可通过这些客户端库或Web用户界面访问。
最后,让我们谈谈Google云平台数据库选项Cloud SQL和Cloud Datastore。它们之间有一个主要区别。Cloud SQL用于关系数据库,主要是MySQL,而Cloud Datastore用于使用noSQL的非关系型数据库。对于Cloud SQL,您可以选择在美国、欧洲或亚洲进行托管,每个数据库实例具有100 GB存储空间和16 GB RAM。
Cloud Datastore每月提供高达50K读/写指令和1GB数据存储免费。如果超过这些配额,则需要收取费用。App Engine还可以与Google Cloud平台的其他较少知名的、更具针对性的成员一起使用,包括用于创建API后端的Cloud Endpoints、用于数据分析和趋势预测的Google Prediction API,以及用于多语言输出的Google Translate API。
虽然您可以通过独立使用App Engine实现许多功能,但是当您考虑到其与Google Cloud平台服务之间的轻松高效协作能力时,它的潜力会大幅提升。