79

Sorry, if this is a naive question, but i've watched bunch of talks from google's staff and still don't understand why on earth i would use AE instead of CF?

If i understood it correctly, the whole concept of both of these services is to build "microservice architecture".

  • both CF and AE are stateless
  • both suppose to execute during limited period of time
  • both can interact with dbs and other gcp apis.

Though, AE must be wrapped into own server. Basically it utilizes a lot of complexities on top of the same capabilities as CF. So, when should i use it instead of CF?

stkvtflw
  • 9,002
  • 19
  • 50
  • 110

3 Answers3

91

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
    • the handling code is (most of the time) already loaded, CFs' code still needs to be loaded. Not to sure about this one, tho, I guess it depends on the underlying implementation.
Dondi
  • 2,288
  • 1
  • 8
  • 13
Dan Cornilescu
  • 37,297
  • 11
  • 54
  • 89
23

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.

Cameron Roberts
  • 6,403
  • 1
  • 14
  • 27
  • 4
    Spotify example is misleading: it's developed before CF was introduced. – stkvtflw Nov 01 '17 at 16:38
  • I still think it serves as a good example of a complex application better suited to App Engine than Cloud Functions, because it requires things like session management and consists of many individual components presented as a cohesive application. – Cameron Roberts Nov 01 '17 at 16:46
  • Can't i create "inter-related" CF? i'm pretty sure there is no problems with that. If i understood it correctly the rest of your answer says that AE more complex than CF - i understand that, but i don't see any benefits in this. – stkvtflw Nov 01 '17 at 16:47
  • 1
    again, AE suppose to be stateless, so i don't understand how does it help to manage session? – stkvtflw Nov 01 '17 at 16:48
  • Well depending on how you look at it all web based services are inherently "stateless", that doesn't mean they aren't tailored for certain tasks more than others. I have not said App Engine is more complex (although it may be seen that way), I'm saying it's better suited for supporting complex applications, there is a big difference there. – Cameron Roberts Nov 01 '17 at 16:53
  • Thank you, Cameron! i think i understand what you mean, i just don't see how exactly "it's better suited for supporting complex applications". – stkvtflw Nov 01 '17 at 17:16
  • 1
    I'm trying to think of how to put it more clearly, but the reality is it's difficult because you are right in thinking you can ultimately use either of them to do similar jobs. I think the best way to put it is that sometimes having a more complex system (AE) to build a big project on means the overall application ends up being less complex than it would on a simpler system (CF). – Cameron Roberts Nov 01 '17 at 17:22
  • I think another way of putting it - CF are more basic building blocks and AE is a more advanced framework with more out-of-the-box capabilities, so you could either implement with the small building blocks or with the more comprehensive solution. – Amit Bens May 17 '18 at 11:41
  • Is there a way to 'quantify' this? Say I have an express app that manages 8 db models and handles 20 different endpoints, would app engine or cloud functions be a better suit? – Sventies Sep 24 '20 at 12:47
-2

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.