3. Common Cloud Problems
Not respecting underlying environment
Lack of application/platform monitoring
Difficulty in understanding the new architecture
Confusion over environment provisioning and config
Not testing in the cloud
Difficulty in designing for cloud infrastructure failure modes
4. DHARMA Principles
Documented (just enough)
Highly cohesive/loosely coupled (all the way down)
Automated from commit to cloud
Resource aware
Monitored thoroughly
Antifragile
5. Documented (just enough)
Component description responsibilities
Component initialization instructions
Profiles available (i.e., modes of operation)
Component external interactions (i.e., collaborations)
State characteristics (i.e., stateless, mandatory sticky- sessions)
Data store and cache interactions (in/out of process, eviction policy, etc.)
API documentation (e.g. Swagger, Thrift IDL, etc.)
Failure modes of component
Developer highlights (i.e. classes of interest)
Decision log (core architectural changes)
6. Highly cohesive/loosely coupled (all the way down)
Using cloud design patterns / principles (12factor app)
Clean code
Cloud Architecture guidelines
Analyze and identify potential cloud mismatch area
7. Automated from commit to cloud
Continues Integration
Continues Deployment
Continues Delivery
Tools
Jenkin, Chef, Puppet, Zookeeper
Docker, Packer , Vagrant
Test Automation – Selenium
Many more…..
8. Resource aware
“everything fails all the time in the cloud.” - Werner Vogels, CTO of Amazon
Every infrastructure resource must be treated as transient and volatile
Noisy neighbors
Skills required
Deep understanding of virtualization
Good understanding of computer networks
Good knowledge of caching—Reverse proxies, distributed caches, and CDNs
Linux skills / Diagnostics skills
10. Antifragile
“Some things benefit from shocks; they thrive and grow when exposed to volatility, randomness, disorder, and
stressors and love adventure, risk, and uncertainty.”
- Antifragile: Things That Gain From Disorder is a book by Nassim Nicholas Taleb
Software must clearly be designed to handle the “fragile” nature of the underlying infrastructure.
Applications must go further than being robust, they must be “antifragile.
Cloud- native software must be created using fault-tolerant design patterns such as timeouts, retries,
bulkheads, and circuit breakers etc
Antifragile Software Design / Patterns .. http://antifragile.design/
11. Assignments
List 5 basic Linux networking commands
Design Patterns
List Antifragile Patterns
Reverse Proxy
Distributed Caching frameworks
Monitoring tools