Upload
ceposta
View
654
Download
1
Embed Size (px)
Citation preview
A Microservices Journey@christianposta
Christian PostaPrincipal Middleware Specialist/Architect
Twitter: @christianpostaBlog: http://blog.christianposta.comEmail: [email protected]
• Author “Microservices for Java developers”
• Committer on Apache Camel, Apache ActiveMQ, Fabric8, others
• Worked with large Microservices, web-scale, unicorn company
• Blogger, speaker about DevOps, integration, and microservices
Microservices Journey• Why? • Microservices Architectures• Cloud platforms with Kubernetes/OpenShift• Q & A
If change is happening on the outside faster than on the inside the end is in sight.
Jack Welch, former CEO, GE
S&P company life expectancy
Fortune 500 firms in 1955 vs. 2014; 88% are gone
We need to innovate, not just keep up.(Red Queen’s Race)
Source: Dave Gray, The Connected Company
Source: Dave Gray, The Connected Company
Value delivered through services, not mass production of product.
To deliver services which provide value,we need to listen and react. We needto deal with variety.
Software is eating the world.Marc Andreesen
IT as a core competency; a driverof business value
How to drive innovation and delivervalue through IT:• Decentralized decision making• Purpose driven• Innovation: Admit you don’t have all the
answers; figure out how to ask the right questions!
Characteristics of agile systems
• Small teams• Autonomy• Own their existence• Freedom + Responsibility• Purpose driven• Feedback/data driven• Simple rules, emergent results
People try to copy Netflix, but they can only copy what they see. They copy the results, not the process.
Adrian Cockcroft, former Chief Cloud Architect, Netflix
“Let there be no more talk about DevOpsunicorns or horses but only thoroughbredsand horses heading to the glue factory”
Dr. Branden Williams – business security specialist
Microservices Architectures
organizations which design systems ... are constrained to produce designs which are copies of the communication structures of these organizations
Melvin Conway
“The microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery.”
Martin Fowler’s definition
“Microservices is an architectural approach, that emphasizes the decomposition of applications into single-purpose, loosely coupled services managed by cross-functional teams, for delivering and maintaining complex software systems with the velocity and quality required by today’s digital business”
Red Hat’s definition
Break things down (organizations, teams, IT systems, etc) down into smaller pieces for greater parallelization and focus on reducing time to value.
• Single, self-contained, autonomous
• Isolated and Resilient to faults• Faster software delivery• Own their own data• Easier to understand
individually• Scalability• Right technology for the
problem• Test individual services• Individual deployments
What benefits of breaking this down?
Microservices is about optimizing… for speed.
Quick example
http://www.jboss.org/ticket-monster/
Microservices is about optimizing… for speed.
How do you go fast?
Shed dependencies!
How to shed dependencies?
Shedding dependencies• Team self service• Organize teams around a service• Teams own entire lifecycle (build, test,
deploy, debug, operate, maintain; you build it you run it)
• Teams communicate via APIs (or you’re fired!)
• Services own their own data• Boundaries establish a “bounded context”• Services communicate via promises• Make contracts explicit: contract evolution
as a first-class citizen
But we still have dependencies on other services!
We need boundaries
Domain Complexity
• Break things into smaller, understandable models
• Surround a model and its “context” with a boundary
• Implement the model in code or get a new model
• Explicitly map between different contexts
• Model transactional boundaries as aggregates
Services and teams make promises
Services make promises
• Health checking
• Autoscaling
• Self healing
• Circuit breakers
• Bulkheading
• Throttling/rate limiting
• Fallbacks
• Apologies
Services make promises
Consumer contracts?
Consumer contracts?
Consumer contracts?
{ "request" : { "url" : "/user/ceposta", "method" : ”GET”}, "response" : { "status" : 200, "body" : ([
“first”: “christian” “last”: 'posta' “twitter”: '@christianposta' ]),
"headers" : { "X-Application-Context" : "application:-1", "Content-Type" : "text/plain" } }}
• Have self-service infrastructure automation?
• Have self-service application automation?
• Have working CI/CD?• Have health checking, monitoring,
instrumentation?• Have logging, distributed tracing?• Able to release services independently?• Honoring backward and forward
compatibility?
Are you doing microservices?
• Maybe it doesn’t matter so much… What we really care about is speed, reduced time to value, and business outcomes.
• Maybe a data-driven approach is a better way to answer this question...
Are you doing microservices?
• Number of features accepted• % of features completed• User satisfaction• Feature Cycle time• defects discovered after deployment• customer lifetime value (future profit as a result of relationship with the
customer) https://en.wikipedia.org/wiki/Customer_lifetime_value• revenue per feature• mean time to recovery• % improvement in SLA• number of changes• number of user complaints, recommendations, suggestions• % favorable rating in surveys• % of users using which features• % reduction in error rates• avg number of tx / user• MANY MORE!
Are you doing microservices?
Are there any drawbacks?
• System complexity• Operational complexity• Testing is harder across services• Security • Hard to get boundaries right
(transactions, etc)• Resource overhead• Network overhead• Lack of tooling
Drawbacks to microservices
Microservices for Java Developers
• Simple configuration
• Curated dependencies and
transitive dependencies
• Built in metrics, monitoring
• Slim profile for deployment
(…micro even?)
#microprofile
Docker
• Distributed configuration
• Service Discovery
• Loadbalancing
• Circuit Breakers
• Bulkheading
• Versioning/Routing
• Based on AWS
What about non-java?
Kubernetes
Container cluster management
• Distributed configuration
• Service Discovery
• Loadbalancing
• Versioning/Routing
• Deployments
• Scaling/Autoscaling
• Liveness/Health checking
• Self healing
• Team self service application deployment• Developer workflow• Enterprise focused (LDAP, RBAC, Oauth,
etc)• Integrated Docker registry• Jenkins Pipeline out of the box• Build/deployment triggers• Software Defined Networking (SDN)• Docker native format/packaging• CLI/IDE/Web based tooling
OpenShift is Kubernetes
• Elasticity, resiliency, self-healing, autoscaling
• Service discovery, load balancing, failover
• Logging, monitoring, tracing• Configuration• Testing• Delivery
Declarative microservices
Twitter: @christianposta
Blog: http://blog.christianposta.com
Email: [email protected]
Thanks!
BTW: Hand drawn diagrams made with Paper by FiftyThree.com
http://fabric8.iohttp://kubernetes.iohttp://openshift.comhttp://events.linuxfoundation.org/events/kubeconhttps://github.com/pact-foundationhttp://camel.apache.org