continuous delivery, devops, cloud - new requirements for new architectures
TRANSCRIPT
Continuous Delivery, DevOps, Cloud
- New Requirements for New Architectures
Eberhard Wolff Fellow, innoQ
@ewolff
http://microservices-buch.de/ http://microservices-book.com/
Architecture?
Modularization
Quality Attributes
Scenario“SupportDifferentMobile
platform”
Scenario“Search
faster than 5s”
Efficency Latency
Cost
Security
Data privacy
Secrecy
Integrity
Maintainability Understandability
Changeability
Portability Changeability
Availability
User error
Hardware failure
Recovery time
Usability Time to learn
Know the needed quality attributes!
Find technical solutions for them!
ECommerce
Order Customer
Delivery
Ca. 100developers
QA Operations
Software modules How totest?
ManualHandover
ManualHandover
How tooperate?Scalability
Availability
Changeability
Architecture
Continuous Delivery (CD)
Continuous Delivery (CD) Pipeline
> Better Time-to-Market
> Reproducible tests and deployments
> More tests
> Deployment = natural part of the process
Commit Stage
Automated Acceptance
Testing
Automated Capacity Testing
Manual Explorative
Testing Release
Software more reliable and easier to
change.
ECommerce
Order Customer
Delivery
Ca. 100developers
QA Operations
Software modules How totest?
ManualHandover
ManualHandover
How tooperate?
Architecture
Scalability
Availability
Changeability
ContinuousDelivery
That will never work with my (legacy)
system! Was it built with CD in
mind?
Quality Attributes for Continuous Delivery
> Simple Deployment
> …simplifies automation
> Easy testing
> …for acceptance tests, too
> ...probably API, not UI-based
> Hexagonal Architecture: Tests = another client
Quality Attributes for Continuous Delivery
> Make deployment less risky
> Resilience
> i.e. failure of one module should not make other modules fail
> Bulkhead
Continuous Delivery > Supports Quality Attributes
> Changeability
> Demand Quality Attributes
> Simple Deployment
> Good testability
> Resilience
Size Matters!
> Large applications hard to deploy
> Hard to test
> Lots of regression testing
> Hard to roll back / safeguard deployments
Small and independent
deployment units Microservices
Microservices solve all problems?
> Probably not
> But: Software Architecture was about modules and development
> It should be about testing, deployment and operations, too!
ECommerce
Order Customer
Delivery
Ca. 100developers
QA Operations
Software modules How totest?
ManualHandover
ManualHandover
How tooperate?Scalability
Availability
Changeability
ECommerce
Order Customer
Delivery
Ca. 100developers
QA Operations
Software modules How totest?
How tooperate?
Architecture
Scalability
Availability
Changeability
ContinuousDelivery
Need different skill set
DevOps=
DevOps= Development +
Operations collaborate
ECommerce
Order Customer
Delivery
Ca. 100developers
QA Operations
JVM ClassLoader App Server
No visibility in production
App-specific metrics
KernelI/Os
CPU
Monitoring, alarms
DevOps Architecture
> Broadens scope of architecture
> What are relevant metrics? App or OS
> How to monitor?
> Alarm if?
> Provide access to full team
Cloud
Cloud…
> …is an inexpensive environment for applications
> …in particular for elastic scaling
Efficency Latency
Cost
Security
Data privacy
Secrecy
Integrity
Maintainability Understandability
Changeability
Portabiity Changeability
Availability
User error
Hardware failure
Recovery time
Usability Time to learn
Cloud…
> …is an inexpensive environment for applications
> …in particular for elastic scaline
Why Did Amazon Build a Cloud?
Significant investment
No enterprise grade free virtualization
Cost?
Optimize resource utilization?
Lots of server used only for the holiday
season.
Lots of server used only for the holiday
season.
Developers spent more time on scaling
than on features.
Cloud = universal scalable
infrastructure
ECommerce
Order Customer
Delivery
Ca. 100developers
QA Operations
Software modules How totest?
How tooperate?
Architecture
Scalability
Availability
Changeability
ContinuousDelivery
Scaling
> Traditional: Architecture will solve it
> Cloud: Start more server
> …if load increases
> Pay-as-you-go
Scaling
> Traditional: Architecture enables scaling
> There will be bottlenecks
> But: Hard to know bottleneck
> Monitoring to identify bottleneck
> Continuous Delivery to deploy fixes for bottleneck
ECommerce
Order Customer
Delivery
Ca. 100developers
QA Operations
Software modules How totest?
How tooperate?
Architecture
Scalability
Availability
Changeability
ContinuousDelivery
There is more to Cloud…
Oracle instance = One click
Why should a Software Engineer
care??
Cloud = Components
Instagram > Global photo sharing
> S3 storage
> Cloudfront Content Delivery Network
> Custom code
> 3 engineers (Dev and Ops)
> 10 mio user
> 100 mio photos
Efficency Latency
Cost
Security
Data privacy
Secrecy
Integrity
Maintainability Understandability
Changeability
Portabiity Changeability
Availability
User error
Hardware failure
Recovery time
Usability Time to learn
Enabler Continuous Delivery / DevOps
> Much easier deployment
> Create server, deploy software – via API
> Integrated Monitoring
All for free???
Amazon SLAs on One Slide
> If one of our data centers fails…
> Well, that’s your problem
> And we do reboot your server randomly.
#SRSLY?
Amazon SLAs on One Slide
> If a data center fails
> Well, that’s your problem
> And we do reboot your server randomly.
> But you can always start new servers
> …in other data centers
> ...or regions
Global redundancy across data centers
Efficency Latency
Cost
Security
Data privacy
Secrecy
Integrity
Maintainability Understandability
Changeability
Portabiity Changeability
Availability
User error
Hardware failure
Recovery time
Usability Time to learn
Dynamic Scaling & Availability
> Start more server
> …if servers crash
> Architecture must be stateless
> Servers must handle load from the beginning
Resilience
> Systems might reboot or crash
> …so client fail
> Deal with failure
The Cloud Paradox
> Unreliable hardware
> …and not too powerful hardware
> …are the ideal foundation for reliable & scalable software.
Deal with failure – don’t try to fight it.
Cloud > Supports Quality Attributes
> Scaling
> Time-to-Market
> Availability
> Demand Quality Attributes
> Resilience
Conclusion
Conclusion
> Know the desired quality attributes!
Know the desired quality attributes!
Conclusion
> Know the desired quality attributes!
> Continuous Delivery
> Demands smaller, easier to deploy units
> Demands testability
> Offers changeability
Conclusion
> DevOps enables CD architectures
> …brings other experts to the teams
> Scalability = Monitoring + fast deployment?
Conclusion
> Cloud: Scaling
> …and fast time-to-market
> ...and availability