what is a cloud-native application? of cloud-native applications. ... find the seams; use good sdlc...
TRANSCRIPT
1
What is a Cloud-Native Application?
2
SafetySpeed Scale
Then
Now
Big design up front
Large, infrequent releases
Infrequent validation
Over-engineering
Emergent design
Continuous releases
Constant feedback
Build only what you need
Heavyweight process
Segregation of duties
Tight change control
Uptime SLAs
Lightweight process
Collaboration and self-service
User validation and application visibility
Assumed failure
Buy bigger servers
Plan for peak usage
In-memory state
Add more servers
Add capacity when it’s needed
Stateless applications
3
CONTINUOUS Builds, test, and package your
software continuously. Always be shipping.
API FIRST Establish clear contracts between services before developing any
application code.
MICROSERVICES Loosely couple services.
Built by small teams. Fit to your domain.
ANTI-FRAGILE There will be failures.
Your system shouldn't be one of them.
12-FACTOR Principles and patterns for
applications running on a modern platform.
SELF-SERVICE Developers can request and
provision services automatically. An API for every dependency.
Characteristics of Cloud-Native Applications
API-First Development
4
• Defines the contract for each service before its is built
• Sets clear expectations
• Enables test-first at the services level
• Allows you to work with stakeholders BEFORE you have working software
• Enables multiple channels from the beginning
• Prevents dependencies between teams
Anti-Fragility and Design For Failure
5
• You can’t avoid failure…prepare for it
– Your system should get stronger when subjected to failures
• Cloud providers don’t guarantee anything
• Assume a fragile infrastructure
• Handle failures gracefully
• Simulate failures in production
Twelve-Factor Applications
6
I. One Codebase, One App*
II. Dependency Management*
V. Build, Release, Run*
III. Configuration*
XI. Logs*
IX. Disposability
IV. Backing Services
X. Environmental Parity*
XII. Administrative Process
VII. Port Binding*
VI. Process
VIII. Concurrency
VALUE & APPROACH= Time to Market; find the seams; use good SDLC practices
= Dev Productivity; standardize & remove surprises
= Release Mgmt Hygiene; use CI/CD automation /w PCF
= Release Mgmt Hygiene; move to environment vars
= Real-Time Metrics; use PCF features; stdout / stderr
= Auto-Scale; move slow processes to backing services
= Resiliency / Agility; use circuit breaker; loose binding
= Reliability; use well architected PCF, get parity
= Reliability; move to backing service(s), expose as REST
= Ops Efficiency; use PCF features like routing, scaling, etc.
= Cloud Compatibility; move state to backing service(s)
= Auto-Scale, ZDD; design for cloud, use PCF features
Continuous Delivery
7
• You’re doing continuous delivery when:
– Your software is deployable throughout its lifecycle
– Your team prioritizes keeping the software deployable over working on new features
– Anybody can get fast, automated feedback on the production readiness of their systems any time somebody makes a change to them
– You can perform push-button deployments of any version of the software to any environment on demand
Martin Fowler, May 2013
Microservices
8
MicroserviceMicroservice
MicroserviceMicroservice
MicroserviceMicroservice
Microservice
A
MicroserviceMicroservice
Microservice
B
C
MicroserviceMicroservice
E
MicroserviceMicroservice
Microservice
D
MicroserviceMicroservice
Microservice
H
MicroserviceMicroservice
MicroserviceMicroservice
G
MicroserviceMicroservice
F
Independently scalable
First-in First-out (FIFO) Queue
Publish-Subscribe (Pub-Sub)
Queue
Multiple messaging paradigms
Independent state
Explicitly defined contracts
Built by small, independent, and cross-functional teams
No deployment dependencies
Designed and implemented for a single business domain
Self-Service Infrastructure
9
• Code running on dedicated disposable infrastructure
• Services developers can request and provision automatically
• Automated and on-demand scaling of application instances
• Application health management
• Dynamic routing and load balancing of requests to and across application instances
• Aggregation of logs and metrics
Cloud Native Framework
Application Framework
Runtime Platform
Infrastructure Automation
Infrastructure