- weave application behavior together using 3rd party services (Backend as a Service) or code running on stateless ephemeral containers (Function as a service)
- client-side control flows and dynamic content generation replaces server-side controller
- ubiquotous applications (such as mobile or iot) coordinate interaction between the various services by making remote api calls
- generate dynamic content using client-side ui frameworks
- stateless application
- functional programming models
- major difference lies in the work between the controller and infrastructure
- long lived server-based, typically hosts an application code that implements certain business logic, performs required processing as long as the application stays alive
- short lived serverless, activates set of function(s) when a request arrives, process the request and becomes dormant as soon as the activity dies down. Here, application code lives in a managed environment (which handles code management, orchestration and scaling) such as aws lambda, openfaas, google cloud functionss, azure function, ibm openmix, apache openwhisk
- decrease in operational cost (per-request pricing)
- could be easier to operate and maintain
- shifts responsibility of scaling application and infrastructure (incl security, availability and performance) to 3rd party services
- huge dependencies on 3rd party services
- makes it harder to develop and test application locally due to huge dependencies on 3rd party services
- overhead of splitting a single app into fabric of services
- sometimes requires specialised skills
- might introduce unplanned latency