{"id":1736,"date":"2015-05-11T13:28:55","date_gmt":"2015-05-11T07:58:55","guid":{"rendered":"http:\/\/naveenbalani.com\/?p=1736"},"modified":"2016-09-17T16:41:42","modified_gmt":"2016-09-17T11:11:42","slug":"micro-services-with-docker-part-1-the-why","status":"publish","type":"post","link":"https:\/\/navveenbalani.dev\/index.php\/articles\/micro-services-with-docker-part-1-the-why\/","title":{"rendered":"Micro Services with Docker (Part 1 &#8211; The WHY)"},"content":{"rendered":"<p>Before, I dwell into what is docker and micro services architecture, let&#8217;s look at the evolution of how applications were designed, developed and deployed over the years.<\/p>\n<p><strong>Development and Deployment History<\/strong><\/p>\n<p><a href=\"http:\/\/naveenbalani.com\/wp-content\/uploads\/2015\/05\/cloud_docker.jpg\"><img loading=\"lazy\" class=\"alignleft wp-image-1740\" src=\"http:\/\/naveenbalani.com\/wp-content\/uploads\/2015\/05\/cloud_docker-300x220.jpg\" alt=\"cloud_docker\" width=\"241\" height=\"177\" srcset=\"https:\/\/navveenbalani.dev\/wp-content\/uploads\/2015\/05\/cloud_docker-300x220.jpg 300w, https:\/\/navveenbalani.dev\/wp-content\/uploads\/2015\/05\/cloud_docker.jpg 450w\" sizes=\"(max-width: 241px) 100vw, 241px\" \/><\/a>It all started with a single tier architecture, moved on a to a two tier architecture, the classic 3 tier architecture and various N Tier architecture&#8217;s for\u00a0scaling applications. Frameworks such as Apache Struts provided a kick start, the simplicity of dependency injection with Spring framework gained momentum, AJAX\u00a0simplified creating asynchronous web applications and environments like Node.js ( JavaScript based) simplified event-driven programming using callbacks without the\u00a0overhead of using multiple threads.<\/p>\n<p>Application development was divided into well-defined modules and tools like ANT and Maven helped in dependency management and building up a application from these\u00a0loosely coupled modules. Application dependency was versioned into maven dependency files and modules explicitly stated which version of modules they depend on.<\/p>\n<p>Applications were deployed and tested over multiple environment &#8211; development, unit test environment, pre-production and production and as each of these environments\u00a0were different, there were significant effort required to ensure new changes doesn&#8217;t break existing one and existing applications.\u00a0For instance, deploying a new version of web application would require stopping, deploying a application like a brand new one (hot deployment being turned off in production). OGSI technologies tried to simply this a bit. We also saw multiple teams using the same production instance, might even cause other applications to fail, for instance&#8217;s deploying a new library at an application level and your web application started failing as it&#8217;s not compatible with it. In Short, changes were never totally isolated and deploying new changes and making application live in production required a significant effort. I still remember one of my client&#8217;s deployment, where deploying a common application&#8217;s from third party organization\u00a0might stretch\u00a0an entire weekend for other applications to confirm if the API was working and it was all or none effort at the end. \u00a0How often you have\u00a0heard of this statement &#8211; &#8220;It works in my machine&#8221;, &#8220;Its a different environment, need to look into it&#8221;<\/p>\n<p>As we move towards the devOps adoption, deployment cycles cutting down from months to weeks to day(s) and build applications for the cloud, the earlier development and deployment approaches provides a significant hindrance on time to market for these new generation of applications.<\/p>\n<p><strong>Deployment Challenges\u00a0<\/strong><\/p>\n<p>&#8216;With challenges, comes new Innovate Solutions&#8221; &#8211; and what are the challenges we faced over these years &#8211;<\/p>\n<ol>\n<li>How do I ensure the application that I develop runs on any environment as-is, be it Laptop, data centers or cloud.<\/li>\n<li>How do I manage the dependency and isolate my application changes.<\/li>\n<li>How do I build and compose the end application&#8217;s from these loosely couple application\/modules. How to build a plug-n-play architecture.<\/li>\n<li>How do I roll out and isolate each module changes. Virtually, I am thinking of a dedicated virtual server run time for my application, minus the overhead and cost of a physical server.<\/li>\n<li>How do I build a scalable application? Can I scale each modules independently?<\/li>\n<\/ol>\n<p>Well, luckily we have an answer now. The above problems can be solved using a container technology like Docker and designing the application into a small set of independent deployable services (micro services).<\/p>\n<p>Stay tuned, In my next article, I will talk about the How part &#8211; how docker solves the problem and what it means to designing a mirco services architecture.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Before, I dwell into what is docker and micro services architecture, let&#8217;s look at the evolution of how applications were designed, developed and deployed over the years. Development and Deployment History It all started with a single tier architecture, moved on a to a two tier architecture, the classic 3 tier architecture and various N [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2097,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[66,3,79,167],"tags":[168,263,169],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v16.0.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Micro Services with Docker (Part 1 - The WHY) - Current and Future Technology Trends by Navveen Balani<\/title>\n<meta name=\"description\" content=\"Micro Services with Docker (Part 1 - The WHY) -\" \/>\n<link rel=\"canonical\" href=\"https:\/\/navveenbalani.dev\/index.php\/articles\/micro-services-with-docker-part-1-the-why\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Micro Services with Docker (Part 1 - The WHY) - Current and Future Technology Trends by Navveen Balani\" \/>\n<meta property=\"og:description\" content=\"Micro Services with Docker (Part 1 - The WHY) -\" \/>\n<meta property=\"og:url\" content=\"https:\/\/navveenbalani.dev\/index.php\/articles\/micro-services-with-docker-part-1-the-why\/\" \/>\n<meta property=\"og:site_name\" content=\"Current and Future Technology Trends by Navveen Balani\" \/>\n<meta property=\"article:published_time\" content=\"2015-05-11T07:58:55+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2016-09-17T11:11:42+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/navveenbalani.dev\/wp-content\/uploads\/2015\/05\/docker.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1354\" \/>\n\t<meta property=\"og:image:height\" content=\"1208\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\">\n\t<meta name=\"twitter:data1\" content=\"3 minutes\">\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/navveenbalani.dev\/#website\",\"url\":\"https:\/\/navveenbalani.dev\/\",\"name\":\"Current and Future Technology Trends by Navveen Balani\",\"description\":\"Current and Future Technology Trends by Navveen Balani\",\"publisher\":{\"@id\":\"https:\/\/navveenbalani.dev\/#\/schema\/person\/51f7ab14b20611d95e3c7fd4ea0950bf\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/navveenbalani.dev\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/navveenbalani.dev\/index.php\/articles\/micro-services-with-docker-part-1-the-why\/#primaryimage\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/navveenbalani.dev\/wp-content\/uploads\/2015\/05\/docker.png\",\"width\":1354,\"height\":1208},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/navveenbalani.dev\/index.php\/articles\/micro-services-with-docker-part-1-the-why\/#webpage\",\"url\":\"https:\/\/navveenbalani.dev\/index.php\/articles\/micro-services-with-docker-part-1-the-why\/\",\"name\":\"Micro Services with Docker (Part 1 - The WHY) - Current and Future Technology Trends by Navveen Balani\",\"isPartOf\":{\"@id\":\"https:\/\/navveenbalani.dev\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/navveenbalani.dev\/index.php\/articles\/micro-services-with-docker-part-1-the-why\/#primaryimage\"},\"datePublished\":\"2015-05-11T07:58:55+00:00\",\"dateModified\":\"2016-09-17T11:11:42+00:00\",\"description\":\"Micro Services with Docker (Part 1 - The WHY) -\",\"breadcrumb\":{\"@id\":\"https:\/\/navveenbalani.dev\/index.php\/articles\/micro-services-with-docker-part-1-the-why\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/navveenbalani.dev\/index.php\/articles\/micro-services-with-docker-part-1-the-why\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/navveenbalani.dev\/index.php\/articles\/micro-services-with-docker-part-1-the-why\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/navveenbalani.dev\/\",\"url\":\"https:\/\/navveenbalani.dev\/\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/navveenbalani.dev\/index.php\/articles\/micro-services-with-docker-part-1-the-why\/\",\"url\":\"https:\/\/navveenbalani.dev\/index.php\/articles\/micro-services-with-docker-part-1-the-why\/\",\"name\":\"Micro Services with Docker (Part 1 &#8211; The WHY)\"}}]},{\"@type\":\"Article\",\"@id\":\"https:\/\/navveenbalani.dev\/index.php\/articles\/micro-services-with-docker-part-1-the-why\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/navveenbalani.dev\/index.php\/articles\/micro-services-with-docker-part-1-the-why\/#webpage\"},\"author\":{\"@id\":\"https:\/\/navveenbalani.dev\/#\/schema\/person\/51f7ab14b20611d95e3c7fd4ea0950bf\"},\"headline\":\"Micro Services with Docker (Part 1 &#8211; The WHY)\",\"datePublished\":\"2015-05-11T07:58:55+00:00\",\"dateModified\":\"2016-09-17T11:11:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/navveenbalani.dev\/index.php\/articles\/micro-services-with-docker-part-1-the-why\/#webpage\"},\"publisher\":{\"@id\":\"https:\/\/navveenbalani.dev\/#\/schema\/person\/51f7ab14b20611d95e3c7fd4ea0950bf\"},\"image\":{\"@id\":\"https:\/\/navveenbalani.dev\/index.php\/articles\/micro-services-with-docker-part-1-the-why\/#primaryimage\"},\"keywords\":\"docker,future-dev,micro services\",\"articleSection\":\"Architecture Patterns,Articles,Cloud Computing,Docker\",\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/navveenbalani.dev\/#\/schema\/person\/51f7ab14b20611d95e3c7fd4ea0950bf\",\"name\":\"Navveen\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/navveenbalani.dev\/#personlogo\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/navveenbalani.dev\/wp-content\/uploads\/2019\/07\/navveen_balani.jpeg\",\"width\":200,\"height\":200,\"caption\":\"Navveen\"},\"logo\":{\"@id\":\"https:\/\/navveenbalani.dev\/#personlogo\"},\"sameAs\":[\"http:\/\/naveenbalani.com\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","_links":{"self":[{"href":"https:\/\/navveenbalani.dev\/index.php\/wp-json\/wp\/v2\/posts\/1736"}],"collection":[{"href":"https:\/\/navveenbalani.dev\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/navveenbalani.dev\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/navveenbalani.dev\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/navveenbalani.dev\/index.php\/wp-json\/wp\/v2\/comments?post=1736"}],"version-history":[{"count":7,"href":"https:\/\/navveenbalani.dev\/index.php\/wp-json\/wp\/v2\/posts\/1736\/revisions"}],"predecessor-version":[{"id":1932,"href":"https:\/\/navveenbalani.dev\/index.php\/wp-json\/wp\/v2\/posts\/1736\/revisions\/1932"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/navveenbalani.dev\/index.php\/wp-json\/wp\/v2\/media\/2097"}],"wp:attachment":[{"href":"https:\/\/navveenbalani.dev\/index.php\/wp-json\/wp\/v2\/media?parent=1736"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/navveenbalani.dev\/index.php\/wp-json\/wp\/v2\/categories?post=1736"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/navveenbalani.dev\/index.php\/wp-json\/wp\/v2\/tags?post=1736"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}