SlideShare a Scribd company logo
Enabling Microservices @Orbitz
Steve Hoffman @bacoboy
Rick Fast @tortiepoint
Senior Principal Engineers
DockerCon SF 2015: Enabling Microservices @Orbitz
DockerCon SF 2015: Enabling Microservices @Orbitz
DockerCon SF 2015: Enabling Microservices @Orbitz
Agenda
• Brief Architecture Overview/History
• From Monolithic to Services to Microservices
with Docker
• Automated Pipelines
• Questions
#dockercon
2000
#dockercon
2000
Yes, we are STILL hiring!
@OrbitzTalent
#dockercon
2000
Web Layer
Business Layer
#dockercon
2000
#dockercon
2000
#dockercon
2000
Business Layer
#dockercon
Business Layer
20032000
#dockercon
Business Layer
2003
#dockercon
2003
Business Layer
#dockercon
20042003
#dockercon
2004
#dockercon
20042012
#dockercon
2012
• Multiple Brands
• Websites
• Webservices
• Multiple Backends
• 500+ apps / thousands of instances
• Deployments Daily (sometimes more)
2015
#dockercon
Process Overkill
#dockercon
Different Provisioning Tools
DEV OPS
Application Platform!=
#dockercon
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
#dockercon
The Docker Slave
aka “The Rickbot”
App
App
App
#dockercon
10.10.10.10
10.10.10.10:31002
App
App
App Register & Lookup
#dockercon
App
App
App
#dockercon
App
App
App
#dockercon
#dockercon
#dockercon
http://consul.io
#dockercon
10.10.10.10
10.10.10.10:51515
App
App
App
#dockercon
10.10.10.10
10.10.10.10:1337
App
App
App
#dockercon
Almost done…
App
App
App
#dockercon
App
App
App
#dockercon
App
App
App
VIP
https://github.com/QubitProducts/bamboo
#dockercon
App
App
App
#dockercon
App
App
App
#dockercon
App
App
App
A Little More Background
#dockercon
#dockercon
Module
Module
Module Module
#dockercon
Editorial Module
• A Continuously Deployed Microservice
• www.orbitz.com
- (scroll down)
#dockercon
Orbitz
Content
Orchestration
Service
Content
(Solr)
Editorial
Module
Search
Module
Hotel
Module
#dockercon
Orbitz
Content
Orchestration
Service
Content
(Solr)
Editorial
Module
Search
Module
Hotel
Module
Hotel Team Search Team Content Team
#dockercon
Orbitz
Content
Orchestration
Service
Content
(Solr)
Editorial
Module
Search
Module
Hotel
Module
#dockercon
Orbitz
Content
Orchestration
Service
Content
(Solr)
Editorial
Module
Search
Module
Hotel
Module
Hotel Team
Search Team
Content Team
#dockercon
Pre-Continuous Delivery
1.2-BETA-20150401-113002
Test Discard
Test Discard
1.2-BETA-20150402-093002
Build
Build
And so on…
#dockercon
Pre-Continuous Delivery
1.2-BETA-20150401-113002
Test Discard
Test Discard
1.2-BETA-20150402-093002
Build
Build
Test Deploy
1.2
Build
Continuous Delivery with Jenkins,
Docker, and Ansible
(And then Marathon)
#dockercon
Yo
rfast-mbp:git rfast$ yo microservice
_-----_
| | .--------------------------.
|--(o)--| | Welcome to the kickass |
`---------´ | Microservice |
( _´U`_ ) | generator! |
/___A___ '--------------------------'
| ~ |
__'.___.'__
´ ` |° ´ Y `
? Enter the name of your service. (E.G. "my-service")
#dockercon
Committer
Pull Request
#dockercon
Committer
Reviewer
Pull Request
#dockercon
Committer
Reviewer
Pull Request
#dockercon
Committer
Reviewer
Pull Request
Jenkins Pipeline
#dockercon
if(…) {
x ++;
}
Merge
#dockercon
Pipeline (Simplified)
build
unit test
publish
deploy
dev
acceptance
tests
deploy
qa
deploy
staging
open RFC
deploy
prod
close RFC
#dockercon
Build
if(…) {
x ++;
}
1.2
Merge
#dockercon
Build
if(…) {
x ++;
}
1.2
Merge
1.2.
editorial-module.jar
./gradlew build
{BUILD_NUMBER}
#dockercon
Build
1.2
Merge
editorial-module.jar
if(…) {
x ++;
}
171.2.
#dockercon
Build
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.
#dockercon
Build
1.2
Merge
editorial-module.jar orbitz/editorial-module:1.2.17
if(…) {
x ++;
}
171.2.
#dockercon
Build
orbitz/editorial-module:1.2.17
#dockercon
Deploy
- hosts: dev
- tasks:
- name: find previous images
docker_facts: image=orbitz/{{application}}
register: previous
- name: deploy new image
docker: image=orbitz/{{application}}:{{version}} …
- name: wait for service
wait_for: port={{port}} …
- name: check health endpoint
uri: url="http://{{fqdn}}:{{port}}/health" …
- name: kill old image
docker: {{previous}}
git pull
playbook.yml (abridged)
#dockercon
host-001 host-002 host-003 host-004 host-005
- hosts: dev
#dockercon
Deploy
host-001
1.2.16
#dockercon
Deploy
1.2.16 1.2.17
host-001
#dockercon
1.2.16 1.2.17
host-001
Deploy
DATABASE_URL=jdbc://whatever/db/stuff
CONSUL_HOST={{ansible_fqdn}}
LOGSTASH_HOST={{ansible_fqdn}}
GRAPHITE_HOST={{ansible_fqdn}}
#dockercon
Deploy
1.2.16 1.2.17
/health
host-001
#dockercon
Deploy
1.2.16 1.2.17
/health
200 OK
host-001
#dockercon
Deploy
1.2.16 1.2.17
host-001
#dockercon
Deploy
1.2.17
host-001
#dockercon
Deploy
host-002
1.2.16
And so on…
host-001
1.2.17
#dockercon
What’s next?
#dockercon
How to handle failure?
#dockercon
What happens when a VM is moved?
#dockercon
What if I need to add capacity?
#dockercon
Deploy (Second Attempt)
- hosts: dev
- tasks:
- name: find previous images
docker_facts: image=orbitz/{{application}}
register: previous
- name: deploy new image
docker: image=orbitz/{{application}}:{{version}} …
- name: wait for service
wait_for: port={{port}} …
- name: check health endpoint
uri: url="http://{{fqdn}}:{{port}}/health" …
- name: kill old image
docker: {{previous}}
git pull
playbook.yml (abridged)
#dockercon
Deploy (Second Attempt)
- hosts: dev
- tasks:
- name: find previous images
docker_facts: image=orbitz/{{application}}
register: previous
- name: deploy new image
docker: image=orbitz/{{application}}:{{version}} …
- name: wait for service
wait_for: port={{port}} …
- name: check health endpoint
uri: url="http://{{fqdn}}:{{port}}/health" …
- name: kill old image
git pull
playbook.yml (abridged)
- hosts: localhost
- tasks:
- name: marathon deploy
marathon: image=orbitz/{{application}}:{{version}}
instances=3
#dockercon
Deploy (Second Attempt)
New host setup
#dockercon
Deploy (Second Attempt)
Mesos Agent
New host setup
1.2.16
#dockercon
Deploy (Second Attempt)
- tasks:
marathon: …
playbook.yml
1.2.16 1.2.16
1.2.16
#dockercon
Deploy (Second Attempt)
- tasks:
marathon: …
1.2.16 1.2.16
1.2.16
#dockercon
Deploy (Second Attempt)
- tasks:
marathon: …
PUT /apps/editorial-module
{
“image”: “orbitz/editorial-module:1.2.17” …
}
1.2.16 1.2.16
1.2.16
#dockercon
Deploy (Second Attempt)
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
#dockercon
Deploy (Second Attempt)
- tasks:
marathon: …
PUT /apps/editorial-module
{
“image”: “orbitz/editorial-module:1.2.17” …
}
1.2.16 1.2.16
1.2.16
#dockercon
Deploy (Second Attempt)
- tasks:
marathon: …
1.2.16 1.2.16
1.2.16
#dockercon
Deploy (Second Attempt)
- tasks:
marathon: …
1.2.16 1.2.16
1.2.16
1.2.17 1.2.17
1.2.17
#dockercon
Deploy (Second Attempt)
- tasks:
marathon: …
/health
1.2.16 1.2.16
1.2.16
1.2.17 1.2.17
1.2.17
#dockercon
Deploy (Second Attempt)
- 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
#dockercon
- tasks:
marathon: …
1.2.17 1.2.17
1.2.17
#dockercon
And off to the next environment…
1.2.17 1.2.17
1.2.17
#dockercon
1.2.17 1.2.17
1.2.17
What if?
#dockercon
1.2.17 1.2.17
#dockercon
1.2.17 1.2.17
#dockercon
1.2.17 1.2.17 1.2.17
#dockercon
/health
200
OK
1.2.17 1.2.17 1.2.17
#dockercon
1.2.17 1.2.17 1.2.17
#dockercon
Smoke/Acceptance Testing
1.2.17
1.2.17
1.2.17
#dockercon
Paper Trail
create
tickets
commit(s)
#dockercon
Paper Trail
fail!
close/fail
#dockercon
Paper Trail
ok
close
Build
Unit Test
Deploy
Dev
Deploy
Prod
Deploy
Staging
Acceptance
Test
Code
Review &
Push
Production
Pre-Production
Open
RFC
Close
RFC
#dockercon
What’s inside the containers?
• Spring Boot
• Dropwizard Metrics (formerly Coda Hale, Yammer)
• Consul Registration/Discovery
• Logstash + Logback
• Swagger
• Hystrix
• Retrofit + Consul
OrbitzWorldwide/consul-client
#dockercon
–You
“Why didn’t you use {{.x}}?”
#dockercon
Keeping an eye on…
Kubernetes Amazon
Elastic Container
Service
Docker
Swarm
#dockercon
Summary
• Create a shared 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.
• Take people out of the release process
- Docker - repeatable applications
- Chef - repeatable infrastructure — Environment aware
- Jenkins - repeatable releases
• 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)
Thanks!
Steve Hoffman
@bacoboy
Rick Fast
@tortiepoint

More Related Content

PDF
DockerCon SF 2015: Docker in the New York Times Newsroom
PDF
Docker on Google App Engine
PPT
Amazon Web Services and Docker
PDF
DockerCon SF 2015: Keynote Day 1
PDF
Automate App Container Delivery with CI/CD and DevOps
PPTX
DockerCon EU 2015: Stop Being Lazy and Test Your Software!
PDF
From Zero Docker to Hackathon Winner - Marcos Lilljedahl and Jimena Tapia
PPTX
Develop and deploy Kubernetes applications with Docker - IBM Index 2018
DockerCon SF 2015: Docker in the New York Times Newsroom
Docker on Google App Engine
Amazon Web Services and Docker
DockerCon SF 2015: Keynote Day 1
Automate App Container Delivery with CI/CD and DevOps
DockerCon EU 2015: Stop Being Lazy and Test Your Software!
From Zero Docker to Hackathon Winner - Marcos Lilljedahl and Jimena Tapia
Develop and deploy Kubernetes applications with Docker - IBM Index 2018

What's hot (20)

PDF
DCSF19 How To Build Your Containerization Strategy
PPTX
Intro to Docker and clustering with Rancher from scratch
PDF
DCSF19 CMD and Conquer: Containerizing the Monolith
PDF
Building a smarter application Stack by Tomas Doran from Yelp
PPTX
Docker Bday #5, SF Edition: Introduction to Docker
PDF
The Golden Ticket: Docker and High Security Microservices by Aaron Grattafiori
PPTX
CI, CD with Docker, Jenkins and Tutum
PPTX
Windows Server Containers- How we hot here and architecture deep dive
PDF
Docker, the Future of DevOps
PDF
DockerCon SF 2015: Docker Security
PDF
Docker for Devs - John Zaccone, IBM
PDF
Docker in pratice -chenyifei
PDF
DockerCon EU 2015: Trading Bitcoin with Docker
PPTX
Docker Meetup 08 03-2016
DOCX
Build Your Own SaaS using Docker
PPTX
Docker Online Meetup: Announcing Docker CE + EE
PDF
Node.js Rocks in Docker for Dev and Ops
PDF
Configuration Management and Transforming Legacy Applications in the Enterpri...
PDF
IBM Index 2018 Conference Workshop: Modernizing Traditional Java App's with D...
PDF
Docker Presentation at the OpenStack Austin Meetup | 2013-09-12
DCSF19 How To Build Your Containerization Strategy
Intro to Docker and clustering with Rancher from scratch
DCSF19 CMD and Conquer: Containerizing the Monolith
Building a smarter application Stack by Tomas Doran from Yelp
Docker Bday #5, SF Edition: Introduction to Docker
The Golden Ticket: Docker and High Security Microservices by Aaron Grattafiori
CI, CD with Docker, Jenkins and Tutum
Windows Server Containers- How we hot here and architecture deep dive
Docker, the Future of DevOps
DockerCon SF 2015: Docker Security
Docker for Devs - John Zaccone, IBM
Docker in pratice -chenyifei
DockerCon EU 2015: Trading Bitcoin with Docker
Docker Meetup 08 03-2016
Build Your Own SaaS using Docker
Docker Online Meetup: Announcing Docker CE + EE
Node.js Rocks in Docker for Dev and Ops
Configuration Management and Transforming Legacy Applications in the Enterpri...
IBM Index 2018 Conference Workshop: Modernizing Traditional Java App's with D...
Docker Presentation at the OpenStack Austin Meetup | 2013-09-12
Ad

Viewers also liked (20)

PPTX
DockerCon SF 2015: Using Docker to Keep Houses Warm: Highly Distributed Micro...
PDF
Service discovery in a microservice architecture using consul
PDF
DockerCon SF 2015: Faster, Cheaper, Safer
PPTX
Why Docker
PPTX
Docker introduction
PPTX
Java Microservices with DropWizard
PPTX
Dropwizard Internals
PDF
Soa with consul
PDF
JEE on DC/OS
PDF
Simple REST with Dropwizard
PDF
Production Ready Web Services with Dropwizard
PDF
Dropwizard Spring - the perfect Java REST server stack
PDF
Dropwizard and Groovy
PDF
How to Build Cloud-based Microservice Environments with Docker and VoltDB
PPTX
Service Orchestrierung mit Apache Mesos
PPT
TransitioningToMicroServonDocker_MS
PPTX
Dropwizard Introduction
PDF
WildFly Swarm: Criando Microservices com Java EE 7
PDF
MicroService and MicroContainer with Apache Camel
PDF
Simple REST-APIs with Dropwizard and Swagger
DockerCon SF 2015: Using Docker to Keep Houses Warm: Highly Distributed Micro...
Service discovery in a microservice architecture using consul
DockerCon SF 2015: Faster, Cheaper, Safer
Why Docker
Docker introduction
Java Microservices with DropWizard
Dropwizard Internals
Soa with consul
JEE on DC/OS
Simple REST with Dropwizard
Production Ready Web Services with Dropwizard
Dropwizard Spring - the perfect Java REST server stack
Dropwizard and Groovy
How to Build Cloud-based Microservice Environments with Docker and VoltDB
Service Orchestrierung mit Apache Mesos
TransitioningToMicroServonDocker_MS
Dropwizard Introduction
WildFly Swarm: Criando Microservices com Java EE 7
MicroService and MicroContainer with Apache Camel
Simple REST-APIs with Dropwizard and Swagger
Ad

Similar to DockerCon SF 2015: Enabling Microservices @Orbitz (20)

PDF
Enabling Microservices @Orbitz - DockerCon 2015
PDF
Enabling Microservices @Orbitz - Velocity Conf 2015
PDF
JDD2014: Docker.io - versioned linux containers for JVM devops - Dominik Dorn
PPTX
Intro to docker
PPTX
Running Docker in Development & Production (DevSum 2015)
PDF
How to create your own hack environment
PPTX
PDF
Introduction to Docker
PPTX
How to _docker
PDF
Developing and deploying applications with Spring Boot and Docker (@oakjug)
PPTX
Setup docker on existing application
PPTX
Build Once, Run Anywhere: The Rise of Containerization in Modern IT
PPTX
Architecting .NET Applications for Docker and Container Based Deployments
PPTX
[Codelab 2017] Docker 기초 및 활용 방안
PDF
Dockerfiles building docker images automatically v (workdir, env, add, and ...
PDF
Docker in everyday development
PDF
FullStack London - Cloud Native Node.js
PDF
How to dockerize rails application compose and rails tutorial
PDF
Docker, Kubernetes, and Google Cloud
Enabling Microservices @Orbitz - DockerCon 2015
Enabling Microservices @Orbitz - Velocity Conf 2015
JDD2014: Docker.io - versioned linux containers for JVM devops - Dominik Dorn
Intro to docker
Running Docker in Development & Production (DevSum 2015)
How to create your own hack environment
Introduction to Docker
How to _docker
Developing and deploying applications with Spring Boot and Docker (@oakjug)
Setup docker on existing application
Build Once, Run Anywhere: The Rise of Containerization in Modern IT
Architecting .NET Applications for Docker and Container Based Deployments
[Codelab 2017] Docker 기초 및 활용 방안
Dockerfiles building docker images automatically v (workdir, env, add, and ...
Docker in everyday development
FullStack London - Cloud Native Node.js
How to dockerize rails application compose and rails tutorial
Docker, Kubernetes, and Google Cloud

More from Docker, Inc. (20)

PDF
Containerize Your Game Server for the Best Multiplayer Experience
PDF
How to Improve Your Image Builds Using Advance Docker Build
PDF
Build & Deploy Multi-Container Applications to AWS
PDF
Securing Your Containerized Applications with NGINX
PDF
How To Build and Run Node Apps with Docker and Compose
PDF
Hands-on Helm
PDF
Distributed Deep Learning with Docker at Salesforce
PDF
The First 10M Pulls: Building The Official Curl Image for Docker Hub
PDF
Monitoring in a Microservices World
PDF
COVID-19 in Italy: How Docker is Helping the Biggest Italian IT Company Conti...
PDF
Predicting Space Weather with Docker
PDF
Become a Docker Power User With Microsoft Visual Studio Code
PDF
How to Use Mirroring and Caching to Optimize your Container Registry
PDF
Monolithic to Microservices + Docker = SDLC on Steroids!
PDF
Kubernetes at Datadog Scale
PDF
Labels, Labels, Labels
PDF
Using Docker Hub at Scale to Support Micro Focus' Delivery and Deployment Model
PDF
Build & Deploy Multi-Container Applications to AWS
PDF
From Fortran on the Desktop to Kubernetes in the Cloud: A Windows Migration S...
PDF
Developing with Docker for the Arm Architecture
Containerize Your Game Server for the Best Multiplayer Experience
How to Improve Your Image Builds Using Advance Docker Build
Build & Deploy Multi-Container Applications to AWS
Securing Your Containerized Applications with NGINX
How To Build and Run Node Apps with Docker and Compose
Hands-on Helm
Distributed Deep Learning with Docker at Salesforce
The First 10M Pulls: Building The Official Curl Image for Docker Hub
Monitoring in a Microservices World
COVID-19 in Italy: How Docker is Helping the Biggest Italian IT Company Conti...
Predicting Space Weather with Docker
Become a Docker Power User With Microsoft Visual Studio Code
How to Use Mirroring and Caching to Optimize your Container Registry
Monolithic to Microservices + Docker = SDLC on Steroids!
Kubernetes at Datadog Scale
Labels, Labels, Labels
Using Docker Hub at Scale to Support Micro Focus' Delivery and Deployment Model
Build & Deploy Multi-Container Applications to AWS
From Fortran on the Desktop to Kubernetes in the Cloud: A Windows Migration S...
Developing with Docker for the Arm Architecture

Recently uploaded (20)

PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PPT
Teaching material agriculture food technology
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PPTX
Machine Learning_overview_presentation.pptx
PDF
Univ-Connecticut-ChatGPT-Presentaion.pdf
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Machine learning based COVID-19 study performance prediction
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PPTX
TLE Review Electricity (Electricity).pptx
PPTX
Spectroscopy.pptx food analysis technology
PDF
Getting Started with Data Integration: FME Form 101
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PPTX
Tartificialntelligence_presentation.pptx
PDF
Video forgery: An extensive analysis of inter-and intra-frame manipulation al...
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PPTX
A Presentation on Artificial Intelligence
Per capita expenditure prediction using model stacking based on satellite ima...
Teaching material agriculture food technology
Building Integrated photovoltaic BIPV_UPV.pdf
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Machine Learning_overview_presentation.pptx
Univ-Connecticut-ChatGPT-Presentaion.pdf
Diabetes mellitus diagnosis method based random forest with bat algorithm
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Advanced methodologies resolving dimensionality complications for autism neur...
Machine learning based COVID-19 study performance prediction
Assigned Numbers - 2025 - Bluetooth® Document
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
TLE Review Electricity (Electricity).pptx
Spectroscopy.pptx food analysis technology
Getting Started with Data Integration: FME Form 101
Mobile App Security Testing_ A Comprehensive Guide.pdf
Tartificialntelligence_presentation.pptx
Video forgery: An extensive analysis of inter-and intra-frame manipulation al...
Digital-Transformation-Roadmap-for-Companies.pptx
A Presentation on Artificial Intelligence

DockerCon SF 2015: Enabling Microservices @Orbitz