抱歉,如果这是一个幼稚的问题,但我看了很多谷歌员工的演讲,仍然不明白为什么我会使用AE而不是CF?
如果我理解正确,这两个服务的整个概念都是构建“微服务架构”。
- CF和AE都是无状态的
- 两者都应在有限的时间内执行
- 两者都可以与数据库和其他GCP API交互。
尽管如此,AE必须包装进自己的服务器。基本上,它利用了与CF相同的功能的许多复杂性。那么,在什么情况下我应该使用AE而不是CF?
抱歉,如果这是一个幼稚的问题,但我看了很多谷歌员工的演讲,仍然不明白为什么我会使用AE而不是CF?
如果我理解正确,这两个服务的整个概念都是构建“微服务架构”。
尽管如此,AE必须包装进自己的服务器。基本上,它利用了与CF相同的功能的许多复杂性。那么,在什么情况下我应该使用AE而不是CF?
云函数(Cloud Functions,CFs)和Google应用引擎(Google App Engine,GAE)是不同的工具,用于不同的任务。在做任何工作时使用正确的工具通常是个好主意。
用钳子敲钉子也许是可能的,但不如使用锤子方便。同样地,使用CFs构建复杂的应用程序也许是可能的,但使用GAE来构建肯定会更方便。
与GAE相比,CFs有几个劣势(当然是在构建更复杂的应用程序的情况下):
memcached
。ndb
客户端库访问数据存储(仅适用于标准环境的GAE Python应用程序)可能比使用通用数据存储客户端库更加高效/性能。App Engine 更适合那些拥有许多功能、以各种相互关联(甚至无关)方式运行的应用程序,而云函数则更专注于响应某些事件并执行某些特定操作的单一用途函数。
App Engine 提供了多种语言和更多的管理选项,而云函数在这些领域受到限制。
你可以轻松地在 App Engine 上复制 Cloud Functions,但是使用一堆离散的 Cloud Functions 复制大规模的 App Engine 应用程序将会很复杂。例如,Spotify 的后端基于 App Engine。
换句话说,对于一个显著庞大的应用程序来说,从更复杂的系统像 App Engine 开始可以导致代码库不太复杂,或者至少更容易管理或理解。
最终,这两者都在 Google 的类似基础设施上运行,取决于你决定哪个适合手头的任务。此外,没有什么阻止你在单个项目中混合使用两者的元素。
Google Cloud Functions是简单的、单一目的的函数,它们在观察事件时被触发。
这些函数将消除构建自己的应用程序服务器来处理轻量级API的需要。
主要用例:
App Engine旨在在完全托管的无服务器平台上构建高度可扩展的应用程序。它将帮助您更多地关注代码。基础架构和安全性将由AE提供。
它将支持许多流行的编程语言。您可以通过提供Docker容器将任何框架带到应用程序引擎。
用例:
现代Web应用程序,可以通过零配置部署和零服务器管理快速接触客户。正如@Cameron所指出的,云函数的主要区别在于可靠地响应事件。例如,如果您想在云存储桶中的更改上执行脚本,则有专用的云函数触发器。在GAE中复制此逻辑将更加繁琐。Firestore集合更改也是如此。
此外,GAE的B机器(基本或手动缩放的后端机器)具有方便的长时间运行时间,最长可达24小时。云函数目前仅运行9分钟。此外,GAE允许您将cron作业封装为应用程序代码旁边的yaml文件。这使得开发服务器少的事件驱动服务更加清洁。
当然,其他答案比我的更好地涵盖了这些方面。但我想指出云函数的主要优势是触发选项。如果您希望函数或服务彼此通信,则GAE可能是更好的选择。
由于Cloud Functions和App Engine都是无服务器服务,这是我的感觉。
对于微服务 - 我们可以选择CF或App Engine。我更喜欢CF。
对于单体应用程序 - App Engine非常适合。