Serverless Computing can be seen as a natural extension of Microservices Architecture that brought us smaller units (smaller footprint) and it provides a new level of Tenant consumption to resource consumption (and costs) alignment.
The Manifesto1
- Function is the unit of deployment and scaling.
- No machines, VMs, or containers visible in the programming model.
- Permanent storage lives elsewhere (SLE)
- Scales per request; Users cannot over-or under-provision capacity.
- Never pay for idle (no cold servers/containers or their costs).
- Implicitly fault-tolerant because functions can run anywhere.
- Bring Your Own Code (BYOC).
- Metrics and logging are a universal right.
As I learned from Reddit comments, something here needs explanation. BYOC meant literally. Any code you want to be run, with libraries you want. This is something we already learned from containers(Docker)
SLE means that a serverless function can’t and should not rely on the internal state of the serverless program (function). It also can’t just store something on disk, because FaaS can’t guarantee that it runs the function on the same machine next time. So SLE means that any state management between the function calls should no be part of a function (no state in memory, no writes to local disks). Application’s (persistent) state should be managed by other environments (“elsewhere”) e.g. Redis cluster, DB, AWS S3.