838 lines
39 KiB
HTML
838 lines
39 KiB
HTML
|
||
<!doctype html>
|
||
<html lang="en-US" class="no-js">
|
||
<head>
|
||
<!--
|
||
88
|
||
88
|
||
88
|
||
,adPPYba, 88,dPPYba, ,adPPYYba, 8b d8
|
||
a8P_____88 88P' "8a "" `Y8 `8b d8'
|
||
8PP""""""" 88 d8 ,adPPPPP88 `8b d8'
|
||
"8b, ,aa 88b, ,a8" 88, ,88 `8b,d8'
|
||
`"Ybbd8"' 8Y"Ybbd8"' `"8bbdP"Y8 Y88'
|
||
d8'
|
||
d8'
|
||
|
||
Kickstart your career @ https://careers.ebayinc.com
|
||
-->
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
<meta name="description" content="Deployment to the cloud is an evolving area.">
|
||
|
||
<title>Zero Downtime, Instant Deployment and Rollback</title>
|
||
|
||
<base href="https://innovation.ebayinc.com/" />
|
||
|
||
<meta name="DC.date" content="2013-11-21" scheme="DCTERMS.W3CDTF" />
|
||
<meta name="twitter:card" content="summary" />
|
||
<meta name="twitter:description" content="Deployment to the cloud is an evolving area." />
|
||
<meta name="twitter:site" content="@eBayNewsroom" />
|
||
<meta name="twitter:title" content="Zero Downtime, Instant Deployment and Rollback" />
|
||
<meta property="article:modified_time" content="2025-03-18T14:56:51-07:00" />
|
||
<meta property="article:published_time" content="2013-11-21" />
|
||
<meta property="dateModified" content="2025-03-18T14:56:51-07:00" />
|
||
<meta property="datePublished" content="2013-11-21" />
|
||
<meta property="og:description" content="Deployment to the cloud is an evolving area." />
|
||
<meta property="og:locale" content="en_US" />
|
||
<meta property="og:site_name" content="eBay Inc." />
|
||
<meta property="og:title" content="Zero Downtime, Instant Deployment and Rollback" />
|
||
<meta property="og:type" content="article" />
|
||
<meta property="og:updated_time" content="2025-03-18T14:56:51-07:00" />
|
||
<meta property="og:url" content="https://innovation.ebayinc.com/stories/zero-downtime-instant-deployment-and-rollback/" />
|
||
<link rel="canonical" href="https://innovation.ebayinc.com/stories/zero-downtime-instant-deployment-and-rollback/">
|
||
|
||
|
||
|
||
<link rel="preconnect" href="//static.ebayinc.com" crossorigin>
|
||
<link rel="dns-prefetch" href="//static.ebayinc.com">
|
||
|
||
<link rel="preconnect" href="//ajax.googleapis.com" crossorigin>
|
||
<link rel="dns-prefetch" href="//ajax.googleapis.com">
|
||
|
||
<link rel="preconnect" href="//www.googletagmanager.com" crossorigin>
|
||
<link rel="dns-prefetch" href="//www.googletagmanager.com">
|
||
|
||
<link rel="preconnect" href="//www.google-analytics.com" crossorigin>
|
||
<link rel="dns-prefetch" href="//www.google-analytics.com">
|
||
|
||
|
||
|
||
<link rel="preload" href="https://static.ebayinc.com/static/theme/css/ebi-header.css?v=752435c" as="style">
|
||
|
||
|
||
|
||
|
||
<link rel="preload" href="https://static.ebayinc.com/static/theme/fonts/build/MarketSans-Regular-WebS-688dde54.woff2" as="font" type="font/woff2" crossorigin>
|
||
|
||
<link rel="preload" href="https://static.ebayinc.com/static/theme/fonts/build/MarketSans-Bold-WebS-49f0420f.woff2" as="font" type="font/woff2" crossorigin>
|
||
|
||
<link rel="preload" href="https://static.ebayinc.com/static/theme/fonts/build/ebi-icons-8ce07361.woff2" as="font" type="font/woff2" crossorigin>
|
||
|
||
|
||
|
||
|
||
<link rel="alternate" type="application/rss+xml" title="eBay Newsroom" href="https://www.ebayinc.com/stories/news/rss/" />
|
||
|
||
<link rel="alternate" type="application/rss+xml" title="Innovation Stories" href="https://innovation.ebayinc.com/stories/rss/" />
|
||
|
||
|
||
|
||
<link rel="stylesheet" href="https://static.ebayinc.com/static/theme/css/global.css?v=752435c" type="text/css">
|
||
<link rel="stylesheet" href="https://static.ebayinc.com/static/theme/css/main.css?v=752435c" type="text/css">
|
||
<link rel="stylesheet" href="https://static.ebayinc.com/static/theme/css/themes.css?v=752435c" type="text/css">
|
||
<script type="text/javascript" src="https://static.ebayinc.com/static/theme/javascript/build/head.js?v=752435c"></script>
|
||
|
||
|
||
|
||
|
||
|
||
<script src="https://static.ebayinc.com/static/theme/javascript/build/components.js?v=752435c"></script>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
||
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
||
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
||
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
|
||
})(window,document,'script','dataLayer', "GTM-N57M22R");</script>
|
||
|
||
|
||
<link rel="stylesheet" type="text/css" href="https://static.ebayinc.com/static/theme/css/special/page-nav.css?v=752435c" />
|
||
</head>
|
||
|
||
<body class="plv1 ">
|
||
|
||
|
||
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id="GTM-N57M22R"" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
|
||
|
||
|
||
|
||
|
||
<a id="skip-to-main" class="aria-only" href="/stories/zero-downtime-instant-deployment-and-rollback/#main-content">Skip to main content</a>
|
||
|
||
|
||
|
||
<ebi-header no-hl>
|
||
<template shadowrootmode="open">
|
||
<link rel="stylesheet" href="https://static.ebayinc.com/static/theme/css/ebi-header.css?v=752435c">
|
||
<header class="main-header js-header">
|
||
|
||
|
||
<sticky-scroll when="scroll-up">
|
||
<div class="main-header-top js-header-top clear ">
|
||
|
||
<a href="https://www.ebayinc.com/" class="header-logo mobile js-header-home-url">
|
||
<img class="js-header-logo" src="https://static.ebayinc.com/static/theme/images/logo.svg?v=752435c" alt="Home" title="eBay Inc. Home Page">
|
||
</a>
|
||
<button class="hamburger js-hamburger hamburger--3dx mobile" type="button" aria-label="Menu" aria-controls="main-nav-menu">
|
||
<span class="hamburger-box">
|
||
<span class="hamburger-inner"></span>
|
||
</span>
|
||
</button>
|
||
<div class="main-header-page-subtitle mobile">Company Information</div>
|
||
|
||
<div class="inner">
|
||
|
||
<div class="main-nav-overlay js-nav-overlay"></div>
|
||
|
||
|
||
<div class="main-nav-menu js-nav-menu instant" id="main-nav-menu">
|
||
|
||
|
||
<nav class="header-nav js-header-nav" aria-label="Site" role="navigation">
|
||
<ul class="header-nav-top">
|
||
|
||
<li class="desktop">
|
||
<a href="https://www.ebayinc.com/" class="header-logo">
|
||
<img src="https://static.ebayinc.com/static/theme/images/logo.svg?v=752435c" alt="Home" title="eBay Inc. Home Page">
|
||
</a>
|
||
</li>
|
||
|
||
|
||
<li class="l1 js-l1 link first has-children js-has-children" data-id="6">
|
||
<a class="js-l1-link" href="https://www.ebayinc.com/company/" aria-controls="subnav-company" >Company</a>
|
||
|
||
|
||
|
||
<ul class="js-mobile-subnav" id="subnav-company">
|
||
|
||
<li class="l2 js-l2 link " data-id="152">
|
||
<a class="js-l2-link" href="https://www.ebayinc.com/company/">Overview</a>
|
||
</li>
|
||
|
||
<li class="l2 js-l2 link " data-id="149">
|
||
<a class="js-l2-link" href="https://www.ebayinc.com/company/our-leaders/">Our Leaders</a>
|
||
</li>
|
||
|
||
<li class="l2 js-l2 link " data-id="151">
|
||
<a class="js-l2-link" href="https://www.ebayinc.com/company/our-history/">Our History</a>
|
||
</li>
|
||
|
||
<li class="l2 js-l2 link " data-id="8817">
|
||
<a class="js-l2-link" href="https://www.ebayinc.com/company/our-purpose-in-action/">Our Purpose in Action</a>
|
||
</li>
|
||
|
||
<li class="l2 js-l2 link " data-id="5467">
|
||
<a class="js-l2-link" href="https://www.ebayinc.com/impact/sustainable-commerce/">Sustainable Commerce</a>
|
||
</li>
|
||
|
||
<li class="l2 js-l2 link " data-id="5523">
|
||
<a class="js-l2-link" href="https://www.ebayinc.com/company/be-for-everyone/">Be for Everyone</a>
|
||
</li>
|
||
|
||
<li class="l2 js-l2 link " data-id="526">
|
||
<a class="js-l2-link" href="https://www.ebayinc.com/company/government-relations/">Government Relations</a>
|
||
</li>
|
||
|
||
<li class="l2 js-l2 link " data-id="5608">
|
||
<a class="js-l2-link" href="https://www.ebayinc.com/company/privacy-center/">Privacy Center</a>
|
||
</li>
|
||
|
||
<li class="l2 js-l2 link " data-id="8766">
|
||
<a class="js-l2-link" href="https://www.ebayinc.com/impact/policies-downloads/">Reports & Policies</a>
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
|
||
</li>
|
||
|
||
<li class="l1 js-l1 link has-children js-has-children" data-id="523">
|
||
<a class="js-l1-link" href="https://www.ebayinc.com/stories/news/" aria-controls="subnav-stories" >Stories</a>
|
||
|
||
|
||
|
||
<ul class="js-mobile-subnav" id="subnav-stories">
|
||
|
||
<li class="l2 js-l2 link " data-id="6021">
|
||
<a class="js-l2-link" href="https://www.ebayinc.com/stories/news/">Our News</a>
|
||
</li>
|
||
|
||
<li class="l2 js-l2 link " data-id="3208">
|
||
<a class="js-l2-link" href="https://www.ebayinc.com/stories/press-room/">Press Room</a>
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
|
||
</li>
|
||
|
||
<li class="l1 js-l1 link has-children js-has-children" data-id="17">
|
||
<a class="js-l1-link" href="https://www.ebayinc.com/impact/" aria-controls="subnav-impact" >Impact</a>
|
||
|
||
|
||
|
||
<ul class="js-mobile-subnav" id="subnav-impact">
|
||
|
||
<li class="l2 js-l2 link " data-id="160">
|
||
<a class="js-l2-link" href="https://www.ebayinc.com/impact/">Overview</a>
|
||
</li>
|
||
|
||
<li class="l2 js-l2 link " data-id="8027">
|
||
<a class="js-l2-link" href="https://www.ebayinc.com/impact/economic-opportunity/">Economic Opportunity</a>
|
||
</li>
|
||
|
||
<li class="l2 js-l2 link " data-id="7450">
|
||
<a class="js-l2-link" href="https://www.ebayinc.com/impact/sustainable-commerce/">Sustainable Commerce</a>
|
||
</li>
|
||
|
||
<li class="l2 js-l2 link " data-id="8555">
|
||
<a class="js-l2-link" href="https://www.ebayinc.com/impact/culture-and-workforce/">Culture & Workforce</a>
|
||
</li>
|
||
|
||
<li class="l2 js-l2 link " data-id="7452">
|
||
<a class="js-l2-link" href="https://www.ebayinc.com/impact/trusted-marketplace/">Trusted Marketplace</a>
|
||
</li>
|
||
|
||
<li class="l2 js-l2 link " data-id="7453">
|
||
<a class="js-l2-link" href="https://www.ebayinc.com/impact/goals-progress/">Goals & Progress</a>
|
||
</li>
|
||
|
||
<li class="l2 js-l2 link " data-id="156">
|
||
<a class="js-l2-link" href="https://www.ebayinc.com/impact/ebay-for-charity/">eBay for Charity</a>
|
||
</li>
|
||
|
||
<li class="l2 js-l2 link " data-id="155">
|
||
<a class="js-l2-link" href="https://www.ebayinc.com/impact/ebay-foundation/">eBay Foundation</a>
|
||
</li>
|
||
|
||
<li class="l2 js-l2 link " data-id="6689">
|
||
<a class="js-l2-link" href="https://www.ebayinc.com/impact/policies-downloads/">Policies & Downloads</a>
|
||
</li>
|
||
|
||
<li class="l2 js-l2 link " data-id="4468">
|
||
<a class="js-l2-link" href="https://www.ebayinc.com/impact/seller-showcase/">Seller Showcase</a>
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
|
||
</li>
|
||
|
||
<li class="l1 js-l1 current " data-id="9062">
|
||
<a class="js-l1-link" href="https://innovation.ebayinc.com/stories/" aria-current="page">Innovation</a>
|
||
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="l1 js-l1 link has-children js-has-children" data-id="16">
|
||
<a class="js-l1-link" href="https://investors.ebayinc.com/" aria-controls="subnav-investors" >Investors</a>
|
||
|
||
|
||
|
||
<ul class="js-mobile-subnav" id="subnav-investors">
|
||
|
||
<li class="l2 js-l2 link " data-id="582">
|
||
<a class="js-l2-link" href="https://investors.ebayinc.com/overview/default.aspx">Overview</a>
|
||
</li>
|
||
|
||
<li class="l2 js-l2 link " data-id="583">
|
||
<a class="js-l2-link" href="https://investors.ebayinc.com/fast-facts/default.aspx">Fast Facts</a>
|
||
</li>
|
||
|
||
<li class="l2 js-l2 link " data-id="584">
|
||
<a class="js-l2-link" href="https://investors.ebayinc.com/stock-information/Historical-Stock-Information/default.aspx">Stock Information</a>
|
||
</li>
|
||
|
||
<li class="l2 js-l2 link " data-id="585">
|
||
<a class="js-l2-link" href="https://investors.ebayinc.com/investor-news/default.aspx">Investor News</a>
|
||
</li>
|
||
|
||
<li class="l2 js-l2 link " data-id="586">
|
||
<a class="js-l2-link" href="https://investors.ebayinc.com/events/default.aspx">Events & Presentations</a>
|
||
</li>
|
||
|
||
<li class="l2 js-l2 link " data-id="587">
|
||
<a class="js-l2-link" href="https://investors.ebayinc.com/financial-information/financial-summary/default.aspx">Financial Information</a>
|
||
</li>
|
||
|
||
<li class="l2 js-l2 link " data-id="588">
|
||
<a class="js-l2-link" href="https://investors.ebayinc.com/corporate-governance/governance-documents/default.aspx">Corporate Governance</a>
|
||
</li>
|
||
|
||
<li class="l2 js-l2 link " data-id="589">
|
||
<a class="js-l2-link" href="https://investors.ebayinc.com/esg-investors/default.aspx">ESG Investors</a>
|
||
</li>
|
||
|
||
<li class="l2 js-l2 link " data-id="591">
|
||
<a class="js-l2-link" href="https://investors.ebayinc.com/contact-us-and-resources/faq/default.aspx">Resources & Contact</a>
|
||
</li>
|
||
|
||
<li class="l2 js-l2 link " data-id="8564">
|
||
<a class="js-l2-link" href="https://www.ebayinc.com/investors/investor-day/">Investor Day</a>
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
|
||
</li>
|
||
|
||
<li class="l1 js-l1 link has-children js-has-children" data-id="9997">
|
||
<a class="js-l1-link" href="https://careers.ebayinc.com/" aria-controls="subnav-careers" >Careers</a>
|
||
|
||
|
||
|
||
<ul class="js-mobile-subnav" id="subnav-careers">
|
||
|
||
<li class="l2 js-l2 link " data-id="9998">
|
||
<a class="js-l2-link" href="https://careers.ebayinc.com/">Overview</a>
|
||
</li>
|
||
|
||
<li class="l2 js-l2 link " data-id="9999">
|
||
<a class="js-l2-link" href="https://careers.ebayinc.com/how-we-hire/">How We Hire</a>
|
||
</li>
|
||
|
||
<li class="l2 js-l2 link " data-id="10000">
|
||
<a class="js-l2-link" href="https://careers.ebayinc.com/jobs-by-location/">Jobs by Location</a>
|
||
</li>
|
||
|
||
<li class="l2 js-l2 link " data-id="10001">
|
||
<a class="js-l2-link" href="https://careers.ebayinc.com/how-we-work/">How We Work</a>
|
||
</li>
|
||
|
||
<li class="l2 js-l2 link " data-id="10002">
|
||
<a class="js-l2-link" href="https://careers.ebayinc.com/jobs-by-category/">Jobs by Category</a>
|
||
</li>
|
||
|
||
<li class="l2 js-l2 link " data-id="10003">
|
||
<a class="js-l2-link" href="https://careers.ebayinc.com/our-culture/">Our Culture</a>
|
||
</li>
|
||
|
||
<li class="l2 js-l2 link " data-id="10004">
|
||
<a class="js-l2-link" href="https://careers.ebayinc.com/our-benefits/">Our Benefits</a>
|
||
</li>
|
||
|
||
<li class="l2 js-l2 link " data-id="10005">
|
||
<a class="js-l2-link" href="https://careers.ebayinc.com/student-opportunities/">Student Opportunities</a>
|
||
</li>
|
||
|
||
<li class="l2 js-l2 link " data-id="10006">
|
||
<a class="js-l2-link" href="https://jobs.ebayinc.com/us/en/recommended-jobs">Recommended Jobs</a>
|
||
</li>
|
||
|
||
<li class="l2 js-l2 link " data-id="10009">
|
||
<a class="js-l2-link" href="https://careers.ebayinc.com/talent-privacy-notice/">Talent Privacy Notice</a>
|
||
</li>
|
||
|
||
<li class="l2 js-l2 link " data-id="10007">
|
||
<a class="js-l2-link" href="https://jobs.ebayinc.com/us/en/jobcart">Saved Jobs</a>
|
||
</li>
|
||
|
||
<li class="l2 js-l2 link " data-id="10008">
|
||
<a class="js-l2-link" href="https://jobs.ebayinc.com/us/en/search-results">Search Jobs</a>
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
|
||
|
||
<div class="secondary-navigation js-secondary-navigation mobile" role="list" aria-label="Quick Links">
|
||
|
||
<span role="listitem" class="js-secondary footer-only"><a class="js-secondary-link" href="https://www.ebay.com" data-id="2454">eBay.com</a></span>
|
||
|
||
<span role="listitem" class="js-secondary "><a class="js-secondary-link" href="https://www.ebayinc.com/stories/press-room/" data-id="142">Press Room</a></span>
|
||
|
||
<span role="listitem" class="js-secondary "><a class="js-secondary-link" href="https://www.ebayinc.com/company/follow-us/" data-id="144">Follow Us</a></span>
|
||
|
||
<span role="listitem" class="js-secondary "><a class="js-secondary-link" href="https://www.ebayinc.com/company/contact-us/" data-id="143">Contact Us</a></span>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
|
||
<form action="https://www.ebayinc.com/search/" method="get" class="main-search-mobile mobile js-site-search-form round-corners" role="search" aria-label="Search Site">
|
||
<input type="text" name="query" class="js-site-search-input" placeholder="Search eBayInc.com" maxlength="128" />
|
||
<button type="submit" class="js-site-search-submit">Search Website</button>
|
||
</form>
|
||
|
||
|
||
|
||
<div class="secondary-navigation js-secondary-navigation desktop" role="list" aria-label="Quick Links">
|
||
|
||
<span role="listitem" class="js-secondary footer-only"><a class="js-secondary-link" href="https://www.ebay.com" data-id="2454">eBay.com</a></span>
|
||
|
||
<span role="listitem" class="js-secondary "><a class="js-secondary-link" href="https://www.ebayinc.com/stories/press-room/" data-id="142">Press Room</a></span>
|
||
|
||
<span role="listitem" class="js-secondary "><a class="js-secondary-link" href="https://www.ebayinc.com/company/follow-us/" data-id="144">Follow Us</a></span>
|
||
|
||
<span role="listitem" class="js-secondary "><a class="js-secondary-link" href="https://www.ebayinc.com/company/contact-us/" data-id="143">Contact Us</a></span>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
|
||
<form action="https://www.ebayinc.com/search/" method="get" class="main-search-desktop desktop js-site-search-form js-site-search-desktop" role="search" aria-label="Search Site">
|
||
<input type="text" name="query" class="js-site-search-input" placeholder="Search eBayInc.com" maxlength="128" aria-label="Type your search now and press enter or press escape to close." />
|
||
<button type="submit" class="js-site-search-submit">Search Website</button>
|
||
</form>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
</sticky-scroll>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div style="display: none;">
|
||
|
||
<a class="js-tertiary-link" href="https://www.ebayinc.com/terms-of-use/" data-id="146">Terms of Use</a>
|
||
|
||
<a class="js-tertiary-link" href="https://www.ebayinc.com/company/privacy-center/" data-id="147">Privacy</a>
|
||
|
||
<a class="js-tertiary-link" href="https://www.ebayinc.com/accessibility/" data-id="2796">Accessibility</a>
|
||
|
||
<a class="js-tertiary-link" href="https://www.ebayinc.com/stories/press-room/" data-id="9192">Settlements</a>
|
||
|
||
</div>
|
||
|
||
</header>
|
||
</template>
|
||
</ebi-header>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<main id="main-content" class="main-content">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="main-content__inner main-content__inner--wide main-content__inner--no-margin">
|
||
|
||
|
||
<div class="stories-article blog-post content-width content-width--desktop">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<article class="main-col ">
|
||
|
||
<div class="content">
|
||
<div class="intro">
|
||
<div class="intro-wrapper">
|
||
|
||
|
||
|
||
<div class="blog-primary-attrib">
|
||
<a href="https://innovation.ebayinc.com/stories/archive/?tag=cloud" title="More articles in Cloud">Cloud</a>
|
||
</div>
|
||
|
||
|
||
<h1>Zero Downtime, Instant Deployment and Rollback</h1>
|
||
|
||
|
||
|
||
|
||
|
||
<div class="top-bar">
|
||
<div class="date-authors">
|
||
<time datetime="2013-11-21" class="article-date" aria-label="November 21, 2013" role="contentinfo"><span aria-hidden="true">Nov 21, 2013</span></time>
|
||
<span class="divider"></span>
|
||
<div class="authors">By: Suresh Mathew</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
<share-icons title="Zero Downtime, Instant Deployment and Rollback" link="https://innovation.ebayinc.com/stories/zero-downtime-instant-deployment-and-rollback/?utm_source=other&utm_medium=Social&utm_campaign=eBayInc_ShareIcons" twitter="https://innovation.ebayinc.com/stories/zero-downtime-instant-deployment-and-rollback/?utm_source=twitter&utm_medium=Social&utm_campaign=eBayInc_ShareIcons" linkedin="https://innovation.ebayinc.com/stories/zero-downtime-instant-deployment-and-rollback/?utm_source=linkedin&utm_medium=Social&utm_campaign=eBayInc_ShareIcons" facebook="https://innovation.ebayinc.com/stories/zero-downtime-instant-deployment-and-rollback/?utm_source=facebook&utm_medium=Social&utm_campaign=eBayInc_ShareIcons"></share-icons>
|
||
|
||
</div>
|
||
|
||
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="content-container">
|
||
|
||
<div class="cms-content clear story-article-content no-gallery">
|
||
|
||
<p>Deployment to the cloud is an evolving area. While many tools are available that deploy applications to nodes (machines) in the cloud, zero deployment downtime is rare or nonexistent. In this post, we’ll take a look at this problem and propose a solution. The focus of this post is on web applications—specifically, the server-side applications that run on a port (or a shared resource).</p>
|
||
<p>In traditional deployment environments, when switching a node in the cloud from the current version to a new version, there is a window of time when the node is unusable in terms of serving traffic. During that window, the node is taken out of traffic, and after the switch it is brought back into traffic.</p>
|
||
<p>In a production environment, this downtime is not trivial. Capacity planning in advance usually accommodates the loss of nodes by adding a few more machines. However, the problem becomes magnified where principles like continuous delivery and deployment are adopted.</p>
|
||
<p>To provide effective and non-disruptive deployment and rollback, a Platform as a Service (PaaS) should possess these two characteristics:</p>
|
||
<ul><li>Best utilization of resources to minimize deployment downtime as much as possible</li>
|
||
<li>Instantaneous deployment and rollback</li>
|
||
</ul><h3>Problem analysis</h3>
|
||
<p>Suppose we have a node running Version1 and we are deploying Version2 to that node. This is how the lifecycle would look:</p>
|
||
<p> <a href="/assets/Uploads/Blog/2013/11/typical_deployment_workflow.png" target="_blank" rel="noopener"><img alt="typical deployment workflow" src="assets/Uploads/Blog/2013/11/typical_deployment_workflow.png" width="620" title=""></a></p>
|
||
<p>Every machine in the pool undergoes this lifecycle. The machine stops serving traffic right after the first step and cannot resume serving traffic until the very last step. During this time, the node is effectively offline.</p>
|
||
<p>At eBay, the deployment lifecycle takes a reasonably sized application about 9 minutes. For an organization of any size, many days of availability can be lost if every node must go into offline phase during deployment.</p>
|
||
<p>So, the more we minimize the off-traffic time, the closer we get to instant/zero-downtime deployment/rollback.</p>
|
||
<h3>Proposed solutions</h3>
|
||
<p>Now let’s look into a few options for achieving this goal.</p>
|
||
<h3>A/B switch</h3>
|
||
<p>In this approach, we have a set of nodes standing by. We deploy the new version to those nodes and switch the traffic to them instantly. If we keep the old nodes in their original state, we could do instant rollback as well. A load balancer fronts the application and is responsible for this switch upon request.</p>
|
||
<p>The disadvantage to this approach is that some nodes will be idle, and unless you have true elasticity, it will amplify the node wastage. When a lot of deployments are occurring at the same time, you may end up needing to double the capacity to handle the load.</p>
|
||
<h3>Software load balancers</h3>
|
||
<p>In this approach, we configure the software load balancer fronting the application with more than one end point so that it can effectively route the traffic to one or another. This solution is elegant and offers much more control at the software level. However, applications will have to be designed with this approach in mind. In particular, the load balancer’s contract with the application will be very critical to successful implementation.</p>
|
||
<p>From a resource standpoint, both this and the previous approach are similar; both use additional resources, like memory and CPU. The first approach needs the whole node, whereas the other one is accommodated inside the same node.</p>
|
||
<h3>Zero downtime</h3>
|
||
<p>With this approach, we don’t keep a set of machines; rather, we delay the port binding. Shared resource acquisition is delayed until the application starts up. The ports are switched after the application starts, and the old version is also kept running (without an access point) to roll back instantly if needed.</p>
|
||
<p>Similar solutions exist already for common servers.</p>
|
||
<h3>Parallel deployment – Apache Tomcat</h3>
|
||
<p>Apache Tomcat has added the parallel deployment feature to their version 7 release. They let two versions of the application run at the same time and take the latest version as default. They achieve this capability through their <a href="http://tomcat.apache.org/tomcat-7.0-doc/config/context.html" rel="noopener" target="_blank">context container</a>. The versioning is pretty simple and straightforward, appending ‘##’ to the war name. For example, webapp##1.war and webapp##2.war can coexist within the same context; and for rolling back to webapp##1, all that is required is to delete webapp##2.</p>
|
||
<p>Although this feature might appear to be a trivial solution, apps need to take special care with shared files, caches (as much write-through as possible), and lower-layer socket usage.</p>
|
||
<h3>Delayed port binding</h3>
|
||
<p>This solution is not available in web servers currently. A typical server first binds to the port, then starts the services. Apache lets you delay binding to some extent by overriding bindOnInit, but still the binding occurs after the connector is started.</p>
|
||
<p>What we propose here is the ability to start the server without binding the port and essentially without starting the connector. Later, a separate command will start and bind the connector. Version 2 of the software can be deployed while version 1 is running and already bound. When version 2 is started later, we can unbind version 1 and bind version 2. With this approach, the node is effectively offline only for a few seconds.</p>
|
||
<p>The lifecycle for delayed port binding would look like this:</p>
|
||
<p><a href="/assets/Uploads/Blog/2013/11/delayed_port_binding_workflow.png" target="_blank" rel="noopener"><img alt="delayed_port_binding_workflow" src="assets/Uploads/Blog/2013/11/delayed_port_binding_workflow.png" width="620" title=""></a></p>
|
||
<p>However, there is still a few-second glitch, so we will look at the next solution.</p>
|
||
<h3>Advanced port binding</h3>
|
||
<p>Now that we have minimized the window of unavailability to a few seconds, we will see if we can reduce it to zero. The only way to do that would be to bring version 2 up before version 1 goes down. But first:</p>
|
||
<h4>Breaking the myth: ‘Address already in use’</h4>
|
||
<p>If you’ve used a server to run an application, I am sure you’ve seen this exception at least once. Let’s consider this scenario: We start the server and bind to the port. If we try to start another instance (or another server with the same port), the process fails with the error ‘Address already in use’. We kill the old server and start it again, and it works.</p>
|
||
<p>But have you ever given a thought as to why we cannot have two processes listening to the same port? What could be preventing it? The answer is “nothing”! It is indeed possible to have two processes listening to the same port.</p>
|
||
<h4>SO_REUSEPORT</h4>
|
||
<p>The reason we see this error in typical environments is because most servers bind with the SO_REUSEPORT option off. This option lets two (or more) processes bind to the same port, provided the application that bound the first process had this option set while binding. If this option is off, the OS interprets the setting to mean that the port is not to be shared, and it blocks subsequent processes from binding to that port.</p>
|
||
<p>The SO_REUSEPORT option also provides fair distribution of requests (important since threading suffers from bottlenecks in multi-cores). Both of the threading approaches—one thread listening and then dispatching, as well as multiple threads listening—suffer from the under/over utilization of cycles. An additional advantage of SO_REUSEPORT is that it takes care of sending the datagram from the same client to the same server process. However, it has a shortcoming: packets might be dropped if new processes are added or removed on the fly. This shortcoming is being addressed.</p>
|
||
<p>You can find a good article about SO_REUSEPORT at <a href="https://lwn.net/Articles/542629/" rel="noopener" target="_blank">this link</a> on LWN.net. If you want to try this out yourself, see <a href="http://freeprogrammersblog.vhex.net/post/linux-39-introduced-new-way-of-writing-socket-servers/2" rel="noopener" target="_blank">this post</a> on the Free-Programmer’s Blog.</p>
|
||
<p>The SO_REUSEPORT option address two issues:</p>
|
||
<ul><li>The small glitch between the application version switching: The node can serve traffic all the time, effectively giving us zero downtime.</li>
|
||
<li>Improved scheduling: Data indicates (see <a href="https://lwn.net/Articles/542718/" rel="noopener" target="_blank">this article</a> on LWN.net) that thread scheduling is not fair; the ratio between the busiest thread versus the one with the least connections is 3:1.</li>
|
||
</ul><p> <a href="/assets/Uploads/Blog/2013/11/zero_downtime_workflow.png" target="_blank" rel="noopener"><img alt="zero_downtime_workflow" src="assets/Uploads/Blog/2013/11/zero_downtime_workflow.png" width="620" title=""></a></p>
|
||
<p>Please note that SO_REUSEPORT is not the same as SO_REUSEADDRESS, and that it is not available in Java as not all operating systems support it.</p>
|
||
<h3>Conclusion</h3>
|
||
<p>Applications can successfully serve traffic during deployment, if we carefully design and manage those applications to do so. Combining both late binding and port reuse, we can effectively achieve zero downtime. And if we keep the standby process around, we will be able to do an instant rollback as well.</p>
|
||
|
||
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="bottom">
|
||
|
||
|
||
<share-icons title="Zero Downtime, Instant Deployment and Rollback" link="https://innovation.ebayinc.com/stories/zero-downtime-instant-deployment-and-rollback/?utm_source=other&utm_medium=Social&utm_campaign=eBayInc_ShareIcons" twitter="https://innovation.ebayinc.com/stories/zero-downtime-instant-deployment-and-rollback/?utm_source=twitter&utm_medium=Social&utm_campaign=eBayInc_ShareIcons" linkedin="https://innovation.ebayinc.com/stories/zero-downtime-instant-deployment-and-rollback/?utm_source=linkedin&utm_medium=Social&utm_campaign=eBayInc_ShareIcons" facebook="https://innovation.ebayinc.com/stories/zero-downtime-instant-deployment-and-rollback/?utm_source=facebook&utm_medium=Social&utm_campaign=eBayInc_ShareIcons"></share-icons>
|
||
|
||
|
||
<p class="article-topics-holder" tabindex="0">
|
||
|
||
|
||
<span class="tiny-title">Tag:</span>
|
||
<a href="/stories/archive/?tag=cloud" title="More articles in Cloud">Cloud</a>
|
||
|
||
</p>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<nav class="page-nav">
|
||
|
||
<a class="prev" href="/stories/a-middle-approach-to-schema-design-in-oltp-applications/"><span class="hover">Previous Article<span class="colon">:</span></span> <span class="title">A Middle Approach to Schema Design in OLTP Applications</span></a>
|
||
|
||
|
||
|
||
<a class="next" href="/stories/front-end-renaissance-at-ebay/"><span class="hover">Next Article<span class="colon">:</span></span> <span class="title">Front-end Renaissance at eBay</span></a>
|
||
|
||
</nav>
|
||
|
||
|
||
|
||
</div>
|
||
|
||
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</article>
|
||
|
||
|
||
<aside class="side-col blog-sidebar">
|
||
|
||
|
||
|
||
|
||
<section class="blog-post-topic-module blog-side-col-module white-bg">
|
||
<h3 class="stories-side-col-heading">Platform Infrastructure</h3>
|
||
|
||
<p>Highly scalable, massively reliable, and always on.</p>
|
||
|
||
<div class="cta">
|
||
<a class="button" href="/stories/archive/?topic=platform-infrastructure">More Articles</a>
|
||
</div>
|
||
</section>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<section class="blog-related-module blog-side-col-module white-bg">
|
||
<h3 class="stories-side-col-heading">Related Articles</h3>
|
||
|
||
<a class="block-level-link" href="/stories/nitzan-mekel-bobrov-on-ai-and-the-future-of-shopping-online-the-value-of-building-in-house-and-more/">
|
||
<div class="title">Podcast: Nitzan Mekel-Bobrov on AI, the Future of Shopping Online, and the Value of Building In-House</div>
|
||
<div class="sub clear"><time datetime="2024-02-28" class="article-date" aria-label="February 28, 2024" role="contentinfo"><span aria-hidden="true">Feb 28, 2024</span></time> </div>
|
||
</a>
|
||
|
||
<a class="block-level-link" href="/stories/ebay-chief-technology-officer-mazen-rawashdeh-talks-ai-embracing-tech-disruption-on-bloomberg-podcast/">
|
||
<div class="title">eBay Chief Technology Officer Mazen Rawashdeh Talks AI, Embracing Tech Disruption on Bloomberg Podcast</div>
|
||
<div class="sub clear"><time datetime="2023-06-27" class="article-date" aria-label="June 27, 2023" role="contentinfo"><span aria-hidden="true">Jun 27, 2023</span></time> </div>
|
||
</a>
|
||
|
||
<a class="block-level-link" href="/stories/why-and-how-ebay-pivoted-to-opentelemetry/">
|
||
<div class="title">Why and How eBay Pivoted to OpenTelemetry</div>
|
||
<div class="sub clear"><time datetime="2022-12-05" class="article-date" aria-label="December 5, 2022" role="contentinfo"><span aria-hidden="true">Dec 5, 2022</span></time> </div>
|
||
</a>
|
||
|
||
<a class="block-level-link" href="/stories/graphload-a-framework-to-load-and-update-over-ten-billion-vertex-graphs-with-performance-and-consistency/">
|
||
<div class="title">GraphLoad: A Framework to Load and Update Over Ten-Billion-Vertex Graphs with Performance and Consistency </div>
|
||
<div class="sub clear"><time datetime="2021-12-16" class="article-date" aria-label="December 16, 2021" role="contentinfo"><span aria-hidden="true">Dec 16, 2021</span></time> </div>
|
||
</a>
|
||
|
||
<a class="block-level-link" href="/stories/ebays-global-secondary-indexes/">
|
||
<div class="title">eBay’s Global Secondary Indexes</div>
|
||
<div class="sub clear"><time datetime="2021-11-30" class="article-date" aria-label="November 30, 2021" role="contentinfo"><span aria-hidden="true">Nov 30, 2021</span></time> </div>
|
||
</a>
|
||
|
||
</section>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</aside>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</main>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<ebi-footer></ebi-footer>
|
||
|
||
|
||
|
||
|
||
<a class="back-to-top aria-only" href="/stories/zero-downtime-instant-deployment-and-rollback/#skip-to-main">Back to Top</a>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<script src="https://beep.ebayinc.to/beep.js" async></script>
|
||
|
||
|
||
|
||
|
||
<script>window.dataLayer = window.dataLayer || []; window.dataLayer.push({"event":"story_article","attributes":{"publish_date":"2013-11-21","story_topic":"Platform Infrastructure","story_tag":"Cloud"}});</script>
|
||
|
||
|
||
|
||
|
||
|
||
<script>
|
||
(function() {
|
||
var imgEl = new Image();
|
||
imgEl.src = '//' + location.host + location.pathname.replace(/\/+$/, '') + '/ebi.gif';
|
||
imgEl.style = 'position: absolute; top: 0';
|
||
imgEl.alt = '';
|
||
document.querySelector('body').appendChild(imgEl);
|
||
})();
|
||
</script>
|
||
|
||
|
||
|
||
|
||
<script>
|
||
var _plsubtInp = {
|
||
'eventFamily': 'EBAYINC',
|
||
'samplingRate': 100,
|
||
'pageLoadTime': new Date().getTime(),
|
||
'pageId': 4685387,
|
||
'disableImp': false
|
||
};
|
||
var _plsUBTTQ = [];
|
||
</script>
|
||
<script type="text/javascript" defer src="https://ir.ebaystatic.com/cr/v/c01/250701JZ48C6XWVCKCN2.js"></script>
|
||
<script>
|
||
window.addEventListener('load', () => {
|
||
_plsUBTTQ.push(['customEvts', 'EBAYINC', 'CLIENT_PAGE_VIEW', { 'imp': '4685387' }]);
|
||
});
|
||
</script>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<script type="text/javascript">
|
||
_linkedin_partner_id = "3677196";
|
||
window._linkedin_data_partner_ids = window._linkedin_data_partner_ids || [];
|
||
window._linkedin_data_partner_ids.push(_linkedin_partner_id);
|
||
</script><script type="text/javascript">
|
||
(function(){var s = document.getElementsByTagName("script")[0];
|
||
var b = document.createElement("script");
|
||
b.type = "text/javascript";b.async = true;
|
||
b.src = "https://snap.licdn.com/li.lms-analytics/insight.min.js";
|
||
s.parentNode.insertBefore(b, s);})();
|
||
</script>
|
||
<noscript>
|
||
<img height="1" width="1" style="display:none;" alt="" src="https://px.ads.linkedin.com/collect/?pid=3677196&fmt=gif" />
|
||
</noscript>
|
||
|
||
|
||
|
||
|
||
<script>
|
||
!function(e,t,n,s,u,a){e.twq||(s=e.twq=function(){s.exe?s.exe.apply(s,arguments):s.queue.push(arguments);
|
||
},s.version='1.1',s.queue=[],u=t.createElement(n),u.async=!0,u.src='//static.ads-twitter.com/uwt.js',
|
||
a=t.getElementsByTagName(n)[0],a.parentNode.insertBefore(u,a))}(window,document,'script');
|
||
|
||
|
||
|
||
|
||
|
||
twq('init','o2r23');
|
||
twq('track','PageView');
|
||
|
||
|
||
twq('init','o7ejw');
|
||
twq('track','PageView');
|
||
</script>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<script type="text/javascript" src="https://static.ebayinc.com/static/theme/javascript/build/jquery.js?v=752435c"></script><script type="text/javascript" src="https://static.ebayinc.com/static/theme/javascript/build/foot.js?v=752435c"></script><script type="text/javascript" src="https://static.ebayinc.com/static/theme/javascript/foot/modules/special/article-image-modal.js?v=752435c"></script><script type="text/javascript" src="/xkv61/LGG/pIgd/G5QS/aNtZ/rt9bV25m/TARAAQE/XBYrVn1p/HAsc?v=c0055448-648a-4aaf-b7cf-d4812427173b" defer></script></body>
|
||
</html>
|