什么时候应该选择 App Engine 而不是 Cloud 函数?

对不起,如果这是一个幼稚的问题,但我看了谷歌的工作人员的谈话,仍然不明白为什么在地球上我会使用 AE 而不是 CF?

如果我理解正确的话,这两个服务的整个概念就是构建“微服务架构”。

  • CF 和 AE 都是无状态的
  • 两者都应该在有限的时间内执行
  • 它们都可以与 dbs 和其他 gcp apis 交互。

但是,AE 必须包装到自己的服务器中。基本上,它利用了很多与 CF 相同的能力之上的复杂性。那么,什么时候我应该使用它而不是 CF 呢?

26022 次浏览

App Engine is better suited to applications, which have numerous pieces of functionality behaving in various inter-related (or even unrelated) ways, while cloud functions are more specifically single-purpose functions that respond to some event and perform some specific action.

App Engine offers numerous choices of language, and more management options, while cloud functions are limited in those areas.

You could easily replicate Cloud Functions on App Engine, but replicating a large scale App Engine application using a bunch of discrete Could Functions would be complicated. For example, the backend of Spotify is App Engine based.

Another way to put this is that for a significantly large application, starting with a more complex system like App Engine can lead to a codebase which is less complex, or at least, easier to manage or understand.

Ultimately these both run on similar underlying infrastructure at Google, and it's up to you to decide which one works for the task at hand. Furthermore, There is nothing stopping you from mixing elements of both in a single project.

Cloud Functions (CFs) and Google App Engine (GAE) are different tools for different jobs. Using the right tool for the job is usually a good idea.

Driving a nail using pliers might be possible, but it won't be as convenient as using a hammer. Similarly building a complex app using CFs might be possible, but building it using GAE would definitely be more convenient.

CFs have several disadvantages compared to GAE (in the context of building more complex applications, of course):

  • they're limited to Node.js, Python, Go, Java, .NET Core, and Ruby. GAE supports several other popular programming languages
  • they're really designed for lightweight, standalone pieces of functionality, attempting to build complex applications using such components quickly becomes "awkward". Yes, the inter-relationship context for every individual request must be restored on GAE just as well, only GAE benefits from more convenient means of doing that which aren't available on CFs. For example user session management, as discussed in other comments
  • GAE apps have an app context that survives across individual requests, CFs don't have that. Such context makes access to certain Google services more efficient/performant (or even plain possible) for GAE apps, but not for CFs. For example memcached.
  • the availability of the app context for GAE apps can support more efficient/performant client libraries for other services which can't operate on CFs. For example accessing the datastore using the ndb client library (only available for standard env GAE python apps) can be more efficient/performant than using the generic datastore client library.
  • GAE can be more cost effective as it's "wholesale" priced (based on instance-hours, regardless of how many requests a particular instance serves) compared to "retail" pricing of CFs (where each invocation is charged separately)
  • response times might be typically shorter for GAE apps than CFs since typically the app instance handling the request is already running, thus:
    • the GAE app context doesn't need to be loaded/restored, it's already available, CFs need to load/restore it
    • (most of the time) the handling code is already loaded; CFs' code still needs to be loaded. Not too sure about this one; I guess it depends on the underlying implementation.

As both Cloud Functions and App Engine are serverless services, this is what I feel.

For Microservices - We can go either with CF's or App Engine. I prefer CF's though.

For Monolithic Apps - App engine suits well.

Main differentiator as @Cameron points out, is that cloud functions reliably respond to events. E.g. if you want to execute a script on a change in a cloud storage bucket, there is a dedicated trigger for cloud functions. Replicating this logic would be much more cumbersome in GAE. Same for Firestore collection changes.

Additionally, GAE’s B-machines (backend machines for basic or manual scaling) have conveniently longer run times of up to 24 hours. Cloud functions currently only run for 9 minutes top. Further, GAE allows you to encapsulate cron jobs as yamls next to your application code. This makes developing a server less event driven service much more clean.

Of course, the other answers covered these aspects better than mine. But I wanted to point out the main advantages of Cloud Functions being the trigger options. If you want functions or services to communicate with each other, GAE is probably the better choice.

Google Cloud Functions are simple , single purpose functions which are fired while watching event(s).

These function will remove need to build your own application servers to handle light weight APIs.

Main use cases :

  1. Data processing / ETL : Listen and respond to Cloud Storage events, e.g. File created , changed or removed )
  2. Webhooks : Via a simple HTTP trigger, respond to events originating from 3rd party systems like GitHub)
  3. Lightweight APIs : Compose applications from lightweight, loosely coupled bits of logic
  4. Mobile backend: Listen and respond to events from Firebase Analytics, Realtime Database, Authentication, and Storage
  5. IoT: Thousands of devices streaming events and which in-turn calls google cloud functions to transform and store data

App Engine is meant for building highly scalable applications on a fully managed serverless platform. It will help you to focus more on code. Infrastructure and security will be provided by AE

It will support many popular programming languages. You can bring any framework to app engine by supplying docker container.

Use cases:

  1. Modern web application to quickly reach customers with zero config deployment and zero server management.

AE

  1. Scalable mobile backends : Seamless integration with Firebase provides an easy-to-use frontend mobile platform along with the scalable and reliable back end.

enter image description here

Refer to official documentation pages of Cloud functions and App Engine