Top Banner
#devopsdays Chicago 2015 Enabling Microservices @Orbitz Steve Hoffman Senior Principal Engineer @bacoboy
89

Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

Apr 11, 2017

Download

Technology

Steve Hoffman
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

Enabling Microservices

@Orbitz

Steve HoffmanSenior Principal Engineer

@bacoboy

Page 2: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

Page 3: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

Outline

• Brief Architecture Overview/History

• From Monolithic to Services to Microservices/Docker

• Automated Pipelines

• Questions

Page 4: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

Page 5: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

2000

Page 6: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

2000

Yes, we are STILL hiring!

Page 7: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

2000

Yes, we are STILL hiring!@OrbitzTalent

Page 8: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

2000

Web Layer

Business Layer

Page 9: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

2000

Page 10: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

2000

Page 11: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

2000

Business Layer

Page 12: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

2000

Business Layer

Page 13: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

Business Layer

2000

Page 14: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

Business Layer

2003

Page 15: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

Business Layer

2003

Page 16: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

Business Layer

2003

Page 17: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

2003

Page 18: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

2004

Page 19: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

2004

Page 20: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

2004

Page 21: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

2012

Page 22: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

2012

Page 23: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

2012• Multiple Brands

• Websites

• Webservices

• Multiple Backends

• 500+ apps / thousands of instances

• Deployments Daily (sometimes more)

Page 24: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

2015• Multiple Brands

• Websites

• Webservices

• Multiple Backends

• 500+ apps / thousands of instances

• Deployments Daily (sometimes more)

Page 25: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

Process Overkill

Page 26: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

Different Provisioning Tools

DEV OPS

Page 27: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

Different Provisioning Tools

DEV OPS

Application Platform!=

Page 28: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

A New Experiment• Microservices?

• Decompose single “service” into the actual 40+ sub-services

• Any change to sub-service was a deployment of many

• Could it be a simple Spring Boot App in Docker (12 factor?)

• Backward compatible with existing service infrastructure.

• Code to Production w/o help from other Humans - Minutes not Days

Page 29: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

Page 30: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

Module

Module

Module Module

Page 31: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

OrbitzContent

Orchestration Service

Content (Solr)

Editorial Module

Search Module

Hotel Module

Page 32: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

OrbitzContent

Orchestration Service

Content (Solr)

Editorial Module

Search Module

Hotel Module

Hotel Team Search Team Content Team

Page 33: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

OrbitzContent

Orchestration Service

Content (Solr)

Editorial Module

Search Module

Hotel Module

Page 34: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

OrbitzContent

Orchestration Service

Content (Solr)

Editorial Module

Search Module

Hotel Module

Hotel Team

Search Team

Content Team

Page 35: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

Pre-Continuous Delivery

1.2-­‐BETA-­‐20150401-­‐113002

Test Discard

Test Discard1.2-­‐BETA-­‐20150402-­‐093002

Build

Build

And so on…

Page 36: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

Pre-Continuous Delivery

1.2-­‐BETA-­‐20150401-­‐113002

Test Discard

Test Discard1.2-­‐BETA-­‐20150402-­‐093002

Build

Build

Test Deploy1.2

Build

Page 37: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

App

App

App

Page 38: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

App

App

App

Page 39: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

AppApp

App

xN

Page 40: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

AppApp

App

xN

Page 41: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

Continuous Delivery with Jenkins, Docker, Ansible

and Marathon

Page 42: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

Committer

Pull Request

Page 43: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

Committer

Reviewer

Pull Request

Page 44: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

Committer

Reviewer

Pull Request

Page 45: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

Committer

Reviewer

Pull Request

Page 46: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

Jenkins Pipeline

Page 47: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

if(…) { x ++; }

Merge

Page 48: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

build unit test publish

deploy dev

acceptance tests

deploy qa

deploy staging open RFC deploy

prod close RFC

Pipeline (Simplified)

Page 49: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

if(…) { x ++; }

1.2

MergeBuild

Page 50: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

if(…) { x ++; }

1.2

Merge

1.2.

editorial-module.jar

./gradlew build

{BUILD_NUMBER}

Build

Page 51: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

1.2

Merge

editorial-module.jar

if(…) { x ++; }

171.2.

Build

Page 52: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

1.2

Merge

editorial-module.jar

FROM orbitz/java-8 ADD build/editorial-module.jar /opt/orbitz CWD /opt/orbitz CMD java -jar editorial-module.jar

if(…) { x ++; }

171.2.

Build

Page 53: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

1.2

Merge

editorial-module.jar orbitz/editorial-module:1.2.17

if(…) { x ++; }

171.2.

Build

Page 54: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

orbitz/editorial-module:1.2.17

Build

Page 55: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

Master

MasterSlave

Commit/Push or Pull Request/Merge

Page 56: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

Master

MasterSlave

Poll or Push Trigger

Commit/Push or Pull Request/Merge

Page 57: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

Master

Master

Slave

Slave

Poll or Push Trigger

Commit/Push or Pull Request/Merge

Page 58: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

Master

Master

Slave

Slave

Poll or Push Trigger

Commit/Push or Pull Request/Merge

Page 59: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

Master

Master

Slave

Slave

Poll or Push Trigger

Commit/Push or Pull Request/Merge

Clone & Build Push Artifacts

Page 60: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

Master

MasterSlave

Page 61: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

Jenkins on Docker on MesosSlides: http://bit.ly/oww-mesoscon2015-slides

Video: Coming to YouTube

Page 62: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

git pull

playbook.yml (abridged)

- hosts: localhost - tasks: - name: marathon deploy marathon: image=orbitz/{{application}}:{{version}} instances=3

Deploy

Page 63: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

- tasks: marathon: …

playbook.yml1.2.16

1.2.16

1.2.16

Deploy

Page 64: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

- tasks: marathon: …

1.2.16

1.2.16

1.2.16

Deploy

Page 65: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

- tasks: marathon: …

1.2.16

1.2.16

1.2.16

Deploy

Page 66: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

- tasks: marathon: …

PUT /apps/editorial-module { “image”: “orbitz/editorial-module:1.2.17” … }

1.2.16

1.2.16

1.2.16

Deploy

Page 67: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

Deploy

PUT /apps/editorial-module { “image”: “orbitz/editorial-module:1.2.17” … }

- tasks: marathon: …

1.2.16

1.2.16

1.2.16

app = GET /v2/apps/editorial-module

if not app then deploy_id = POST /v2/apps { “image”: “orbitz/editorial-module:1.2.17”, “id”: “editorial-module” } else deploy_id = PUT /v2/apps/editorial-module { “image”: “orbitz/editorial-module:1.2.17” } end if

while GET /v2/deployments contains deploy_id // still deploying end

// deploy complete

Page 68: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

- tasks: marathon: …

PUT /apps/editorial-module { “image”: “orbitz/editorial-module:1.2.17” … }

1.2.16

1.2.16

1.2.16

Deploy

Page 69: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

- tasks: marathon: …

1.2.16

1.2.16

1.2.16

Deploy

Page 70: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

- tasks: marathon: …

1.2.16

1.2.16

1.2.16

1.2.17

1.2.17

1.2.17

Deploy

Page 71: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

- tasks: marathon: …

/health

1.2.16

1.2.16

1.2.16

1.2.17

1.2.17

1.2.17

Deploy

Page 72: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

- tasks: marathon: …

/health

200 OK

200 OK

200 OK

1.2.16

1.2.16

1.2.16

1.2.17

1.2.17

1.2.17

Deploy

Page 73: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

- tasks: marathon: …

1.2.17

1.2.17

1.2.17

Deploy

Page 74: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

And off to the next environment…

1.2.17

1.2.17

1.2.17

Deploy

Page 75: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

1.2.17

1.2.17

1.2.17

What if?

Page 76: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

1.2.17

1.2.17

Page 77: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

1.2.17

1.2.17

Page 78: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

1.2.17 1.2.17

1.2.17

Page 79: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

/health

200 OK

1.2.17 1.2.17

1.2.17

Page 80: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

1.2.17 1.2.17

1.2.17

Page 81: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

Smoke/Acceptance Testing

1.2.17

1.2.17

1.2.17

Page 82: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

Paper Trail

create

tickets

commit(s)

Page 83: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

Paper Trail

fail!

close/fail

Page 84: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

Paper Trail

ok

close

Page 85: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

Build Unit Test

Deploy Dev

Deploy Prod

Deploy Staging

Acceptance TestCode

Review & Push

Production

Pre-Production

Open RFC

Close RFC

Page 86: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

“Why didn’t you use {{.x}} ?”

Page 87: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

Keeping an eye on…

Hashicorp Vault Rancher Convoy

Kubernetes Amazon Elastic Container

Service

Docker Swarm + Machine

Page 88: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

Summary• Create a platform for docker deployments using shared and app-specific “localhost” helpers

— this was ours, yours SHOULD look different — adapt to change, don’t fight it.

• People don’t scale, use automation

• Docker - repeatable applications (environment portable apps)

• Chef - repeatable infrastructure (environment aware services)

• Jenkins - repeatable releases (pipelines)

• Delineate configuration concerns:

• Known at Compile time — Bake into Docker image

• Known at Boot time — Bake into Playbook/Launcher - parameter to Docker run

• Changes Anytime — Externalize (consul K/V, etcd, zookeeper)

Page 89: Enabling Microservices @Orbitz - DevOpsDays Chicago 2015

#devopsdaysChicago 2015

Questions?

@bacoboy