SlideShare a Scribd company logo
The journey to rails
Seamless Migration
Jeffery Yeary
jeff@debug.ninja | http://debug.ninja
Who am I?
❖ Jeff Yeary
❖ Yes I made a slide with my name on it, otherwise I
would forget to have an introduction
❖ Software Architect
❖ 10 + Years, unique perspective
Outline
❖ Platform [ ~5 min ]
❖ History (~2 min)
❖ Why a new platform? (~2 min)
❖ Rails? (~1 min)
❖ Our basic approach [ ~15 min ]
❖ APIs (~3 min)
❖ Mobile / responsive site (~2 min)
❖ Authentication (~2 min)
❖ Zuul (~8 min)
❖ Q/A
Platform: History
❖ Tibco Platform (ASP / C++ / VB)
❖ Matrix Platform [US / INTL / MINI] (.Net)
❖ Hero Platform (.Net)
❖ Niche Platform (Rails 3.0)
❖ Highlander (Rails 3.0)
❖ Punchkick Tablet Platform (PHP outsourced)
❖ Mobile Site (PHP outsourced)
❖ Global Responsive Rails Platform (Rails 4)
Which of these is a competitive
advantage?
❖ Ability to scale to millions of users
❖ Ability to deploy multiple times a day
❖ Continuous Integration / Delivery
❖ Agile software development process
❖ Providing a compelling and engaging user experience
Why write another platform?
❖ Consistent user experience
❖ Focus our resources
❖ Actually think globally
❖ Global feature set
❖ Chance to name something (GRRP)
Platform: Rails
❖ Fast to deploy (.net was taking an hour to deploy)
❖ Fast to develop on (no local compilation)
❖ Community (rubygems > nuget packages)
❖ Mature
Our basic approach
❖ Changing the tires while the car is in motion
❖ Make the change with minimal disruption to the user
❖ Same URLs when needed
❖ Consistent look and feel
❖ Stay logged in across platforms
❖ Adopt SOA -> Create responsive website -> Maintain
login state between platforms -> Proxy between the
applications
Transitioning: APIs
❖ service-oriented architecture (SOA) is a style of
software architecture for designing and developing
software in the form of interoperable services. These
services have well-defined business functionalities that
are built as software components which can be reused
for different purposes
❖ Public API
❖ Delivery Mechanism
Transitioning: APIs
❖ 8 years ago
❖ Experiment
❖ Supports job search / job application
❖ Used to build an accessibility site
❖ 6 years ago
❖ Emerging
❖ Powers iOS, Android
❖ 4 years ago
❖ Established
❖ Powers our niche sites, some international sites
❖ 3 years ago
❖ Dogfooding stage
❖ Transition pages on the matrix platform to call the
same APIs
Transitioning: Mobile site
❖ Started with something impactful (nearly 50% off all of
our users are on non-desktop devices)
❖ Opportunity to end desktop / mobile divide
❖ Responsive (foundation)
❖ First version of this is two separate domains
Transitioning: Authentication
❖ Adopt an oauth authentication flow
❖ Two step flow (think facebook connect)
❖ Follow the facebook JS sdk methodology
❖ Each platform has its own session but checks back to
the mothership
❖ Javascript says something changed, we make a server to
server call to update our session
Transitioning: Reverse Proxy
❖ Now that we have feature parity on our rails platform
and we have a central authentication authority we need
a way to select between the platforms
❖ Previous experience using HAProxy, NGinx and Zuul
Zuul
❖ What is Zuul? ( github.com/Netflix/zuul )
❖ Why use zuul?
❖ Very low overhead
❖ Powerful language (java / groovy) for making changes
to requests
❖ Simple web app example
❖ Example does almost everything needed out of the
box
Zuul: High Level
❖ Pre
❖ Add a bunch of headers to the request
❖ Stats logging about the incoming urls
❖ Route
❖ Choose which application to go to, make the request
and send it back
❖ Post
❖ Stats logging about the time taken for each request
Zuul: It’s this simple
1. https://github.com/cbdr/consumer-zuul-www/blob/master/src/main/groovy/filters/route/SimpleHostRequest.groovy#L190
2. https://github.com/cbdr/consumer-zuul-www/blob/master/src/main/groovy/filters/route/SimpleHostRequest.groovy#L240
Zuul
❖ How are routes stored?
❖ Each record contains a domain, a destination and a list
of routes
{
“incoming_url” => “www.careerbuilder.com”,
“destination_elb” =>
“someelb.us-east1.elb.amazon.com”,
“routes” => [“/”, “/assets”, “/jobs/[:id]”]
}
Zuul
❖ Route Discovery ( bit.ly/routes-revealer )
❖ UI for turning routes on and off ( Show UI )
Conclusion / Questions

More Related Content

PPTX
Gitflow - Clouddictive
Clouddictive
 
PDF
Bootify Yyour App from Zero to Hero
EPAM
 
PDF
Simple Web Services with PHP
John Paul Ada
 
PDF
Scala vs ruby
Kamil Lelonek
 
PPTX
Ruby in mule
Ramakrishna kapa
 
PPT
Jvm mbeans jmxtran
adm_exoplatform
 
PDF
Crystal
Kamil Lelonek
 
Gitflow - Clouddictive
Clouddictive
 
Bootify Yyour App from Zero to Hero
EPAM
 
Simple Web Services with PHP
John Paul Ada
 
Scala vs ruby
Kamil Lelonek
 
Ruby in mule
Ramakrishna kapa
 
Jvm mbeans jmxtran
adm_exoplatform
 
Crystal
Kamil Lelonek
 

What's hot (11)

PPTX
An evening with React Native
Mike Melusky
 
KEY
Multilingual websites with Mura CMS (MuraCon 2012)
Guust Nieuwenhuis
 
PDF
[Srijan Wednesday Webinar] How to Run Stateless and Stateful Services on K8S ...
Srijan Technologies
 
PPTX
Modern WebSites with JSF and jQuery
Frank Caputo
 
PDF
Scaling up development of a modular code base
Robert Munteanu
 
PDF
Adopting language server for apache camel feedback from a java/Eclipse plugi...
Aurélien Pupier
 
PDF
A brief intro to RubyMotion
Kamil Lelonek
 
PPTX
Ruby, the language of devops
Rob Kinyon
 
PPTX
UNC Chapel Hill 2014 CTC Retreat - Carolina Cloudapps / RedHat OpenShift Ente...
Jonathan Pletzke
 
PDF
Deploying PHP Application Using Bitbucket Pipelines
Dolly Aswin Harahap
 
PPTX
Moving 1,000 Users & 100 Branches into Streams
Perforce
 
An evening with React Native
Mike Melusky
 
Multilingual websites with Mura CMS (MuraCon 2012)
Guust Nieuwenhuis
 
[Srijan Wednesday Webinar] How to Run Stateless and Stateful Services on K8S ...
Srijan Technologies
 
Modern WebSites with JSF and jQuery
Frank Caputo
 
Scaling up development of a modular code base
Robert Munteanu
 
Adopting language server for apache camel feedback from a java/Eclipse plugi...
Aurélien Pupier
 
A brief intro to RubyMotion
Kamil Lelonek
 
Ruby, the language of devops
Rob Kinyon
 
UNC Chapel Hill 2014 CTC Retreat - Carolina Cloudapps / RedHat OpenShift Ente...
Jonathan Pletzke
 
Deploying PHP Application Using Bitbucket Pipelines
Dolly Aswin Harahap
 
Moving 1,000 Users & 100 Branches into Streams
Perforce
 
Ad

Viewers also liked (20)

PPTX
Multi-node ZUUL OpenStack gate for bare metal and Docker
Vikram G Hosakote
 
PDF
API World 2013 - Transforming the Netflix API
Benjamin Schmaus
 
PPTX
Pre-Con Ed: CA API Gateway: Developing Custom Policies to Secure Your Enterpr...
CA Technologies
 
PDF
Making Spinnaker Go @ Stitch Fix
Diana Tkachenko
 
PPTX
Microservices in Action
Bhagwat Kumar
 
PDF
Production Ready Services at Netflix
Jonah Horowitz
 
PPTX
Building A DevOps Platform for Microservices
Tim Cochran
 
PPT
Json(::PP) is a-changing
charsbar
 
PPTX
Rethinking Cloud Proxies
Mikey Cohen - Hiring Amazing Engineers
 
PDF
Introducing in-house PaaS in SmartNews
Nobutoshi Ogata
 
PDF
摩登開發團隊的DevOps之道 (@DevOpsTaiwan)
Chen Cheng-Wei
 
PDF
Edge architecture ieee international conference on cloud engineering
Mikey Cohen - Hiring Amazing Engineers
 
PDF
Pre-Con Ed: CA API Gateway: How to Deploy Your Gateway Across Multiple Enviro...
CA Technologies
 
PDF
Building Bizweb Microservices with Docker
Khôi Nguyễn Minh
 
PPTX
Zuul @ Netflix SpringOne Platform
Mikey Cohen - Hiring Amazing Engineers
 
PDF
Bizweb Microservices Architecture
Khôi Nguyễn Minh
 
PDF
Cloud Native Microservices with Spring Cloud
Conor Svensson
 
PDF
ITサービスマネジメントとSRE
真吾 吉田
 
PDF
API Gateway report
Gleicon Moraes
 
PDF
Netflix Open Source Meetup Season 4 Episode 2
aspyker
 
Multi-node ZUUL OpenStack gate for bare metal and Docker
Vikram G Hosakote
 
API World 2013 - Transforming the Netflix API
Benjamin Schmaus
 
Pre-Con Ed: CA API Gateway: Developing Custom Policies to Secure Your Enterpr...
CA Technologies
 
Making Spinnaker Go @ Stitch Fix
Diana Tkachenko
 
Microservices in Action
Bhagwat Kumar
 
Production Ready Services at Netflix
Jonah Horowitz
 
Building A DevOps Platform for Microservices
Tim Cochran
 
Json(::PP) is a-changing
charsbar
 
Rethinking Cloud Proxies
Mikey Cohen - Hiring Amazing Engineers
 
Introducing in-house PaaS in SmartNews
Nobutoshi Ogata
 
摩登開發團隊的DevOps之道 (@DevOpsTaiwan)
Chen Cheng-Wei
 
Edge architecture ieee international conference on cloud engineering
Mikey Cohen - Hiring Amazing Engineers
 
Pre-Con Ed: CA API Gateway: How to Deploy Your Gateway Across Multiple Enviro...
CA Technologies
 
Building Bizweb Microservices with Docker
Khôi Nguyễn Minh
 
Zuul @ Netflix SpringOne Platform
Mikey Cohen - Hiring Amazing Engineers
 
Bizweb Microservices Architecture
Khôi Nguyễn Minh
 
Cloud Native Microservices with Spring Cloud
Conor Svensson
 
ITサービスマネジメントとSRE
真吾 吉田
 
API Gateway report
Gleicon Moraes
 
Netflix Open Source Meetup Season 4 Episode 2
aspyker
 
Ad

Similar to Seamless Migration (20)

KEY
Why ruby and rails
Reuven Lerner
 
PPT
Ruby on Rails industry trends
Sumanth krishna
 
PPTX
Ruby conf
Shweta Kale
 
PDF
Aspose pdf
Jim Jones
 
PDF
TorqueBox
bobmcwhirter
 
PDF
Ruby On Rails
Balint Erdi
 
PDF
Ruby On Rails Basics
Amit Solanki
 
PDF
The Birth and Evolution of Ruby on Rails
company
 
DOCX
Guide - Migrating from Heroku to AWS using CloudFormation
Rob Linton
 
PDF
Security Goodness with Ruby on Rails
Source Conference
 
PDF
RESTful Rails Development Building Open Applications and Services 1st Edition...
arbeausentie
 
PPT
Ruby On Rails Siddhesh
Siddhesh Bhobe
 
PDF
Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...
Nilesh Panchal
 
PDF
RESTful Rails Development Building Open Applications and Services 1st Edition...
fanelosiwo
 
PDF
Service-Oriented Design and Implement with Rails3
Wen-Tien Chang
 
PDF
Ruby on Rails 101 - Presentation Slides for a Five Day Introductory Course
peter_marklund
 
PDF
Lessons Learnt From Working With Rails
martinbtt
 
PDF
An Iterative Approach to Service Oriented Architecture
Eric Saxby
 
PDF
Rails 3 : Cool New Things
Y. Thong Kuah
 
PPT
Rails 3
Iain Hecker
 
Why ruby and rails
Reuven Lerner
 
Ruby on Rails industry trends
Sumanth krishna
 
Ruby conf
Shweta Kale
 
Aspose pdf
Jim Jones
 
TorqueBox
bobmcwhirter
 
Ruby On Rails
Balint Erdi
 
Ruby On Rails Basics
Amit Solanki
 
The Birth and Evolution of Ruby on Rails
company
 
Guide - Migrating from Heroku to AWS using CloudFormation
Rob Linton
 
Security Goodness with Ruby on Rails
Source Conference
 
RESTful Rails Development Building Open Applications and Services 1st Edition...
arbeausentie
 
Ruby On Rails Siddhesh
Siddhesh Bhobe
 
Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...
Nilesh Panchal
 
RESTful Rails Development Building Open Applications and Services 1st Edition...
fanelosiwo
 
Service-Oriented Design and Implement with Rails3
Wen-Tien Chang
 
Ruby on Rails 101 - Presentation Slides for a Five Day Introductory Course
peter_marklund
 
Lessons Learnt From Working With Rails
martinbtt
 
An Iterative Approach to Service Oriented Architecture
Eric Saxby
 
Rails 3 : Cool New Things
Y. Thong Kuah
 
Rails 3
Iain Hecker
 

More from jasnow (20)

PDF
app/assets/stylesheets - How to not make a mess
jasnow
 
ODP
ATLRUG Community Announcements for December 2016
jasnow
 
PDF
Commitment
jasnow
 
ODP
ATLRUG Community/Giveback Announcments
jasnow
 
ODP
ATLRUG Announcements - October 2016
jasnow
 
ODP
ATLRUG Announcements - Septemer 2016
jasnow
 
PDF
Hacking Aaway with ionic
jasnow
 
ODP
ATLRUG Announcements/Upgrade News - August 2016
jasnow
 
ODP
ATLRUG Announcements - July 2016
jasnow
 
PDF
Ruby on Docker
jasnow
 
PDF
Getting Answers to Your Testing Questions
jasnow
 
ODP
ATLRUG Announcments - May 2016
jasnow
 
ODP
ATLRUG Announcements and Fun Facts - April 2016
jasnow
 
ODP
ATLRUG Announcements - March 2016
jasnow
 
ODP
Our ATLRUG.com Web Site
jasnow
 
PDF
WebRTC: Real Time Video/Audio For Your App ...
jasnow
 
ODP
ATLRUG Announcements for Feb. 2016
jasnow
 
ODP
ATLRUG December 2015
jasnow
 
PDF
Ecto Introduction by Patrick Vanstee
jasnow
 
PDF
Convox introduction by Matt Manning
jasnow
 
app/assets/stylesheets - How to not make a mess
jasnow
 
ATLRUG Community Announcements for December 2016
jasnow
 
Commitment
jasnow
 
ATLRUG Community/Giveback Announcments
jasnow
 
ATLRUG Announcements - October 2016
jasnow
 
ATLRUG Announcements - Septemer 2016
jasnow
 
Hacking Aaway with ionic
jasnow
 
ATLRUG Announcements/Upgrade News - August 2016
jasnow
 
ATLRUG Announcements - July 2016
jasnow
 
Ruby on Docker
jasnow
 
Getting Answers to Your Testing Questions
jasnow
 
ATLRUG Announcments - May 2016
jasnow
 
ATLRUG Announcements and Fun Facts - April 2016
jasnow
 
ATLRUG Announcements - March 2016
jasnow
 
Our ATLRUG.com Web Site
jasnow
 
WebRTC: Real Time Video/Audio For Your App ...
jasnow
 
ATLRUG Announcements for Feb. 2016
jasnow
 
ATLRUG December 2015
jasnow
 
Ecto Introduction by Patrick Vanstee
jasnow
 
Convox introduction by Matt Manning
jasnow
 

Recently uploaded (20)

PDF
Protecting the Digital World Cyber Securit
dnthakkar16
 
PDF
Bandai Playdia The Book - David Glotz
BluePanther6
 
PPTX
Can You Build Dashboards Using Open Source Visualization Tool.pptx
Varsha Nayak
 
PPTX
classification of computer and basic part of digital computer
ravisinghrajpurohit3
 
PDF
Exploring AI Agents in Process Industries
amoreira6
 
PDF
Teaching Reproducibility and Embracing Variability: From Floating-Point Exper...
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
PDF
Become an Agentblazer Champion Challenge Kickoff
Dele Amefo
 
PDF
Microsoft Teams Essentials; The pricing and the versions_PDF.pdf
Q-Advise
 
PDF
The Role of Automation and AI in EHS Management for Data Centers.pdf
TECH EHS Solution
 
PPTX
Why Use Open Source Reporting Tools for Business Intelligence.pptx
Varsha Nayak
 
PPTX
ConcordeApp: Engineering Global Impact & Unlocking Billions in Event ROI with AI
chastechaste14
 
PPTX
Visualising Data with Scatterplots in IBM SPSS Statistics.pptx
Version 1 Analytics
 
PPTX
Maximizing Revenue with Marketo Measure: A Deep Dive into Multi-Touch Attribu...
bbedford2
 
PDF
49785682629390197565_LRN3014_Migrating_the_Beast.pdf
Abilash868456
 
PDF
lesson-2-rules-of-netiquette.pdf.bshhsjdj
jasmenrojas249
 
PPTX
Odoo Integration Services by Candidroot Solutions
CandidRoot Solutions Private Limited
 
PPTX
Smart Panchayat Raj e-Governance App.pptx
Rohitnikam33
 
PPT
Why Reliable Server Maintenance Service in New York is Crucial for Your Business
Sam Vohra
 
PPTX
Role Of Python In Programing Language.pptx
jaykoshti048
 
PDF
IEEE-CS Tech Predictions, SWEBOK and Quantum Software: Towards Q-SWEBOK
Hironori Washizaki
 
Protecting the Digital World Cyber Securit
dnthakkar16
 
Bandai Playdia The Book - David Glotz
BluePanther6
 
Can You Build Dashboards Using Open Source Visualization Tool.pptx
Varsha Nayak
 
classification of computer and basic part of digital computer
ravisinghrajpurohit3
 
Exploring AI Agents in Process Industries
amoreira6
 
Teaching Reproducibility and Embracing Variability: From Floating-Point Exper...
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
Become an Agentblazer Champion Challenge Kickoff
Dele Amefo
 
Microsoft Teams Essentials; The pricing and the versions_PDF.pdf
Q-Advise
 
The Role of Automation and AI in EHS Management for Data Centers.pdf
TECH EHS Solution
 
Why Use Open Source Reporting Tools for Business Intelligence.pptx
Varsha Nayak
 
ConcordeApp: Engineering Global Impact & Unlocking Billions in Event ROI with AI
chastechaste14
 
Visualising Data with Scatterplots in IBM SPSS Statistics.pptx
Version 1 Analytics
 
Maximizing Revenue with Marketo Measure: A Deep Dive into Multi-Touch Attribu...
bbedford2
 
49785682629390197565_LRN3014_Migrating_the_Beast.pdf
Abilash868456
 
lesson-2-rules-of-netiquette.pdf.bshhsjdj
jasmenrojas249
 
Odoo Integration Services by Candidroot Solutions
CandidRoot Solutions Private Limited
 
Smart Panchayat Raj e-Governance App.pptx
Rohitnikam33
 
Why Reliable Server Maintenance Service in New York is Crucial for Your Business
Sam Vohra
 
Role Of Python In Programing Language.pptx
jaykoshti048
 
IEEE-CS Tech Predictions, SWEBOK and Quantum Software: Towards Q-SWEBOK
Hironori Washizaki
 

Seamless Migration

  • 1. The journey to rails Seamless Migration Jeffery Yeary [email protected] | http://debug.ninja
  • 2. Who am I? ❖ Jeff Yeary ❖ Yes I made a slide with my name on it, otherwise I would forget to have an introduction ❖ Software Architect ❖ 10 + Years, unique perspective
  • 3. Outline ❖ Platform [ ~5 min ] ❖ History (~2 min) ❖ Why a new platform? (~2 min) ❖ Rails? (~1 min) ❖ Our basic approach [ ~15 min ] ❖ APIs (~3 min) ❖ Mobile / responsive site (~2 min) ❖ Authentication (~2 min) ❖ Zuul (~8 min) ❖ Q/A
  • 4. Platform: History ❖ Tibco Platform (ASP / C++ / VB) ❖ Matrix Platform [US / INTL / MINI] (.Net) ❖ Hero Platform (.Net) ❖ Niche Platform (Rails 3.0) ❖ Highlander (Rails 3.0) ❖ Punchkick Tablet Platform (PHP outsourced) ❖ Mobile Site (PHP outsourced) ❖ Global Responsive Rails Platform (Rails 4)
  • 5. Which of these is a competitive advantage? ❖ Ability to scale to millions of users ❖ Ability to deploy multiple times a day ❖ Continuous Integration / Delivery ❖ Agile software development process ❖ Providing a compelling and engaging user experience
  • 6. Why write another platform? ❖ Consistent user experience ❖ Focus our resources ❖ Actually think globally ❖ Global feature set ❖ Chance to name something (GRRP)
  • 7. Platform: Rails ❖ Fast to deploy (.net was taking an hour to deploy) ❖ Fast to develop on (no local compilation) ❖ Community (rubygems > nuget packages) ❖ Mature
  • 8. Our basic approach ❖ Changing the tires while the car is in motion ❖ Make the change with minimal disruption to the user ❖ Same URLs when needed ❖ Consistent look and feel ❖ Stay logged in across platforms ❖ Adopt SOA -> Create responsive website -> Maintain login state between platforms -> Proxy between the applications
  • 9. Transitioning: APIs ❖ service-oriented architecture (SOA) is a style of software architecture for designing and developing software in the form of interoperable services. These services have well-defined business functionalities that are built as software components which can be reused for different purposes ❖ Public API ❖ Delivery Mechanism
  • 10. Transitioning: APIs ❖ 8 years ago ❖ Experiment ❖ Supports job search / job application ❖ Used to build an accessibility site ❖ 6 years ago ❖ Emerging ❖ Powers iOS, Android ❖ 4 years ago ❖ Established ❖ Powers our niche sites, some international sites ❖ 3 years ago ❖ Dogfooding stage ❖ Transition pages on the matrix platform to call the same APIs
  • 11. Transitioning: Mobile site ❖ Started with something impactful (nearly 50% off all of our users are on non-desktop devices) ❖ Opportunity to end desktop / mobile divide ❖ Responsive (foundation) ❖ First version of this is two separate domains
  • 12. Transitioning: Authentication ❖ Adopt an oauth authentication flow ❖ Two step flow (think facebook connect) ❖ Follow the facebook JS sdk methodology ❖ Each platform has its own session but checks back to the mothership ❖ Javascript says something changed, we make a server to server call to update our session
  • 13. Transitioning: Reverse Proxy ❖ Now that we have feature parity on our rails platform and we have a central authentication authority we need a way to select between the platforms ❖ Previous experience using HAProxy, NGinx and Zuul
  • 14. Zuul ❖ What is Zuul? ( github.com/Netflix/zuul ) ❖ Why use zuul? ❖ Very low overhead ❖ Powerful language (java / groovy) for making changes to requests ❖ Simple web app example ❖ Example does almost everything needed out of the box
  • 15. Zuul: High Level ❖ Pre ❖ Add a bunch of headers to the request ❖ Stats logging about the incoming urls ❖ Route ❖ Choose which application to go to, make the request and send it back ❖ Post ❖ Stats logging about the time taken for each request
  • 16. Zuul: It’s this simple 1. https://github.com/cbdr/consumer-zuul-www/blob/master/src/main/groovy/filters/route/SimpleHostRequest.groovy#L190 2. https://github.com/cbdr/consumer-zuul-www/blob/master/src/main/groovy/filters/route/SimpleHostRequest.groovy#L240
  • 17. Zuul ❖ How are routes stored? ❖ Each record contains a domain, a destination and a list of routes { “incoming_url” => “www.careerbuilder.com”, “destination_elb” => “someelb.us-east1.elb.amazon.com”, “routes” => [“/”, “/assets”, “/jobs/[:id]”] }
  • 18. Zuul ❖ Route Discovery ( bit.ly/routes-revealer ) ❖ UI for turning routes on and off ( Show UI )