The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1....

52
The Seven (More) DEADLY SINS OF Microservices @spectolabs @danielbryantuk

Transcript of The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1....

Page 1: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

The Seven (More) DEADLY SINS OF Microservices

@spectolabs

@danielbryantuk

Page 2: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

Previously, AT Devoxx UK & QCON NYC 2015...

06/04/2017 @danielbryantuk

https://www.infoq.com/presentations/7-sins-microservices

Page 3: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

The Seven (more) Deadly Sins of Microservices

1. LUST - Using the (Unevaluated) latest and greatest tech…

2. GLUTTONY - Communication lock-in

3. GREED - What'S Mine is mine (within the organisation)…

4. SLOTH - Getting lazy with NFRs

5. WRATH - Blowing up when bad things happen

6. ENVY - The shared single domain (and data store) fallacy

7. PRIDE - testing in the world of transience

06/04/2017 @danielbryantuk

Page 4: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

@danielbryantuk

• Software developer, CTO at SpectoLabs• Agile, architecture, CI/CD, Programmable infrastructure

• Java, Go, JS, microservices, cloud, containers

• Continuous delivery of value through effective technology and teams

06/04/2017 @danielbryantuk

bit.ly/2jWDSF7

Page 5: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

1. Lust - Using THE LATEST and Greatest Tech…06/04/2017 @danielbryantuk

Page 6: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

New technology is great... Until it isn'T

06/04/2017 @danielbryantuk

developers with new tech be like

F*cking new technology...

Credit to Michael Hausenblas

Thishasbeenme

manytimes!

Page 7: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

Evaluation is a key skill...

06/04/2017 @danielbryantuk

Page 8: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

Evaluation - are Microservices A good fit?• “our 'mode TWO' apps are Microservices”

– Middle-management latch on to Buzzword

– New app evolution limited by existing system

– Lipstick on the pig

• Not understanding architecture principles– Not building around business Functionality

– Creating Mini-monoliths (no twelve factors)

• No Well-defined DevOps / SRE / Ops– Deployment/ops free-for-all

06/04/2017 @danielbryantuk

Page 9: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

Evaluation of tech - The’Spine Model• Effective conversations make for effective

collaboration

• It's a TOOL Problem– As a species, we have always been Tool users

and makers.

– We use _____ to get our work done

• People get stuck in a dilemma where equally plausible options are available

• “Going up the Spine” breaks deadlockhttp://spinemodel.info/explanation/introduction/

Page 10: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

AN example: To containerise, or not to containerise?

(dockaH, dockah, dockah... Dockah?)

06/04/2017 @danielbryantuk

Page 11: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

Strategy #fail

06/04/2017 @danielbryantuk

Page 12: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

Architecture/ops: Expectations versus reality

06/04/2017 @danielbryantuk

“DevOps”

Page 13: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

Choices: Beware of Confirmation bias

06/04/2017 @danielbryantuk

https://thehftguy.wordpress.com/2016/11/01/docker-in-production-an-history-of-failure/ http://patrobinson.github.io/2016/11/05/docker-in-production/

Page 14: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

Evaluation - It'S easy to be tricked

06/04/2017 @danielbryantuk

Page 15: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

Evaluation - beware of bias and heuristics

06/04/2017 @danielbryantuk

Page 16: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

2. GLUTTONY - Communication lock-in06/04/2017 @danielbryantuk

Page 17: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

Rpc - not the devil in disguise

• Don'T rule out RPC (e.g. grpc)

– Sometimes the contract (and speed) are beneficial

– Human readability of JSON can be over-rated

• Sometime events are better

– Asynchronous (AP vs CP)

– Event-sourcing, cqrs, reactive systems

06/04/2017 @danielbryantuk

Page 18: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

Jonas Boner'S thoughts

06/04/2017 @danielbryantuk

www.infoq.com/news/2017/03/microliths-microsystemswww.slideshare.net/jboner/from-microliths-to-microsystems

Page 19: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

The ESB is dead - long live the esb!

06/04/2017 @danielbryantuk

Page 20: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

The ESB is dead - long live the esb!

06/04/2017 @danielbryantuk

Page 21: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

The ESB is dead - long live the esb!

06/04/2017 @danielbryantuk

• Is this an ESB?

• Or an API gateway?

Page 22: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

The ESB is dead - long live the API Gateway!

06/04/2017 @danielbryantuk

• Watch for the API Gateway morphing into an Enterprise service bus– Loose coupling is vital

• But let me be clear...– The API Gateway pattern is awesome

– Centralise cross-cutting concerns

– Prevent wheel-reinvention (plugins)

– Check out kong, apigee, Mulesoft etc

Page 23: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

3. GREED - What'S mine is mine... (within the organisation)…

06/04/2017 @danielbryantuk

Page 24: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

Previously...

• Conway'S Law

• Microservices are about people, as much as they are tech

– Maybe more

– Particularly in a migration / transformation

06/04/2017 @danielbryantuk

Page 25: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

We hear this a lot...

“We’ve decided to reform our teams around squads, chapters and guilds”

• Beware of cargo-culting

– Repeat three times “We are not spotify”

• Understand the practices, principles, values etc

06/04/2017 @danielbryantuk

Page 26: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

4. SLOTH - Getting Lazy with NFRs06/04/2017 @danielbryantuk

Page 27: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

Getting lazy with non-Functional Requirements

“The driving technical requirements for a system should be identified early

to ensure they are properly handled in subsequent design”

Aidan Casey

Guiding principles for evolutionary architecture

06/04/2017 @danielbryantuk

Page 28: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

Getting lazy with non-Functional Requirements

• The 'ilities' Can be (often) be an afterthought

– Availability, Scalability, auditability, testability etc

• Agile/Lean: Delay decisions to the ‘last responsible moment’

– NewsFlash - Sometimes this is up-front

• It can be costly (or prohibitive) to adapt late in the project

– Microservices don'T make this easier (sometimes more difficult)

06/04/2017 @danielbryantuk

Page 29: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

Getting lazy with NFRs - security

06/04/2017 @danielbryantuk

www.slideshare.net/spnewman/appsec-microservices-velocity-2016 www.infoq.com/news/2016/08/secure-docker-microservices

Page 30: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

Testing NFRs in the build pipeline

• Performance and Load testing – Gatling / jmeter

– Flood.io

• Security testing – Findsecbugs / OWASP Dependency check

– Bdd-security (OWASP ZAP) / Arachni

– Gauntlt / Serverspec

– Docker Bench for Security / Clair

06/04/2017 @danielbryantuk

Page 31: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

5. WRATH - Blowing up when bad things happen 06/04/2017 @danielbryantuk

Page 32: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

Previously - Bring in Michael Nygard (Or some monkeys)

06/04/2017 @danielbryantuk

Page 33: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

When bad things happen, people are always involved

06/04/2017 @danielbryantuk|@oakinger

Page 34: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

People Pain point - How does Devops fit into this?

• http://web.devopstopologies.com/

• @matthewpskelton

• @beerops and @sigje

• Google SRE

06/04/2017 @danielbryantuk

Page 35: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

Devops - the 'fullstack engineer' myth

“I'M sorry, but if you'RE not designing the computer chips and

writing the website, then I don'T wanna hear from you”

Charity Majors (@mipsytipsy), CraftConf 2016

http://www.ustream.tv/recorded/86181845

06/04/2017 @danielbryantuk

Page 36: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

Devops - define responsibilities

• Do you really want to build an entire microservices platform?

• Focus on what matters

– Ci/CD

– Mechanical sympathy

– Logging

– Monitoring

06/04/2017 @danielbryantuk

Page 37: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

Worth considering: Open source PaaS

06/04/2017 @danielbryantuk

Page 38: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

6. ENVY - The shared SINGLE domain (and Data Store) fallacy

06/04/2017 @danielbryantuk

Page 39: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

Previously - One Model to Rule Them All...

• One model…– Breaks encapsulation

– Introduces coupling

• Know your DDD– Entities

– Value Objects

– Aggregates and Roots

06/04/2017 @danielbryantuk

Page 40: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

Context mapping (static) & event storming (dynamic)

06/04/2017 @danielbryantuk|@spoole167 40

www.infoq.com/articles/ddd-contextmapping

ziobrando.blogspot.co.uk/2013/11/introducing-event-storming.html

Page 41: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

Choose (and use) data stores appropriately

• RDBMS– Valuable for structured data

• Cassandra is Awesome– but don'T treat it like an RDBMS!

• Don'T build a graph with RDBMS– Use neo4j, Titan etc

• Beware of operational overhead

06/04/2017 @danielbryantuk

Page 42: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

7. PRIDE - testing in the world of transience06/04/2017 @danielbryantuk

Page 43: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

Previously...

• Local verification

– Consumer-Driven contracts

• End-to-end

– BDD-style critical path

• Remember the test pyramid

06/04/2017 @danielbryantuk

martinfowler.com/articles/microservice-testing/

Page 44: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

Service virtualisation / API simulation

• Virtualise request/response of services

– Unavailable

– Expensive to run

– Fragile/brittle

– Non-deterministic

– Cannot simulate failures

https://dzone.com/articles/continuously-delivering-soa

Andrew Morgan'S talk http://bit.ly/2oV0ecD

06/04/2017 @danielbryantuk

Page 45: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

Service virtualisation

• Classics

– CA service virtualization

– Parasoft virtualize

– HPE service virtualization

– IBM Test Virtualization server

• New (open source) kids on the block

– Hoverfly

– Wiremock

– VCR/Betamax

– Mountebank

– mirage

06/04/2017 @danielbryantuk

Page 46: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

Hoverfly

• Lightweight Service virtualisation

– Open source (Apache 2.0)

– Go-based / single binary

– Written by @Spectolabs

• Flexible API simulation

– HTTP / HTTPS

– Highly performant

06/04/2017 @danielbryantuk

Page 47: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

06/04/2017 @danielbryantuk

• Middleware

• RemovePII

• Ratelimit

• Addheaders

• Middleware

• Faultinjection

• Chaosmonkey

Page 48: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

Hoverfly-Java (Junit support)

06/04/2017 @danielbryantuk

github.com/SpectoLabs/hoverfly-java

Page 49: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

Right, Let'S Wrap this up...

06/04/2017 @danielbryantuk

Page 50: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

The Seven (more) Deadly Sins of Microservices

1. LUST - Using the (Unevaluated) latest and greatest tech…

2. GLUTTONY - Communication Lock-in

3. GREED - What'S Mine is mine (within the organisation)…

4. SLOTH - Getting lazy with NFRs

5. WRATH - Blowing up when bad things happen

6. ENVY - The shared single domain (and data store) fallacy

7. PRIDE - testing in the world of transience

06/04/2017 @danielbryantuk

Page 51: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

Bedtime reading

06/04/2017 @danielbryantuk

Page 52: The Seven (More) DEADLY SINS OF Microservices · The Seven (more) Deadly Sins of Microservices 1. LUST - Using the (Unevaluated) latest and greatest tech… 2. GLUTTONY - Communication

THANKS...

http://specto.io

muservicesweekly.com

(Credit to Tareq Abedrabbo, opencredo for inspiration/guidance)

06/04/2017 @danielbryantuk