Serverless Computing
Someone Else's Servers
Tusa Viktor @ Xively
@talien
github.com/talien
Computational Unit
- Different aspects
	
- Business: What you pay for
		
- Unit: $
 
 - Developer: What your program use
		
- Unit: CPU/Memory/Time
 
 - Ops: What you manage
		
- Number of servers/databases/log lines/metrics
 
 
 - Business: What you pay for
		
 
History
- Mainframes
	
- Time-shared usage
 - Not easy to extend capacity
 
 - PCs/Data Centers
	
- Roles are separated on different servers
 - Monolith applications
 - Easier to extend capacity
 
 - Virtualization/Containerization
	
- Fine-grained capacity on different apps
 - Still need to know the whole capacity
 
 - Public Cloud/IaaS/PaaS
	
- "Capacity is not my problem anymore"
 - Computational unit is still one container/server
 
 
Responsibilities
- Hardware management
	
- Data Center (on-premise)
 
 - OS management, patch management
	
- IaaS
 
 - App management
	
- PaaS
 
 
Serverless
- New computational model
 - Computational unit is 1 function call (Function-as-a-Service)
 - If no function call happens, nothing to pay for
 - Other category: Backend-as-a-Service, DB-as-a-Service
 
Function-as-a-Service
- Event driven architecture
 - Triggers + Functions
	
- Messages, Schedules, State changes
 
 - Billing unit: GB-seconds
 - Constraints:
	
- memory
 - execution time (5 min in Lambda)
 - parallelization
 
 - Stateless
 
Backend-as-a-Service
- 
Common aspects of application
	
- Authentication, Authorization, User tracking
 - eg: Auth0, Firebase
 
 - Heavily used in Mobile development
 - API driven
 - Easy to integrate
 
Serverless Systems
- AWS Lambda
	
- First amongst public clouds
 - Nicely integrates with other part of AWS
 
 - Azure Functions
	
- Very similar to AWS Lambda
 - Two "Consumption Plans"
 
 - Google Cloud Functions
	
- Still in Beta
 
 - OpenWhisk/IBM Bluemix
	
- Open source
 
 - Over kubernetes serverless:
	
- Funktion, Kubeless, Fission
 
 
Serverless Architectures
- Event-driven, "nanoservices"
 - Supports popular runtimes
	
- Java, NodeJs, Python, C#
 
 - IoT is main target
 - Events, Triggers
	
- HTTP triggers
		
- eg.: AWS API Gateway
 
 - Pub/Sub triggers
 - Message queue triggers
 - State changes
		
- Uploaded file to blob storage
 
 - Scheduled events ("cloud cron")
 
 - HTTP triggers
		
 
Serverless Cons
- Not easy to estimate costs upfront
 - Can be expensive
	
- 3mill req, each 1 sec, 512 MB memory
 - AWS: 15$, Azure: 20$
 - smallest instance: 5$/month both in Azure/AWS
 
 - "Cold start"
	
- First call after idle time is slow
 
 - Function initialization is not deterministic
 
Serverless Cons #2
- Patching is not in our hand (fixed runtimes)
 - No service discovery
 - Cannot attach debugger
	
- More logging needed
 
 - Hard to test locally
	
- AWS SAM Local
 - Azure Functions Runtime
 
 
Serverless Framework
- Formerly JAWS,
 - First framework to utilize AWS Lambda/API GW
 - CLI written in node
 - Support major serverless platforms
	
- AWS
 - Azure
 - Google Cloud
 - OpenWhisk
 
 
Bottom Line
- Lot of Cons, but what are the pros?
 - Very easy to deploy
 - Ideal for prototyping
 - No need for classic ops (patch management, software install & config, ssh, etc).
 - Free tier can handle small websites
 - Use cases:
	
- Event driven architecture
 - IoT
 - Automation
 
 
The End!
Thank you!
Serverless computing
By Tusa Viktor
Serverless computing
- 1,508