Design Patterns for Scalable
APIs Based on Docker
@stoitsev
docker run ufaldsg/cloud-asr-api
https://www.dockerbook.com/
Class
Object
Image
Container
Map/Reduce
https://www.usenix.org/node/196347
Single-node, multi-container
Application patterns
Sidecar
Web server Log server
File System
Sidecar
Application Instance
Translations
Downloader
File System
Resource Isolation
Separate development
Easy and flexible composition
Failure containment
Ambassador
Web Server Ambasador
External App
External App
External App
Ambassador
Application Hyperbahn Instance
Hyperbahn Instance
Hyperbahn Instance
Hyperbahn Instance
https://github.com/uber-archive/hyperbahn
Easy to reason about
Easy to test
Reusable
Adapter
Application Monitoring Adapter
Centralized
monitoring system
Multi-node application patterns
Leader election
App
Leader
election
container
App
Leader
election
container
App
Leader
election
container
App
Leader
election
container
Simplifies the problem
Easy testing
Work queue
Worker
Work
Execution
Worker
Work
Execution
Work Coordinator
Simplification
Scatter/gather
Merge
Execution
Work
Execution
Work
Execution
Root
Work
Execution
Idempotent
Pure
Composable
http://eng.uber.com/
Thanks