making friendly-microservices

69
Making Friendly Microservices Michele Titolo Lead Software Engineer, Capital One

Upload: michele-titolo

Post on 17-Jan-2017

579 views

Category:

Software


1 download

TRANSCRIPT

Page 1: Making friendly-microservices

Making Friendly Microservices

Michele TitoloLead Software Engineer, Capital One

Page 2: Making friendly-microservices

Definition:/microservice/Small service that does one thing wellIndependentOwns its own data

Page 3: Making friendly-microservices

Definition:/friendly/Helpful An allyKindEasy to use, understandAble to coexist without causing harm

Page 4: Making friendly-microservices

What Makes A Microservice…Helpful, An Ally, Kind, Easy to Use, Able to Coexist

Page 5: Making friendly-microservices

Why?

Page 6: Making friendly-microservices

Helpful

Page 7: Making friendly-microservices

Documentation Documentation Documentation

Page 8: Making friendly-microservices

Version And Revision HistoryHistorical record of when things changed and why

Page 9: Making friendly-microservices

Live Documentation

Page 10: Making friendly-microservices

Document Dependencies

Page 11: Making friendly-microservices
Page 12: Making friendly-microservices

Create A Dependency Graph

Page 13: Making friendly-microservices

Autogenerate Documentation

Page 14: Making friendly-microservices

ToolsOpen API Specification/SwaggerAPIBlueprintRAML

Page 15: Making friendly-microservices

Open Api Spec

Page 16: Making friendly-microservices

Api Blueprint

Page 17: Making friendly-microservices

RAML

Page 18: Making friendly-microservices

Ally

Page 19: Making friendly-microservices

Integrate Monitoring Tools

Page 20: Making friendly-microservices

Log All The ThingsUse unique request IDs so logs are easier to sort through

Page 21: Making friendly-microservices

Avoid Playing Red Light Green Light

Page 22: Making friendly-microservices

What Happens When A Dependency Fails?

Page 23: Making friendly-microservices

Hint: Your Service Should Not Go Down

Page 24: Making friendly-microservices

Macro DependenciesMicro Dependencies

Page 25: Making friendly-microservices

Help Identify Bottlenecks Before They Happen

Page 26: Making friendly-microservices

Communication

Page 27: Making friendly-microservices

Gather Data

Page 28: Making friendly-microservices

ToolsDockerAtlasZipkin

Page 29: Making friendly-microservices

Docker

Page 30: Making friendly-microservices

Atlas

Page 31: Making friendly-microservices

Zipkin

Page 32: Making friendly-microservices

Kind

Page 33: Making friendly-microservices

Make Your Service Easy To Deploy And Scale

Page 34: Making friendly-microservices

Consumers Should Be Able To Hit The API Directly In A Non-Prod Environment

Page 35: Making friendly-microservices

Consistent Error Messaging

Page 36: Making friendly-microservices

HTTP/1.1 206 Partial Content

Page 37: Making friendly-microservices

Do Not Make Others Setup A Development Environment To Troubleshoot Issues

Page 38: Making friendly-microservices

ToolsDockerJenkinsCapistrano

Page 39: Making friendly-microservices

Docker

Page 40: Making friendly-microservices

ContainersEach service should stand aloneUse docker-compose for dependencies Swarm and Scale

Page 41: Making friendly-microservices

Use Containers For Local Development

Page 42: Making friendly-microservices

Jenkins

Page 43: Making friendly-microservices

Capistrano

Page 44: Making friendly-microservices

Easy To Use

Page 45: Making friendly-microservices

Use One Base URL For Everything

Page 46: Making friendly-microservices

Use An API Gateway Or Load Balancer To Route API Calls

Page 47: Making friendly-microservices

Be Security Conscious

Page 48: Making friendly-microservices

Cookie SecurityDon’t use wildcardsAlways use HTTPS and SecureSet correct domain

Page 49: Making friendly-microservices

Mobile SecuritySSL Certificate Pinning

Page 50: Making friendly-microservices

ToolsDockerZuulNGINIXHAProxy

Page 51: Making friendly-microservices

Docker

Page 52: Making friendly-microservices

Zuul

Page 53: Making friendly-microservices

NGINIX

Page 54: Making friendly-microservices

HAProxy

Page 55: Making friendly-microservices

Coexist

Page 56: Making friendly-microservices

Consistency Conventions

Page 57: Making friendly-microservices

How Does Your Service Fit In With The Rest?

Page 58: Making friendly-microservices

Services Need To Work Together

Page 59: Making friendly-microservices

Don’t Take Single Responsibility Too Far

Page 60: Making friendly-microservices
Page 61: Making friendly-microservices

Assumptions

Page 62: Making friendly-microservices

Tools

Page 63: Making friendly-microservices

Microservice Discovery

Page 64: Making friendly-microservices

API Discovery

Page 65: Making friendly-microservices
Page 66: Making friendly-microservices

The Friendly MicroserviceHelpful DocumentationBuilt With Monitoring And Troubleshooting In MindEasily DeployableEasy To ConsumeCoexists With Established Conventions

Page 67: Making friendly-microservices

Thank you!@micheletitolo

Page 68: Making friendly-microservices

Resources• https://opencredo.com/rest-api-tooling-review/

• http://www.capitalone.io/blog/delivering-microservices-for-enterprise-with-devops/

• https://medium.com/capital-one-developers/mobile-orchestration-innovation-on-the-edge-9835e4cbd69e#.vpbsiyqmq

• http://swagger.io/open-source-integrations/

• https://en.wikipedia.org/wiki/List_of_HTTP_status_codes

• https://www.owasp.org/index.php/Testing_for_cookies_attributes_(OTG-SESS-002)

• http://www.onegeek.com.au/articles/waiting-for-dependencies-in-docker-compose

• http://techblog.netflix.com/2014/12/introducing-atlas-netflixs-primary.html

• https://github.com/justone/dockviz

Page 69: Making friendly-microservices

Photo Credits• https://unsplash.com/photos/h13Y8vyIXNU

• https://unsplash.com/collections/380/petunia-the-pug

• https://www.flickr.com/photos/32179495@N04/21211072432/

• https://www.flickr.com/photos/78134717@N08/7154609638

• https://www.flickr.com/photos/33622296@N04/5870006633/

• https://www.flickr.com/photos/7255089@N05/5415983081

• https://www.flickr.com/photos/95477820@N02/8730925814

• https://www.flickr.com/photos/35137530@N00/16406998986/