Post on 14-Apr-2017
Microservices
Who, what, where, when, why… how?
Who we are
Matt West
Bill O’Neill
Definition: Microservices (Squishy at best)
Start With Service Oriented Architecture (SOA)
Architectural pattern in which application components provide services to other components via a communications protocol (typically over a network)
SOA + Marketplace = $ + ? + $$ + ?? + $$$ + ???
Meanwhile in a galaxy far far away...
as well as agile methodologies momentum
Conway’s Law:
organizations which design systems … are constrained to produce designs which are copies of the communication structures of these organizations
In other words smart, small, loosely coupled, cross-functional teams started to create independent components to match their structure.
Microservice Characteristics
- Like SOA but “smaller”- Many small services- Polyglot (Use the best language for the job)- Database “in” the service (again based on need)- Versioned independently- Deployed independently- Scale independently
*Shamelessly stolen from Martin Fowler
Who does this?
*http://blogs.wsj.com/cio/2015/10/05/innovate-or-die-the-rise-of-microservices/
And most importantly...
Deployment and Operations
● Scalability● Reliability● Metrics● Security● Continuous Deployment
Making Microservices Possible
● Affordable Infrastructure - AWS○ Used by all sized companies, start-ups to Fortune 500○ Grew by 71% last year
● Process Isolation○ Physical Machine○ Virtual Machine○ Linux kernel virtualization → Docker
■ Made possible using Linux Control Groups (2007, v2.6.24) and Namespaces
■ Top 20 most active project on Github■ Supported by IBM, Google, Cisco, Red Hat
Docker
● Lightweight○ Share same kernel
○ More efficient use of resources
○ Layered filesystem
● Open● Secure
Monolith
Monolith
Scalability
Monolith
Reliability
Tracing (debugging production systems)
Monolith Monolith
Solution - Log Aggregation
Service-to-Service Security
Monolith
● HTTP(S) basic auth● SAML/OpenID● Client certs● HMAC over HTTP● HTTPS● API keys
Other Concerns...
● Semantic Versioning (x.y.z)○ Major○ Minor○ Build
● Separate data stores● Code reuse and shared
libraries● Transactional boundaries● Reporting● Service discovery
● Monitoring○ Health checks○ Correlation IDs○ Synthetic monitoring○ Metric tracking
● Testing○ End-to-end testing○ Test journeys○ Consumer driven tests
○ Tests after production (Canary testing)
● Caching● Auto-scaling
Continuous Deployment
● Allows parts of your application to update independently ● Don’t need huge regression test cycles to fix a bug● Can be rolled out using canary testing● Can be recalled quickly● Allows teams to operate independently● Features can be rolled to production independently● Supports agile workflow● Supports Conway’s Law
Typical Continuous Deployment Pipeline