{"id":9702,"date":"2016-02-08T17:43:55","date_gmt":"2016-02-08T15:43:55","guid":{"rendered":"http:\/\/blog.zhaw.ch\/icclab\/?p=9702"},"modified":"2016-02-08T18:36:39","modified_gmt":"2016-02-08T16:36:39","slug":"cna-seed-project-coreosfleet-implementation-wrap-up","status":"publish","type":"post","link":"https:\/\/blog.zhaw.ch\/icclab\/cna-seed-project-coreosfleet-implementation-wrap-up\/","title":{"rendered":"CNA seed project: CoreOS\/Fleet implementation wrap-up"},"content":{"rendered":"<p>The <a href=\"https:\/\/blog.zhaw.ch\/icclab\/category\/research-approach\/themes\/cloud-native-applications\/\" target=\"_blank\">cloud-native applications initiative<\/a> started in 2014 with the aim of providing guidelines, recommendations, tools and best practices to companies and practitioners facing the daunting task of developing from scratch or migrating from legacy code an application <strong>optimized to be run in the cloud<\/strong>.<\/p>\n<p>In order to gather practical experience, roughly one year ago the <a href=\"https:\/\/blog.zhaw.ch\/icclab\/cloud-native-applications-seed-project-kickoff\/\" target=\"_blank\">CNA seed project was kicked off<\/a>, focusing explicitly on the migration of a traditional (LAMP stack) legacy application to a cloud-native architecture. In this post we relate on the results achived until now.<\/p>\n<p>You can follow the progress of the CNA seed project going through the list of related blog posts collected on the <a href=\"https:\/\/blog.zhaw.ch\/icclab\/category\/research-approach\/themes\/cloud-native-applications\/\" target=\"_blank\">initiative page<\/a> (look for the &#8220;Articles&#8221; section).<\/p>\n<p>One year has gone by and a small team of great people have worked together to scout, test, design, code, deploy, record, and yell at a little code base that we&#8217;re happy to share as open source on our github (<a href=\"https:\/\/github.com\/icclab\/cna-seed-project\/\" target=\"_blank\">https:\/\/github.com\/icclab\/cna-seed-project\/<\/a>).<\/p>\n<p><!--more--><\/p>\n<p>Lots of work has been put in by <a href=\"http:\/\/blog.zhaw.ch\/icclab\/sandro-brunner\/\" target=\"_blank\">Sandro<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/martin-bloechlinger\/\" target=\"_blank\">Martin<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/ozgur-ozsu\/\" target=\"_blank\">\u00d6zg\u00fcr<\/a>, and <a href=\"https:\/\/blog.zhaw.ch\/icclab\/giovanni-toffetti\/\" target=\"_blank\">Giovanni<\/a> in different phases and with different aims. <a href=\"https:\/\/blog.zhaw.ch\/icclab\/christof-marti\/\" target=\"_blank\">Christof<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/josef-spillner\/\" target=\"_blank\">Josef<\/a>, and <a href=\"https:\/\/blog.zhaw.ch\/icclab\/thomas-michael-bohnert\/\" target=\"_blank\">Thomas<\/a> were also involved in all high-level planning and design decisions.<\/p>\n<p>In 2015, we finished the implementation of the CoreOS+Fleet solution. This was our initial choice of technologies for container management that would enable us to achieve resilience and scalability.<br \/>\nThe video below is a short presentation of what was achieved:<\/p>\n<div class=\"lyte-wrapper\" style=\"width:640px;max-width:100%;margin:5px;\"><div class=\"lyMe\" id=\"WYL_JQv_s_7OYKY\"><div id=\"lyte_JQv_s_7OYKY\" data-src=\"https:\/\/blog.zhaw.ch\/icclab\/wp-content\/plugins\/wp-youtube-lyte\/lyteCache.php?origThumbUrl=%2F%2Fi.ytimg.com%2Fvi%2FJQv_s_7OYKY%2Fhqdefault.jpg\" class=\"pL\"><div class=\"tC\"><div class=\"tT\"><\/div><\/div><div class=\"play\"><\/div><div class=\"ctrl\"><div class=\"Lctrl\"><\/div><div class=\"Rctrl\"><\/div><\/div><\/div><noscript><a href=\"https:\/\/youtu.be\/JQv_s_7OYKY\" rel=\"nofollow\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.zhaw.ch\/icclab\/wp-content\/plugins\/wp-youtube-lyte\/lyteCache.php?origThumbUrl=https%3A%2F%2Fi.ytimg.com%2Fvi%2FJQv_s_7OYKY%2F0.jpg\" alt=\"YouTube video thumbnail\" width=\"640\" height=\"340\" \/><br \/>Watch this video on YouTube<\/a><\/noscript><\/div><\/div><div class=\"lL\" style=\"max-width:100%;width:640px;margin:5px;\"><br\/><span class=\"lyte_disclaimer\">Defaulttext aus wp-youtube-lyte.php<\/span><\/div><\/p>\n<p>Summing up:<\/p>\n<ul>\n<li>After careful evaluation, we chose to migrate the Zurmo CRM implementation to a cloud-native architecture;<\/li>\n<li>Avoiding to delve into the implementation details, we chose to achieve reliability and scalability by using replication at component level;<\/li>\n<li>We used docker containers to execute each application component separately (e.g., web, mysql galera, memcached servers);<\/li>\n<li>The implementation is based on CoreOS, Fleet is used as container management solution;<\/li>\n<li>We use a generic containerized ELK stack for monitoring the application metrics and trigger auto-scaling through our own engine: <a href=\"https:\/\/github.com\/icclab\/dynamite\" target=\"_blank\">Dynamite<\/a>;<\/li>\n<\/ul>\n<p>The video shows two simple scenarios:<\/p>\n<ul>\n<li>Scaling up in the face of increased web traffic (application <strong>elasticity\/scalability<\/strong>)<\/li>\n<li>Recovery and availability in case of induced failures (application <strong>resilience<\/strong>)<\/li>\n<\/ul>\n<p>In the first scenario we use pods running on our own Kubernetes cluster to generate simulated load (100 users, ~10 requests per second) with the Tsung tool. Dynamite is configured to create new Apache web server containers if the 95th percentile of the response time is above 1 second over a 1 second period. The reaction to the load increase is immediate. The average response time is kept at all times in control.<\/p>\n<p>In the second scenario we show that any virtual machine (or container) might fail and the application will recover without impact on response time. The video shows how we manually terminate a virtual machine during the simulated load and how other containers are immediately restarted while the response time stays in control.<\/p>\n<p>We spent the last weeks of 2015 collecting data for a journal publication that we submitted to the Elsevier journal &#8220;Future Generation Computer System&#8221; in which we give more details about our experience with this solution, its limits and pitfalls. Keep your fingers crossed for us and an eye on our publication page!<\/p>\n<p>We now have some reservations about our choice of container-management solution and that technology space is moving extremely fast, so although we&#8217;ve successfully demonstrated that fleet can be used to control response times under varying load patterns and reacts well in the cast of failure of components, we&#8217;re eager to try something new.<\/p>\n<p>Having finally wrapped the Fleet implementation up, our next steps will consist in completing the porting of the application to Kubernetes first and maybe Ubernetes as a next step. Stay tuned!<\/p>\n<p style=\"text-align: right\">\u00d6zg\u00fcr and Gio<\/p>\n<div class=\"pt-sm\">Schlagw\u00f6rter: <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/cloud-native-application\/\">cloud-native application<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/cloud-native-applications-seed-project\/\">cloud-native applications seed project<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/cna-seed-project\/\">cna seed project<\/a><br><\/div>","protected":false},"excerpt":{"rendered":"<p>The cloud-native applications initiative started in 2014 with the aim of providing guidelines, recommendations, tools and best practices to companies and practitioners facing the daunting task of developing from scratch or migrating from legacy code an application optimized to be run in the cloud. In order to gather practical experience, roughly one year ago the [&hellip;]<\/p>\n","protected":false},"author":216,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[1],"tags":[558,559,550],"features":[],"class_list":["post-9702","post","type-post","status-publish","format-standard","hentry","category-allgemein","tag-cloud-native-application","tag-cloud-native-applications-seed-project","tag-cna-seed-project"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>CNA seed project: CoreOS\/Fleet implementation wrap-up - Service Engineering (ICCLab &amp; SPLab)<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.zhaw.ch\/icclab\/cna-seed-project-coreosfleet-implementation-wrap-up\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"CNA seed project: CoreOS\/Fleet implementation wrap-up\" \/>\n<meta property=\"og:description\" content=\"The cloud-native applications initiative started in 2014 with the aim of providing guidelines, recommendations, tools and best practices to companies and practitioners facing the daunting task of developing from scratch or migrating from legacy code an application optimized to be run in the cloud. In order to gather practical experience, roughly one year ago the [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.zhaw.ch\/icclab\/cna-seed-project-coreosfleet-implementation-wrap-up\/\" \/>\n<meta property=\"og:site_name\" content=\"Service Engineering (ICCLab &amp; SPLab)\" \/>\n<meta property=\"article:published_time\" content=\"2016-02-08T15:43:55+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2016-02-08T16:36:39+00:00\" \/>\n<meta name=\"author\" content=\"oezs\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"oezs\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/cna-seed-project-coreosfleet-implementation-wrap-up\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/cna-seed-project-coreosfleet-implementation-wrap-up\/\"},\"author\":{\"name\":\"oezs\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/7cabe9851c700ff99e680b4314e3e79c\"},\"headline\":\"CNA seed project: CoreOS\/Fleet implementation wrap-up\",\"datePublished\":\"2016-02-08T15:43:55+00:00\",\"dateModified\":\"2016-02-08T16:36:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/cna-seed-project-coreosfleet-implementation-wrap-up\/\"},\"wordCount\":630,\"commentCount\":0,\"keywords\":[\"cloud-native application\",\"cloud-native applications seed project\",\"cna seed project\"],\"articleSection\":[\"*.*\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blog.zhaw.ch\/icclab\/cna-seed-project-coreosfleet-implementation-wrap-up\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/cna-seed-project-coreosfleet-implementation-wrap-up\/\",\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/cna-seed-project-coreosfleet-implementation-wrap-up\/\",\"name\":\"CNA seed project: CoreOS\/Fleet implementation wrap-up - Service Engineering (ICCLab &amp; SPLab)\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#website\"},\"datePublished\":\"2016-02-08T15:43:55+00:00\",\"dateModified\":\"2016-02-08T16:36:39+00:00\",\"author\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/7cabe9851c700ff99e680b4314e3e79c\"},\"breadcrumb\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/cna-seed-project-coreosfleet-implementation-wrap-up\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.zhaw.ch\/icclab\/cna-seed-project-coreosfleet-implementation-wrap-up\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/cna-seed-project-coreosfleet-implementation-wrap-up\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\/\/blog.zhaw.ch\/icclab\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"CNA seed project: CoreOS\/Fleet implementation wrap-up\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#website\",\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/\",\"name\":\"Service Engineering (ICCLab &amp; SPLab)\",\"description\":\"A Blog of the ZHAW Zurich University of Applied Sciences\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.zhaw.ch\/icclab\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/7cabe9851c700ff99e680b4314e3e79c\",\"name\":\"oezs\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/2fa133e3723cc11263bbf166a76b1218fe09afe212fa641cdc58cbb91a99327f?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/2fa133e3723cc11263bbf166a76b1218fe09afe212fa641cdc58cbb91a99327f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/2fa133e3723cc11263bbf166a76b1218fe09afe212fa641cdc58cbb91a99327f?s=96&d=mm&r=g\",\"caption\":\"oezs\"},\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/author\/oezs\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"CNA seed project: CoreOS\/Fleet implementation wrap-up - Service Engineering (ICCLab &amp; SPLab)","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:\/\/blog.zhaw.ch\/icclab\/cna-seed-project-coreosfleet-implementation-wrap-up\/","og_locale":"en_US","og_type":"article","og_title":"CNA seed project: CoreOS\/Fleet implementation wrap-up","og_description":"The cloud-native applications initiative started in 2014 with the aim of providing guidelines, recommendations, tools and best practices to companies and practitioners facing the daunting task of developing from scratch or migrating from legacy code an application optimized to be run in the cloud. In order to gather practical experience, roughly one year ago the [&hellip;]","og_url":"https:\/\/blog.zhaw.ch\/icclab\/cna-seed-project-coreosfleet-implementation-wrap-up\/","og_site_name":"Service Engineering (ICCLab &amp; SPLab)","article_published_time":"2016-02-08T15:43:55+00:00","article_modified_time":"2016-02-08T16:36:39+00:00","author":"oezs","twitter_card":"summary_large_image","twitter_misc":{"Written by":"oezs","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.zhaw.ch\/icclab\/cna-seed-project-coreosfleet-implementation-wrap-up\/#article","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/cna-seed-project-coreosfleet-implementation-wrap-up\/"},"author":{"name":"oezs","@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/7cabe9851c700ff99e680b4314e3e79c"},"headline":"CNA seed project: CoreOS\/Fleet implementation wrap-up","datePublished":"2016-02-08T15:43:55+00:00","dateModified":"2016-02-08T16:36:39+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/cna-seed-project-coreosfleet-implementation-wrap-up\/"},"wordCount":630,"commentCount":0,"keywords":["cloud-native application","cloud-native applications seed project","cna seed project"],"articleSection":["*.*"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.zhaw.ch\/icclab\/cna-seed-project-coreosfleet-implementation-wrap-up\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.zhaw.ch\/icclab\/cna-seed-project-coreosfleet-implementation-wrap-up\/","url":"https:\/\/blog.zhaw.ch\/icclab\/cna-seed-project-coreosfleet-implementation-wrap-up\/","name":"CNA seed project: CoreOS\/Fleet implementation wrap-up - Service Engineering (ICCLab &amp; SPLab)","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/#website"},"datePublished":"2016-02-08T15:43:55+00:00","dateModified":"2016-02-08T16:36:39+00:00","author":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/7cabe9851c700ff99e680b4314e3e79c"},"breadcrumb":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/cna-seed-project-coreosfleet-implementation-wrap-up\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.zhaw.ch\/icclab\/cna-seed-project-coreosfleet-implementation-wrap-up\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blog.zhaw.ch\/icclab\/cna-seed-project-coreosfleet-implementation-wrap-up\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/blog.zhaw.ch\/icclab\/"},{"@type":"ListItem","position":2,"name":"CNA seed project: CoreOS\/Fleet implementation wrap-up"}]},{"@type":"WebSite","@id":"https:\/\/blog.zhaw.ch\/icclab\/#website","url":"https:\/\/blog.zhaw.ch\/icclab\/","name":"Service Engineering (ICCLab &amp; SPLab)","description":"A Blog of the ZHAW Zurich University of Applied Sciences","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.zhaw.ch\/icclab\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/7cabe9851c700ff99e680b4314e3e79c","name":"oezs","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/2fa133e3723cc11263bbf166a76b1218fe09afe212fa641cdc58cbb91a99327f?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/2fa133e3723cc11263bbf166a76b1218fe09afe212fa641cdc58cbb91a99327f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2fa133e3723cc11263bbf166a76b1218fe09afe212fa641cdc58cbb91a99327f?s=96&d=mm&r=g","caption":"oezs"},"url":"https:\/\/blog.zhaw.ch\/icclab\/author\/oezs\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/9702","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/users\/216"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/comments?post=9702"}],"version-history":[{"count":12,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/9702\/revisions"}],"predecessor-version":[{"id":9766,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/9702\/revisions\/9766"}],"wp:attachment":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/media?parent=9702"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/categories?post=9702"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/tags?post=9702"},{"taxonomy":"features","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/features?post=9702"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}