when developers operate and operators develop
TRANSCRIPT
When developers operate, and operators develop…
Adrian Cockcroft @adrianco Technology Fellow - Battery Ventures
June 2015
Security Blanket Failure
Insecure applications hidden behind firewalls make you feel safe until the breach happens…
http://peanuts.wikia.com/wiki/Linus'_security_blanket
Observe
Orient
Decide
Act
Land grab opportunity Competitive
Move
Customer Pain Point
Measure Customers
Continuous Delivery
Observe
Orient
Decide
Act
Land grab opportunity Competitive
Move
Customer Pain Point
INNOVATION
Measure Customers
Continuous Delivery
Observe
Orient
Decide
Act
Land grab opportunity Competitive
Move
Customer Pain Point
Analysis
Model Hypotheses
INNOVATION
Measure Customers
Continuous Delivery
Observe
Orient
Decide
Act
Land grab opportunity Competitive
Move
Customer Pain Point
Analysis
Model Hypotheses
BIG DATA
INNOVATION
Measure Customers
Continuous Delivery
Observe
Orient
Decide
Act
Land grab opportunity Competitive
Move
Customer Pain Point
Analysis
JFDI
Plan Response
Share Plans
Model Hypotheses
BIG DATA
INNOVATION
Measure Customers
Continuous Delivery
Observe
Orient
Decide
Act
Land grab opportunity Competitive
Move
Customer Pain Point
Analysis
JFDI
Plan Response
Share Plans
Model Hypotheses
BIG DATA
INNOVATION
CULTURE
Measure Customers
Continuous Delivery
Observe
Orient
Decide
Act
Land grab opportunity Competitive
Move
Customer Pain Point
Analysis
JFDI
Plan Response
Share Plans
Incremental Features
Automatic Deploy
Launch AB Test
Model Hypotheses
BIG DATA
INNOVATION
CULTURE
Measure Customers
Continuous Delivery
Observe
Orient
Decide
Act
Land grab opportunity Competitive
Move
Customer Pain Point
Analysis
JFDI
Plan Response
Share Plans
Incremental Features
Automatic Deploy
Launch AB Test
Model Hypotheses
BIG DATA
INNOVATION
CULTURE
CLOUD
Measure Customers
Continuous Delivery
Observe
Orient
Decide
Act
Land grab opportunity Competitive
Move
Customer Pain Point
Analysis
JFDI
Plan Response
Share Plans
Incremental Features
Automatic Deploy
Launch AB Test
Model Hypotheses
BIG DATA
INNOVATION
CULTURE
CLOUD
Measure Customers
Continuous Delivery
Observe
Orient
Decide
Act
Land grab opportunity Competitive
Move
Customer Pain Point
Analysis
JFDI
Plan Response
Share Plans
Incremental Features
Automatic Deploy
Launch AB Test
Model Hypotheses
BIG DATA
INNOVATION
CULTURE
CLOUD
Measure Customers
Continuous Delivery
Breaking Down the SILOs
QA DBA Sys Adm
Net Adm
SAN AdmDevUXProd
Mgr
Product Team Using Monolithic DeliveryProduct Team Using Monolithic Delivery
Breaking Down the SILOs
QA DBA Sys Adm
Net Adm
SAN AdmDevUXProd
MgrProduct Team Using Microservices
Product Team Using Monolithic Delivery
Product Team Using Microservices
Product Team Using Microservices
Product Team Using Monolithic Delivery
Breaking Down the SILOs
QA DBA Sys Adm
Net Adm
SAN AdmDevUXProd
MgrProduct Team Using Microservices
Product Team Using Monolithic Delivery
Platform TeamProduct Team Using Microservices
Product Team Using Microservices
Product Team Using Monolithic Delivery
Breaking Down the SILOs
QA DBA Sys Adm
Net Adm
SAN AdmDevUXProd
MgrProduct Team Using Microservices
Product Team Using Monolithic Delivery
Platform TeamA P IProduct Team Using Microservices
Product Team Using Microservices
Product Team Using Monolithic Delivery
Breaking Down the SILOs
QA DBA Sys Adm
Net Adm
SAN AdmDevUXProd
MgrProduct Team Using Microservices
Product Team Using Monolithic Delivery
Platform Team
DevOps is a Re-Org!
A P IProduct Team Using Microservices
Product Team Using Microservices
Product Team Using Monolithic Delivery
Release Plan
Developer
Developer
Developer
Developer
Developer
QA Release Integration
Ops Replace Old With New
Release
Monolithic service updates
Works well with a small number of developers and a single language like php, java or ruby
Release Plan
Developer
Developer
Developer
Developer
Developer
QA Release Integration
Ops Replace Old With New
Release
Bugs
Monolithic service updates
Works well with a small number of developers and a single language like php, java or ruby
Release Plan
Developer
Developer
Developer
Developer
Developer
QA Release Integration
Ops Replace Old With New
Release
Bugs
Bugs
Monolithic service updates
Works well with a small number of developers and a single language like php, java or ruby
Use monolithic apps for small teams, simple systems and when you must, to optimize for efficiency and latency
Developer
Developer
Developer
Developer
Developer
Old Release Still Running
Release Plan
Release Plan
Release Plan
Release Plan
Immutable microservice deployment scales, is faster with large teams and diverse platform components
Developer
Developer
Developer
Developer
Developer
Old Release Still Running
Release Plan
Release Plan
Release Plan
Release Plan
Deploy Feature to Production
Deploy Feature to Production
Deploy Feature to Production
Deploy Feature to Production
Immutable microservice deployment scales, is faster with large teams and diverse platform components
Developer
Developer
Developer
Developer
Developer
Old Release Still Running
Release Plan
Release Plan
Release Plan
Release Plan
Deploy Feature to Production
Deploy Feature to Production
Deploy Feature to Production
Deploy Feature to Production
Bugs
Immutable microservice deployment scales, is faster with large teams and diverse platform components
Developer
Developer
Developer
Developer
Developer
Old Release Still Running
Release Plan
Release Plan
Release Plan
Release Plan
Deploy Feature to Production
Deploy Feature to Production
Deploy Feature to Production
Deploy Feature to Production
Bugs
Deploy Feature to Production
Immutable microservice deployment scales, is faster with large teams and diverse platform components
Developer Developer
Run What You Wrote
Micro service
Micro service
Micro service
Micro service
Micro service
Micro service
Micro service
Developer Developer
Developer Developer
Run What You Wrote
Micro service
Micro service
Micro service
Micro service
Micro service
Micro service
Micro service
Developer Developer
Monitoring Tools
DeveloperDeveloper Developer
Run What You Wrote
Micro service
Micro service
Micro service
Micro service
Micro service
Micro service
Micro service
Developer Developer
Monitoring Tools
DeveloperDeveloper Developer
Run What You Wrote
Micro service
Micro service
Micro service
Micro service
Micro service
Micro service
Micro service
Developer Developer
Site Reliability
Monitoring Tools
Availability Metrics
99.95% customer success rate
DeveloperDeveloper Developer
Run What You Wrote
Micro service
Micro service
Micro service
Micro service
Micro service
Micro service
Micro service
Developer Developer
Manager Manager
Site Reliability
Monitoring Tools
Availability Metrics
99.95% customer success rate
DeveloperDeveloper Developer
Run What You Wrote
Micro service
Micro service
Micro service
Micro service
Micro service
Micro service
Micro service
Developer Developer
Manager Manager
VP Engineering
Site Reliability
Monitoring Tools
Availability Metrics
99.95% customer success rate
Low Cost of Change Using Docker
Developers • Compile/Build • Seconds
Extend container • Package dependencies • Seconds
PaaS deploy Container • Docker startup • Seconds
Low Cost of Change Using Docker
Fast tooling supports continuous delivery of many tiny changes
Developers • Compile/Build • Seconds
Extend container • Package dependencies • Seconds
PaaS deploy Container • Docker startup • Seconds
A Microservice Definition
Loosely coupled service oriented architecture with bounded contexts
If every service has to be updated at the same time it’s not loosely coupled
A Microservice Definition
Loosely coupled service oriented architecture with bounded contexts
If every service has to be updated at the same time it’s not loosely coupled
If you have to know too much about surrounding services you don’t have a bounded context. See the Domain Driven Design book by Eric Evans.
Coupling Concerns
http://en.wikipedia.org/wiki/Conway's_law
●Conway’s Law - organizational coupling
●Centralized Database Schemas
●Enterprise Service Bus - centralized message queues
●Inflexible Protocol Versioning
Speeding Up Deployments
Datacenter Snowflakes • Deploy in months • Live for years
Virtualized and Cloud • Deploy in minutes • Live for weeks
Speeding Up Deployments
Datacenter Snowflakes • Deploy in months • Live for years
Virtualized and Cloud • Deploy in minutes • Live for weeks
Container Deployments • Deploy in seconds • Live for minutes/hours
Speeding Up Deployments
Datacenter Snowflakes • Deploy in months • Live for years
Virtualized and Cloud • Deploy in minutes • Live for weeks
Container Deployments • Deploy in seconds • Live for minutes/hours
AWS Lambda Events • Respond in milliseconds • Live for seconds
Speeding Up Deployments
Measuring CPU usage once a minute makes no sense for containers… Coping with rate of change is the first challenge for monitoring tools.
Datacenter Snowflakes • Deploy in months • Live for years
Virtualized and Cloud • Deploy in minutes • Live for weeks
Container Deployments • Deploy in seconds • Live for minutes/hours
AWS Lambda Events • Respond in milliseconds • Live for seconds
A Possible Hierarchy Continents
Regions Zones
Services Versions
Containers Instances
How Many? 3 to 5
2-4 per Continent 1-5 per Region 100’s per Zone
Many per Service 1000’s per Version
10,000’s
It’s much more challenging than just a large number of
machines
But interesting architectures have a lot of microservices! Flow visualization is
a big challenge.
See http://www.slideshare.net/LappleApple/gilt-from-monolith-ruby-app-to-micro-service-scala-service-architecture
ELB Load Balancer
Zuul API Proxy
Karyon Business Logic
Staash Data Access Layer
Priam Cassandra Datastore
Simple NetflixOSS style microservices architecture on three AWS Availability Zones
ELB Load Balancer
Zuul API Proxy
Karyon Business Logic
Staash Data Access Layer
Priam Cassandra Datastore
Simple NetflixOSS style microservices architecture on three AWS Availability Zones
ELB Load Balancer
Zuul API Proxy
Karyon Business Logic
Staash Data Access Layer
Priam Cassandra Datastore
Simple NetflixOSS style microservices architecture on three AWS Availability Zones
Zone partition/failure What should you do? What should monitors show?
ELB Load Balancer
Zuul API Proxy
Karyon Business Logic
Staash Data Access Layer
Priam Cassandra Datastore
Simple NetflixOSS style microservices architecture on three AWS Availability Zones
Zone partition/failure What should you do? What should monitors show?
By design, everything works with 2 of 3 zones running. This is not an outage, inform but don’t touch anything! Halt deployments perhaps?
ELB Load Balancer
Zuul API Proxy
Karyon Business Logic
Staash Data Access Layer
Priam Cassandra Datastore
Simple NetflixOSS style microservices architecture on three AWS Availability Zones
Zone partition/failure What should you do? What should monitors show?
By design, everything works with 2 of 3 zones running. This is not an outage, inform but don’t touch anything! Halt deployments perhaps?
Challenge: understand and communicate common microservice failure patterns.
Simulated Microservices
Model and visualize microservices Simulate interesting architectures Generate large scale configurations Eventually stress test real tools
See github.com/adrianco/spigo Simulate Protocol Interactions in Go Visualize with D3
ELB Load Balancer
Zuul API Proxy
Karyon Business Logic
Staash Data Access Layer
Priam Cassandra Datastore
Three Availability Zones
Definition of an architecture
{ "arch": "netflixoss", "description":"A very simple Netflix service. See http://netflix.github.io/ to decode the package names", "version": "arch-0.0", "victim": "homepage", "services": [ { "name": "cassSubscriber", "package": "priamCassandra", "count": 6, "regions": 1, "dependencies": ["cassSubscriber", "eureka"]}, { "name": "evcacheSubscriber","package": "store", "count": 3, "regions": 1, "dependencies": []}, { "name": "subscriber", "package": "staash", "count": 6, "regions": 1, "dependencies": ["cassSubscriber", "evcacheSubscriber"]}, { "name": "login", "package": "karyon", "count": 18, "regions": 1, "dependencies": ["subscriber"]}, { "name": "homepage", "package": "karyon", "count": 24, "regions": 1, "dependencies": ["subscriber"]}, { "name": "wwwproxy", "package": "zuul", "count": 6, "regions": 1, "dependencies": ["login", "homepage"]}, { "name": "www-elb", "package": "elb", "count": 0, "regions": 1, "dependencies": ["wwwproxy"]}, { "name": "www", "package": "denominator", "count": 0, "regions": 0, "dependencies": ["www-elb"]} ] }
Header includes chaos monkey victim
New tier name
Tier package
Region count: 1
Node count
List of tier dependencies
Why Build Spigo/Simianviz?
Generate test microservice configurations at scale Stress monitoring tools display capabilities
Eventually (i.e. not implemented yet) Dynamically vary configuration: autoscale, code push Chaos monkey for microservice, zone, region failures D3 websocket dynamic browser interface
Any Questions?
Disclosure: some of the companies mentioned may be Battery Ventures Portfolio Companies See www.battery.com for a list of portfolio investments
● Battery Ventures http://www.battery.com ● Adrian’s Tweets @adrianco and Blog http://perfcap.blogspot.com ● Slideshare http://slideshare.com/adriancockcroft
● Monitorama Opening Keynote Portland OR - May 7th, 2014 ● GOTO Chicago Opening Keynote May 20th, 2014 ● Qcon New York – Speed and Scale - June 11th, 2014 ● Structure - Cloud Trends - San Francisco - June 19th, 2014 ● GOTO Copenhagen/Aarhus – Fast Delivery - Denmark – Sept 25th, 2014 ● DevOps Enterprise Summit - San Francisco - Oct 21-23rd, 2014 #DOES14 ● GOTO Berlin - Migrating to Microservices - Germany - Nov 6th, 2014 ● AWS Re:Invent - Cloud Native Cost Optimization - Las Vegas - November 14th, 2014 ● O’Reilly Software Architecture Conference - Fast Delivery, Monitoring Challenge - Boston March 16th 2015
Security
Visit http://www.battery.com/our-companies/ for a full list of all portfolio companies in which all Battery Funds have invested.
Palo Alto Networks
Enterprise IT
Operations & Management
Big DataCompute
Networking
Storage