{"id":13290,"date":"2021-01-20T10:35:35","date_gmt":"2021-01-20T09:35:35","guid":{"rendered":"https:\/\/www.codemotion.com\/magazine\/?p=13290"},"modified":"2021-12-23T11:41:31","modified_gmt":"2021-12-23T10:41:31","slug":"microservices-migration","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/microservices\/microservices-migration\/","title":{"rendered":"Airbnb&#8217;s migration from monolith to microservices"},"content":{"rendered":"\t\t\t\t<div class=\"wp-block-uagb-table-of-contents uagb-toc__align-left uagb-toc__columns-1  uagb-block-03a2b052      \"\n\t\t\t\t\tdata-scroll= \"1\"\n\t\t\t\t\tdata-offset= \"30\"\n\t\t\t\t\tstyle=\"\"\n\t\t\t\t>\n\t\t\t\t<div class=\"uagb-toc__wrap\">\n\t\t\t\t\t\t<div class=\"uagb-toc__title\">\n\t\t\t\t\t\t\tTable Of Contents\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"uagb-toc__list-wrap \">\n\t\t\t\t\t\t<ol class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#the-early-days-at-airbnb\" class=\"uagb-toc-link__trigger\">The early days at Airbnb<\/a><li class=\"uagb-toc__list\"><a href=\"#why-you-need-a-microservices-migration\" class=\"uagb-toc-link__trigger\">Why you need a microservices migration?<\/a><li class=\"uagb-toc__list\"><a href=\"#migrating-to-microservices-from-a-service-orientated-architecture\" class=\"uagb-toc-link__trigger\">Migrating to Microservices from a Service Orientated Architecture<\/a><li class=\"uagb-toc__list\"><a href=\"#principles-of-service-design-applied-to-microservices-migration\" class=\"uagb-toc-link__trigger\">Principles of Service Design applied to Microservices Migration\u00a0<\/a><\/ol>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\n\n\n<p>So you\u2019ve decided to <strong>migrate from monolith to <span id=\"urn:enhancement-105\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/microservices\">microservices<\/span><\/strong>, what next? Such a redesign to <a href=\"https:\/\/www.codemotion.com\/magazine\/dev-topics\/service-oriented-architecture\/\" class=\"ek-link\"><span id=\"urn:enhancement-148\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/server_computing\">service<\/span>-oriented <span id=\"urn:enhancement-92\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/computer_architecture\">architecture<\/span> (<span id=\"urn:enhancement-158\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/soa\">SOA<\/span>)<\/a> is a long, arduous journey that benefits from an incremental, iterative approach. Yet, such a <span id=\"urn:enhancement-106\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/microservices\">microservices<\/span> migration often must be done while still shipping new features, accelerating <span id=\"urn:enhancement-78\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/software_developer\">developer<\/span> velocity, and growing the <span id=\"urn:enhancement-111\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/team\">team<\/span> in addition to ensuring there are no <span id=\"urn:enhancement-10\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/performance\">performance<\/span> regressions.<\/p>\n\n\n\n<p>Jessica Tai is a <span id=\"urn:enhancement-1\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/software_engineering\">software engineer<\/span> at <a href=\"https:\/\/www.airbnb.it\/\" target=\"_blank\" aria-label=\"Airbnb (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\"><span id=\"urn:enhancement-162\" class=\"textannotation disambiguated wl-organization\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/airbnb\">Airbnb<\/span><\/a> and works as an an infrastructure <span id=\"urn:enhancement-122\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/engineers_degree\">engineer<\/span> on the Core <span id=\"urn:enhancement-138\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/server_computing\">Services<\/span> <span id=\"urn:enhancement-112\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/team\">team<\/span>. She leads the user <span id=\"urn:enhancement-149\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/server_computing\">service<\/span>, which integrates with all business verticals as one of <span id=\"urn:enhancement-163\" class=\"textannotation disambiguated wl-organization\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/airbnb\">Airbnb<\/span>\u2019s highest trafficked <span id=\"urn:enhancement-139\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/server_computing\">services<\/span>. In addition to driving <span id=\"urn:enhancement-3\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/best_practice\">best practices<\/span> for <span id=\"urn:enhancement-150\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/server_computing\">service<\/span> development, she focuses on <span id=\"urn:enhancement-13\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/leadership\">Leadership<\/span> &amp; Development as the Vice President of the <span id=\"urn:enhancement-164\" class=\"textannotation disambiguated wl-organization\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/airbnb\">Airbnb<\/span> <a href=\"https:\/\/www.codemotion.com\/magazine\/articles\/stories\/women-in-tech-interview-with-claudia-vicol\/\" class=\"ek-link\">women in tech<\/a> community.\u00a0\u00a0<\/p>\n\n\n\n<p>At <a href=\"https:\/\/www.codemotion.com\/magazine\/articles\/events\/50th-anniversary-moon\/\" class=\"ek-link\"><span id=\"urn:enhancement-14\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/codemotion_2\">Codemotion<\/span> Milan<\/a>, she shared the story of <span id=\"urn:enhancement-165\" class=\"textannotation disambiguated wl-organization\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/airbnb\">Airbnb<\/span>&#8216;s journey focusing on how <span id=\"urn:enhancement-166\" class=\"textannotation disambiguated wl-organization\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/airbnb\">Airbnb<\/span> is building, operating, and <span id=\"urn:enhancement-26\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/scalability\">scaling<\/span> its expanding network of <span id=\"urn:enhancement-140\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/server_computing\">services<\/span> and changes to its <span id=\"urn:enhancement-7\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/organization\">organization<\/span> to support the migration. We sharing some of the main themes and points here, but you can gain the full story by watching her presentation below.\u00a0<\/p>\n\n\n\n<p>[jwp-video n=&#8221;1&#8243;]<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-the-early-days-at-airbnb\">The early days at Airbnb<\/h2>\n\n\n\n<p>Jessica shares,<\/p>\n\n\n\n<p>&#8220;When I joined <span id=\"urn:enhancement-167\" class=\"textannotation disambiguated wl-organization\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/airbnb\">Airbnb<\/span> in 2014, the <span id=\"urn:enhancement-47\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/engineering\">engineering<\/span> <span id=\"urn:enhancement-113\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/team\">team<\/span> was much smaller, less than 100 people. We had a new hire tradition of welcoming employees to the company by having them run underneath what we call a human tunnel. At the end of this tunnel was a large beanbag for <span id=\"urn:enhancement-116\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/engineers_degree\">engineers<\/span> to jump onto while we all clapped and cheered. After our new hires completed their human tunnel run, we gave them an onboarding task and our <span id=\"urn:enhancement-49\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/monolithic_architecture\">monolithic<\/span> code base. At the time, almost all of our <span id=\"urn:enhancement-117\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/engineers_degree\">engineers<\/span> were coding and our monolith was daily.<\/p>\n\n\n\n<p>Now in 2019 <span id=\"urn:enhancement-168\" class=\"textannotation disambiguated wl-organization\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/airbnb\">Airbnb<\/span> has over 2000 <span id=\"urn:enhancement-118\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/engineers_degree\">engineers<\/span> across the world so the human tunnel is no more.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-why-you-need-a-microservices-migration\">Why you need a microservices migration?<\/h2>\n\n\n\n<p>Jessica details:<\/p>\n\n\n\n<p>&#8220;At <span id=\"urn:enhancement-169\" class=\"textannotation disambiguated wl-organization\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/airbnb\">Airbnb<\/span>, our <strong><span id=\"urn:enhancement-50\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/monolithic_architecture\">monolithic<\/span> <span id=\"urn:enhancement-75\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/application_software\">application<\/span><\/strong> was a<strong> <span id=\"urn:enhancement-5\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/ruby_on_rails\">Ruby on Rails<\/span> app<\/strong>. We refer to this as monorail. A monolith is a single tear unit responsible for both client and <span id=\"urn:enhancement-11\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/server-side\">server-side<\/span> functionality. This means that the model view and controller <span id=\"urn:enhancement-61\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/abstraction_layer\">layers<\/span> are together in a single <span id=\"urn:enhancement-76\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/application_software\">application<\/span>.<\/p>\n\n\n\n<p>And this was a really easy place for me to get started. It was <span id=\"urn:enhancement-32\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/inheritance_object-oriented_programming\">super<\/span> convenient with the presentation <span id=\"urn:enhancement-62\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/abstraction_layer\">layer<\/span> being in the same place as the <span id=\"urn:enhancement-4\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/business_logic\">business logic<\/span> and the <span id=\"urn:enhancement-130\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/data\">data<\/span> accessing. <span id=\"urn:enhancement-170\" class=\"textannotation disambiguated wl-organization\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/airbnb\">Airbnb<\/span> had a really large <span id=\"urn:enhancement-22\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/database\">database<\/span> that had All types of <span id=\"urn:enhancement-131\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/data\">data<\/span> stores shared in a single place.&#8221;<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/passportloverblog.files.wordpress.com\/2020\/07\/screenshot-2020-07-15-at-17.44.53.jpeg\" alt=\"\" class=\"wp-image-13571\"\/><\/figure><\/div>\n\n\n\n<p>In terms of the booking flow, Jessica detailed the work that preceded the <strong><span id=\"urn:enhancement-107\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/microservices\">microservices<\/span> migration<\/strong>: &#8220;My onboarding task was to create a feature requiring a guest to send a message to their host. This required some new text in the view, accessing the messaging <span id=\"urn:enhancement-132\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/data\">data<\/span> model and some business validation logic. Together my new hire changes shipped in one up MonoRail so if MonoRail could handle everything, why did we bother taking the time to move away from it?&#8221;<\/p>\n\n\n\n<p>The short answer is for the people. <span id=\"urn:enhancement-171\" class=\"textannotation disambiguated wl-organization\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/airbnb\">Airbnb<\/span>&#8216;s <span id=\"urn:enhancement-48\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/engineering\">engineering<\/span> <span id=\"urn:enhancement-114\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/team\">team<\/span> was growing rapidly, often doubling year over year. The need of the business was also <strong>evolving quickly<\/strong>. Jessica explains, &#8220;So we needed an <span id=\"urn:enhancement-93\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/computer_architecture\">architecture<\/span> that could move quickly and grow with our <span id=\"urn:enhancement-115\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/team\">team<\/span>. In <span id=\"urn:local-annotation-362653\" class=\"textannotation disambiguated\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/monorail\">MonoRail<\/span>, we were seeing difficulties with more production incidents. <span id=\"urn:enhancement-119\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/engineers_degree\">Engineers<\/span> had to spend more time firefighting instead of developing features. Our codebase was tightly coupled and difficult to navigate and debug. It also took a long time to <span id=\"urn:enhancement-65\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/software_deployment\">deploy<\/span> our code. When I first joined, I could <span id=\"urn:enhancement-66\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/software_deployment\">deploy<\/span> a code change on MonoRail in just a few minutes. Now it took several hours just to get a single change out.<\/p>\n\n\n\n<p>This made <span id=\"urn:enhancement-120\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/engineers_degree\">engineers<\/span> very frustrated and <strong><span id=\"urn:enhancement-8\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/productivity\">productivity<\/span><\/strong> was at an all-time low. So we need to figure out a way to <strong>improve our <\/strong>architecture so we could continue growing our business.&#8221; Enter <a href=\"https:\/\/www.codemotion.com\/magazine\/dev-hub\/backend-dev\/how-to-transition-from-monolithic-systems-to-microservices-with-hexagonal-architecture\/\" target=\"_blank\" rel=\"noopener\">microservices<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-migrating-to-microservices-from-a-service-orientated-architecture\">Migrating to Microservices from a Service Orientated Architecture<\/h2>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/01\/2-5-1024x654.png\" alt=\"microservices migration: monolithic vs SOA vs microservices\" class=\"wp-image-13296\" width=\"655\" height=\"418\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/01\/2-5-1024x654.png 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/01\/2-5-300x191.png 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/01\/2-5-768x490.png 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/01\/2-5-1536x980.png 1536w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/01\/2-5.png 2048w\" sizes=\"auto, (max-width: 655px) 100vw, 655px\" \/><\/figure><\/div>\n\n\n\n<p>\u00a0<span id=\"urn:enhancement-172\" class=\"textannotation disambiguated wl-organization\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/airbnb\">Airbnb<\/span> opted for <span id=\"urn:enhancement-151\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/server_computing\">service<\/span>-oriented <span id=\"urn:enhancement-95\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/computer_architecture\">architecture<\/span> (<span id=\"urn:enhancement-159\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/soa\">SOA<\/span>) &#8211; a network of loosely coupled <span id=\"urn:enhancement-141\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/server_computing\">services<\/span>, where some client makes a request flows through an <a href=\"https:\/\/www.codemotion.com\/magazine\/dev-hub\/backend-dev\/api-economy-code-api-money\/\" class=\"ek-link\"><span id=\"urn:enhancement-44\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/application_programming_interface\">API<\/span><\/a> <span id=\"urn:enhancement-255\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/gateway\">gateway<\/span>, and that fans out to various other <span id=\"urn:enhancement-142\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/server_computing\">services<\/span>, which can call <span id=\"urn:enhancement-143\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/server_computing\">services<\/span> or other <span id=\"urn:enhancement-133\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/data\">data<\/span> stores. According to Jessica, &#8220;the benefits that we saw for <span id=\"urn:enhancement-160\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/soa\">SOA<\/span> is that each <span id=\"urn:enhancement-152\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/server_computing\">service<\/span> is built independently and can be<strong> scaled separatel<\/strong>y as well. Smaller <span id=\"urn:enhancement-110\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/team\">teams<\/span> of <span id=\"urn:enhancement-121\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/engineers_degree\">engineers<\/span> could work on a <span id=\"urn:enhancement-153\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/server_computing\">service<\/span> so it&#8217;s much easier to manage the changes. We hoped this would help solve our <span id=\"urn:enhancement-79\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/software_developer\">developer<\/span> velocity problems, as well as being able to introduce new verticals.&#8221;<\/p>\n\n\n\n<p><span id=\"urn:enhancement-35\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/mobile_application_development\">Using<\/span> an <span id=\"urn:enhancement-161\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/soa\">SOA<\/span> lens we could now break a checkout page into different components. An example is the reservation <span id=\"urn:enhancement-154\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/server_computing\">service<\/span> pricing <span id=\"urn:enhancement-155\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/server_computing\">service<\/span>. And now there are beginning to look like a lot of <span id=\"urn:enhancement-144\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/server_computing\">services<\/span> on this one page that used to be handled by a single <span id=\"urn:enhancement-77\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/application_software\">application<\/span>. How can we ensure that we&#8217;re not actually making a bigger mess and entanglement for ourselves?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-principles-of-service-design-applied-to-microservices-migration\">Principles of Service Design applied to Microservices Migration&nbsp;<\/h2>\n\n\n\n<ul class=\"is-style-default wp-block-list\"><li><strong>Read\/Write<\/strong>: according to Jessica, &#8220;The service should own both the reads and writes to its own data. This means if another service is interested in particular services data, they must go through the owning services API. This helps with <strong>consistency and <span id=\"urn:local-annotation-135594\" class=\"textannotation disambiguated\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/encapsulation_object-oriented_programming\">encapsulation<\/span> of our data<\/strong>.<br><\/li><li>Services should also address a specific concern. &#8220;We wanted to avoid taking our monolith and switching to really tiny <strong>granular microservices<\/strong>.&#8221;<br><\/li><li><strong>Avoid duplicate functionality<\/strong>: &#8220;We wanted our services to be larger and focus on business functionality, but not to duplicate this functionality amongst multiple services.&#8221;<br><\/li><li><strong>Data mutation should propagate via standard events<\/strong>. &#8220;So what this means is if there&#8217;s a change to a data store and another service is interested in, it should be able to find out about this change in an asynchronous way. &#8220;<\/li><\/ul>\n\n\n\n<p>Jessica shared:<\/p>\n\n\n\n<p>&#8220;At <span id=\"urn:enhancement-173\" class=\"textannotation disambiguated wl-organization\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/airbnb\">Airbnb<\/span>, we&#8217;ve developed a <strong>Change <span id=\"urn:enhancement-134\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/data\">Data<\/span> Capture <span id=\"urn:enhancement-156\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/server_computing\">service<\/span><\/strong> called <span id=\"urn:enhancement-241\" class=\"textannotation disambiguated wl-organization\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/spinal_tap\">Spinal Tap<\/span>. <span id=\"urn:enhancement-242\" class=\"textannotation disambiguated wl-organization\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/spinal_tap\">Spinal Tap<\/span> listens to various <span id=\"urn:enhancement-135\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/data\">data<\/span> <span id=\"urn:enhancement-104\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/source_code\">sources<\/span> and with <span id=\"urn:enhancement-12\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/low_latency\">low latency<\/span> emit to a standard event. In our case, we use <a href=\"https:\/\/www.codemotion.com\/magazine\/dev-hub\/big-data-analyst\/kai-wahner-build-a-scalable-infrastructure-with-apache-kafka\/\" class=\"ek-link\"><span id=\"urn:local-annotation-881402\" class=\"textannotation disambiguated\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/apache_kafka\">Kafka<\/span><\/a>. No other <span id=\"urn:enhancement-145\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/server_computing\">services<\/span> can then consume. So an example of this is if I were to book a home on <span id=\"urn:enhancement-174\" class=\"textannotation disambiguated wl-organization\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/airbnb\">Airbnb<\/span>, we would create a row in our reservation <span id=\"urn:enhancement-136\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/data\">data<\/span> store. Our calendar availability <span id=\"urn:enhancement-157\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/server_computing\">service<\/span> would want to <span id=\"urn:enhancement-42\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/knowledge\">know<\/span> that this new reservation so it could mark those days as busy so it would listen to the standard events that our reservation <span id=\"urn:enhancement-137\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/data\">data<\/span> emitted.&#8221;<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/01\/data-capture-1024x576.jpg\" alt=\"data capture\" class=\"wp-image-13299\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/01\/data-capture-1024x576.jpg 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/01\/data-capture-300x169.jpg 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/01\/data-capture-768x432.jpg 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/01\/data-capture-896x504.jpg 896w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/01\/data-capture-400x225.jpg 400w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/01\/data-capture.jpg 1200w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n\n<p>Good <span id=\"urn:enhancement-109\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/microservices\">microservices<\/span> means <strong>building for production<\/strong>: we wanted to avoid the temptation of cutting corners for <span id=\"urn:enhancement-146\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/server_computing\">services<\/span> that might be <span id=\"urn:enhancement-17\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/prototype\">prototypes<\/span>, or for internal admins only. Instead, we need to have a production checklist for resiliency, <span id=\"urn:enhancement-18\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/robustness_computer_science\">robustness<\/span>, alerts <span id=\"urn:enhancement-212\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/observability\">observability<\/span>, that all <span id=\"urn:enhancement-147\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/server_computing\">services<\/span> should be adhering to, regardless if they&#8217;re in the critical path or for something more internal.<\/p>\n\n\n","protected":false},"excerpt":{"rendered":"<p>So you\u2019ve decided to migrate from monolith to microservices, what next? Such a redesign to service-oriented architecture (SOA) is a long, arduous journey that benefits from an incremental, iterative approach. Yet, such a microservices migration often must be done while still shipping new features, accelerating developer velocity, and growing the team in addition to ensuring&#8230; <a class=\"more-link\" href=\"https:\/\/www.codemotion.com\/magazine\/microservices\/microservices-migration\/\">Read more<\/a><\/p>\n","protected":false},"author":85,"featured_media":13292,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":5,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[3355],"tags":[22],"collections":[],"class_list":{"0":"post-13290","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-microservices","8":"tag-codemotion-milan","9":"entry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Airbnb&#039;s microservices migration - Codemotion Magazine<\/title>\n<meta name=\"description\" content=\"At Codemotion Milan, Airbnb software engineer Jessica Tai talked about their microservices migration from a Service Orientated Architecture.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.codemotion.com\/magazine\/microservices\/microservices-migration\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Airbnb&#039;s migration from monolith to microservices\" \/>\n<meta property=\"og:description\" content=\"At Codemotion Milan, Airbnb software engineer Jessica Tai talked about their microservices migration from a Service Orientated Architecture.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/microservices\/microservices-migration\/\" \/>\n<meta property=\"og:site_name\" content=\"Codemotion Magazine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Codemotion.Italy\/\" \/>\n<meta property=\"article:published_time\" content=\"2021-01-20T09:35:35+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-12-23T10:41:31+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/01\/Senza-titolo-1-3.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"675\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Cate Lawrence\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Cate Lawrence\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/microservices\/microservices-migration\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/microservices\/microservices-migration\/\"},\"author\":{\"name\":\"Cate Lawrence\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/df32323fd62dc47fa8892426677a2cc1\"},\"headline\":\"Airbnb&#8217;s migration from monolith to microservices\",\"datePublished\":\"2021-01-20T09:35:35+00:00\",\"dateModified\":\"2021-12-23T10:41:31+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/microservices\/microservices-migration\/\"},\"wordCount\":1137,\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/microservices\/microservices-migration\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/01\/Senza-titolo-1-3.jpg\",\"keywords\":[\"Codemotion Milan\"],\"articleSection\":[\"Microservices\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/microservices\/microservices-migration\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/microservices\/microservices-migration\/\",\"name\":\"Airbnb's microservices migration - Codemotion Magazine\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/microservices\/microservices-migration\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/microservices\/microservices-migration\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/01\/Senza-titolo-1-3.jpg\",\"datePublished\":\"2021-01-20T09:35:35+00:00\",\"dateModified\":\"2021-12-23T10:41:31+00:00\",\"description\":\"At Codemotion Milan, Airbnb software engineer Jessica Tai talked about their microservices migration from a Service Orientated Architecture.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/microservices\/microservices-migration\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.codemotion.com\/magazine\/microservices\/microservices-migration\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/microservices\/microservices-migration\/#primaryimage\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/01\/Senza-titolo-1-3.jpg\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/01\/Senza-titolo-1-3.jpg\",\"width\":1200,\"height\":675,\"caption\":\"airbnb\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/microservices\/microservices-migration\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dev Life\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/dev-life\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Events\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/dev-life\/events\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Airbnb&#8217;s migration from monolith to microservices\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"name\":\"Codemotion Magazine\",\"description\":\"We code the future. Together\",\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\",\"name\":\"Codemotion\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"width\":225,\"height\":225,\"caption\":\"Codemotion\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Codemotion.Italy\/\",\"https:\/\/x.com\/CodemotionIT\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/df32323fd62dc47fa8892426677a2cc1\",\"name\":\"Cate Lawrence\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/2dbf9850a6e06e402d71247f79a76d6a5adad553ed6aab558a29a4107e5e83b1?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/2dbf9850a6e06e402d71247f79a76d6a5adad553ed6aab558a29a4107e5e83b1?s=96&d=mm&r=g\",\"caption\":\"Cate Lawrence\"},\"url\":\"https:\/\/www.codemotion.com\/magazine\/author\/cate-lawrence\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Airbnb's microservices migration - Codemotion Magazine","description":"At Codemotion Milan, Airbnb software engineer Jessica Tai talked about their microservices migration from a Service Orientated Architecture.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.codemotion.com\/magazine\/microservices\/microservices-migration\/","og_locale":"en_US","og_type":"article","og_title":"Airbnb's migration from monolith to microservices","og_description":"At Codemotion Milan, Airbnb software engineer Jessica Tai talked about their microservices migration from a Service Orientated Architecture.","og_url":"https:\/\/www.codemotion.com\/magazine\/microservices\/microservices-migration\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2021-01-20T09:35:35+00:00","article_modified_time":"2021-12-23T10:41:31+00:00","og_image":[{"width":1200,"height":675,"url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/01\/Senza-titolo-1-3.jpg","type":"image\/jpeg"}],"author":"Cate Lawrence","twitter_card":"summary_large_image","twitter_creator":"@CodemotionIT","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"Cate Lawrence","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/microservices\/microservices-migration\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/microservices\/microservices-migration\/"},"author":{"name":"Cate Lawrence","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/df32323fd62dc47fa8892426677a2cc1"},"headline":"Airbnb&#8217;s migration from monolith to microservices","datePublished":"2021-01-20T09:35:35+00:00","dateModified":"2021-12-23T10:41:31+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/microservices\/microservices-migration\/"},"wordCount":1137,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/microservices\/microservices-migration\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/01\/Senza-titolo-1-3.jpg","keywords":["Codemotion Milan"],"articleSection":["Microservices"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/microservices\/microservices-migration\/","url":"https:\/\/www.codemotion.com\/magazine\/microservices\/microservices-migration\/","name":"Airbnb's microservices migration - Codemotion Magazine","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/microservices\/microservices-migration\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/microservices\/microservices-migration\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/01\/Senza-titolo-1-3.jpg","datePublished":"2021-01-20T09:35:35+00:00","dateModified":"2021-12-23T10:41:31+00:00","description":"At Codemotion Milan, Airbnb software engineer Jessica Tai talked about their microservices migration from a Service Orientated Architecture.","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/microservices\/microservices-migration\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/microservices\/microservices-migration\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/microservices\/microservices-migration\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/01\/Senza-titolo-1-3.jpg","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/01\/Senza-titolo-1-3.jpg","width":1200,"height":675,"caption":"airbnb"},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/microservices\/microservices-migration\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.codemotion.com\/magazine\/"},{"@type":"ListItem","position":2,"name":"Dev Life","item":"https:\/\/www.codemotion.com\/magazine\/dev-life\/"},{"@type":"ListItem","position":3,"name":"Events","item":"https:\/\/www.codemotion.com\/magazine\/dev-life\/events\/"},{"@type":"ListItem","position":4,"name":"Airbnb&#8217;s migration from monolith to microservices"}]},{"@type":"WebSite","@id":"https:\/\/www.codemotion.com\/magazine\/#website","url":"https:\/\/www.codemotion.com\/magazine\/","name":"Codemotion Magazine","description":"We code the future. Together","publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.codemotion.com\/magazine\/#organization","name":"Codemotion","url":"https:\/\/www.codemotion.com\/magazine\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","width":225,"height":225,"caption":"Codemotion"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Codemotion.Italy\/","https:\/\/x.com\/CodemotionIT"]},{"@type":"Person","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/df32323fd62dc47fa8892426677a2cc1","name":"Cate Lawrence","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/2dbf9850a6e06e402d71247f79a76d6a5adad553ed6aab558a29a4107e5e83b1?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2dbf9850a6e06e402d71247f79a76d6a5adad553ed6aab558a29a4107e5e83b1?s=96&d=mm&r=g","caption":"Cate Lawrence"},"url":"https:\/\/www.codemotion.com\/magazine\/author\/cate-lawrence\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/01\/Senza-titolo-1-3-600x400.jpg","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/01\/Senza-titolo-1-3-600x600.jpg","author_info":{"display_name":"Cate Lawrence","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/cate-lawrence\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/01\/Senza-titolo-1-3.jpg",1200,675,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/01\/Senza-titolo-1-3-150x150.jpg",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/01\/Senza-titolo-1-3-300x169.jpg",300,169,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/01\/Senza-titolo-1-3-768x432.jpg",768,432,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/01\/Senza-titolo-1-3-1024x576.jpg",1024,576,true],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/01\/Senza-titolo-1-3.jpg",1200,675,false],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/01\/Senza-titolo-1-3.jpg",1200,675,false],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/01\/Senza-titolo-1-3.jpg",100,56,false],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/01\/Senza-titolo-1-3-180x128.jpg",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/01\/Senza-titolo-1-3-896x504.jpg",896,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/01\/Senza-titolo-1-3-400x225.jpg",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/01\/Senza-titolo-1-3-600x400.jpg",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/01\/Senza-titolo-1-3-600x600.jpg",600,600,true]},"uagb_author_info":{"display_name":"Cate Lawrence","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/cate-lawrence\/"},"uagb_comment_info":0,"uagb_excerpt":"So you\u2019ve decided to migrate from monolith to microservices, what next? Such a redesign to service-oriented architecture (SOA) is a long, arduous journey that benefits from an incremental, iterative approach. Yet, such a microservices migration often must be done while still shipping new features, accelerating developer velocity, and growing the team in addition to ensuring&#8230;&hellip;","lang":"en","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/13290","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/users\/85"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=13290"}],"version-history":[{"count":7,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/13290\/revisions"}],"predecessor-version":[{"id":18738,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/13290\/revisions\/18738"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/13292"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=13290"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=13290"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=13290"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=13290"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}