{"id":5147,"date":"2019-02-26T15:34:19","date_gmt":"2019-02-26T14:34:19","guid":{"rendered":"https:\/\/blog.mi.hdm-stuttgart.de\/?p=5147"},"modified":"2023-06-09T12:09:33","modified_gmt":"2023-06-09T10:09:33","slug":"experiences-from-breaking-down-a-monolith","status":"publish","type":"post","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2019\/02\/26\/experiences-from-breaking-down-a-monolith\/","title":{"rendered":"Experiences from breaking down a monolith (1)"},"content":{"rendered":"\n<p style=\"text-align:left\">Written by Verena Barth,  Marcel Heisler,  Florian Rupp, &amp; Tim Tenckhoff<\/p>\n\n\n\n<ul class=\"wp-block-gallery aligncenter columns-1 is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\"><li class=\"blocks-gallery-item\"><figure><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"534\" data-attachment-id=\"5494\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2019\/02\/26\/experiences-from-breaking-down-a-monolith\/bild_eingefugt_am_2019-02-26__1_31_pm\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/02\/Bild_eingefugt_am_2019-02-26__1_31_PM.png\" data-orig-size=\"800,534\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Bild_eingefugt_am_2019-02-26__1_31_PM\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/02\/Bild_eingefugt_am_2019-02-26__1_31_PM.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/02\/Bild_eingefugt_am_2019-02-26__1_31_PM.png\" alt=\"\" data-id=\"5494\" data-link=\"https:\/\/blog.mi.hdm-stuttgart.de\/?attachment_id=5494\" class=\"wp-image-5494\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/02\/Bild_eingefugt_am_2019-02-26__1_31_PM.png 800w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/02\/Bild_eingefugt_am_2019-02-26__1_31_PM-300x200.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/02\/Bild_eingefugt_am_2019-02-26__1_31_PM-768x513.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/figure><\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">The idea<\/h2>\n\n\n\n<p style=\"text-align:left\">The search for a useful, simple application idea that could be realized within a semester project proved to be difficult. Our project was meant to be the base for several lectures and its development should familiarize us with new technologies and topics. Someday a team member was standing at a train stop, waiting for the delayed subway to finally arrive and came up with the idea that it would be interesting to see statistics about the average\/total delay of the Deutsche Bahn! <\/p>\n\n\n\n<p style=\"text-align:left\">This is how the idea was born: We wanted to develop a device-independent web application to visualize both, the average and the accumulated delay, as well as current departures of the public transportation at some stops.  Our application called <em>Bahnalyse <\/em>receives its data via the VVS API. To calculate the statistics, the departure times of the railways are crawled in a regular time interval and stored in a database. To search for station names as well as to display the current delays, the VVS API is called directly. <\/p>\n\n\n\n<p style=\"text-align:left\">During the lecture &#8220;Web Application Architecture&#8221; we thought about a first simple application architecture, patterns and technologies we wanted to use. This was significantly influenced by the lecture &#8220;System Engineering and Management&#8221;, in the context of which this blog post is written.  <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">General aims, technologies <\/h3>\n\n\n\n<p>Our aims for this lecture were initially to get in touch with<em> CI\/CD<\/em>, <em>Docker<\/em> and the deployment to the <em>Cloud<\/em> &#8211; topics that are currently on everyone&#8217;s lips and with which we haven&#8217;t had much to do yet. Furthermore we wanted to improve the architectural concept of our quite simple application, e.g. by splitting it up, decouple the components from each other and experiment with different types of databases.  <\/p>\n\n\n\n<p>For the development we chose <em>Angular <\/em>and made use of some other useful npm packages including <em>ng2-charts<\/em> (offering Angular directives for Charts.js which provide HTML5 based, animated JavaScript charts) and <em>Angular Material,<\/em> which offers modern UI components following Google\u2019s Material Design spec. The Java backend was developed with <em>Spring Boot<\/em> making it easy to create stand-alone applications without much XML configuration. Initially we wanted to realize a relational MySQL database in combination with Hibernate. But let\u2019s see where the system engineering process took us to. \ud83d\ude09 <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Which cloud provider fits best? <\/h2>\n\n\n\n<p>Since deploying to the cloud was one of our initial goals, we started to look for the \u201cbest\u201d cloud provider early. We compared the most common ones (in Europe and US) AWS (Amazon Web Services), IBM Cloud, GCP (Google Cloud Platform) and Microsoft Azure in four Categories.<\/p>\n\n\n\n<p>The first category is Enterprise Adoption because it makes sense to learn and try out the cloud provider we will use most likely later on at work. We found a <a href=\"https:\/\/www.zdnet.com\/article\/top-cloud-providers-2018-how-aws-microsoft-google-ibm-oracle-alibaba-stack-up\/\">study<\/a> from Right Scale about this topic where AWS is clearly the leader. 68% of the 997 participating companies from different industries were running applications on AWS in 2018. The second place made Azure with 58% but this might be misleading because it includes Office 365 customers which is not interesting for us.<a href=\"https:\/\/www.zdnet.com\/article\/top-cloud-providers-2018-how-aws-microsoft-google-ibm-oracle-alibaba-stack-up\/\"> <\/a><\/p>\n\n\n\n<p>Category two is documentation. We found a <a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2018\/07\/31\/building-a-fully-scalable-architecture-with-aws\/\">blog post<\/a> from a fellow student from July 2018 that says \u201cdocumentation is key\u201d. He tried out AWS, GCP and IBM and again AWS won with a \u201cStill bad documentation but best of all\u201c. Of course this is only his point of view but at least he had tried them out before judging. So for us his opinion gives us at least a good clue.<\/p>\n\n\n\n<p>The third category is the community. Therefore we compared the amount of questions asked on Stack Overflow of all time. If there are already a lot of questions asked the possibility grows, that means the questions we might have would have possibly been answered already. Again the winner is AWS with 65,427 questions. We did not consider the percentage of unanswered questions, because it is not differing very much between the cloud providers. We looked up those numbers in October 2018.<\/p>\n\n\n\n<p>The last but most important category are costs. Being students just trying out some technologies we did not want to spend any money. So we only compared free tiers and student accounts we did not check out what it would cost to run our application for a longer time.<\/p>\n\n\n\n<p>We started by trying out the <a href=\"https:\/\/stackoverflow.com\/questions\/7021506\/is-there-a-way-to-set-amazon-aws-billing-limit\">AWS Student Account<\/a>. Given only the Starter Account by the Stuttgart Media University (HdM) we don\u2019t have access to any IAM-Tools. Also it is not possible to create access keys for our user. This and the federate login of the student account itself made logging in from a CI-Pipeline impossible. Thus the AWS student account became useless for us. The AWS free tier would probably provide the features we need for free up to 12 month and up to a limited amount of resources. But it requires a credit card for registration that will be charged if any of the free tier limitations are exceeded. There is no possibility to set any limits for the payments so it\u2019s not possible to say \u201cshut down all my instances before I would have to pay for them\u201d.<\/p>\n\n\n\n<p>For the <a href=\"https:\/\/cloud.google.com\/free\/docs\/gcp-free-tier#credit_card_verification\">GCP student accounts<\/a> we are not enabled because our university would have to apply for it first. The free tier also requires a credit card. But at least it will only be charged after confirmation when the free tier is used up.<\/p>\n\n\n\n<p>Still we did not want to provide a credit card at all. Luckily IBM Cloud provided exactly what we are looking for. A six-month free student account with no need to provide a credit card and only few limitations on the available features. To activate it you need to get a <a href=\"https:\/\/ibm.onthehub.com\/WebStore\/ProductsByMajorVersionList.aspx?cmi_mnuMain=67016802-5765-e611-9420-b8ca3a5db7a1\">promo code<\/a> and supply it in your free account to upgrade to a student account.<\/p>\n\n\n\n<p>The table below shows an overview of the categories explained above. The last row contains additional considerations. So we were told that containers are running in actual Kubernetes Clusters on GCP whereas AWS uses VMs. Also we read that GCP provides the \u201cbest AI\u201d services, but this does not matter for our use case.<\/p>\n\n\n\n<p>Finally we can conclude that we would use IBM Cloud because of the free student trial. But actually we did not deploy to any cloud so far. While working on the project we found other interesting topics we concentrated on and deployed the old-fashioned way to a server we got from the HdM also for free. <\/p>\n\n\n\n<table class=\"wp-block-table\"><tbody><tr><td><\/td><td><strong>AWS<\/strong><\/td><td><strong>IBM<\/strong><\/td><td><strong>GCP<\/strong><\/td><td><strong>Azure<\/strong><\/td><\/tr><tr><td><strong>Enterprise adoption<\/strong> <\/td><td><strong>68%<\/strong><\/td><td>15%<\/td><td>19%<\/td><td>58%<\/td><\/tr><tr><td><strong>Documentation<\/strong> <\/td><td>&#8220;bad but <strong>best<\/strong>&#8220;<\/td><td>&#8220;bad&#8221;<\/td><td> <br>\u201elittle bit better\u201c <\/td><td>&#8211;<\/td><\/tr><tr><td><strong>Community<\/strong> <\/td><td><strong>65.427<\/strong> <\/td><td>5.256 <\/td><td>10.352 <\/td><td>62.638 <\/td><\/tr><tr><td><strong>Free?<\/strong> <\/td><td>Student account: useless<br>Free tier: credit card required, no limits possible <\/td><td>Student account: few limitations, six month <strong>free<\/strong> <\/td><td>Student account: HdM not applied<br>Free tier: credit card required confirm paid account, few limits possible <\/td><td>&#8211;<\/td><\/tr><tr><td><strong>Miscellaneous <\/strong><\/td><td>VMs <\/td><td>&#8211;<\/td><td>Kubernetes,<br>best AI Services <\/td><td> Mainly Office 356 customers <\/td><\/tr><\/tbody><\/table>\n","protected":false},"excerpt":{"rendered":"<p>Written by Verena Barth, Marcel Heisler, Florian Rupp, &amp; Tim Tenckhoff The idea The search for a useful, simple application idea that could be realized within a semester project proved to be difficult. Our project was meant to be the base for several lectures and its development should familiarize us with new technologies and topics. [&hellip;]<\/p>\n","protected":false},"author":906,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1,22],"tags":[],"ppma_author":[779],"class_list":["post-5147","post","type-post","status-publish","format-standard","hentry","category-allgemein","category-student-projects"],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":1629,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2016\/09\/29\/project-how-to-build-an-intelligent-mirror-part-3\/","url_meta":{"origin":5147,"position":0},"title":"[Project] How to build an intelligent mirror &#8211; Part 3","author":"Matthias Schmidt","date":"29. September 2016","format":false,"excerpt":"Mirror, mirror on the wall, who is the fairest of all? It\u2019s you, Albert. How Albert, our smart mirror, has grown - you can read it here. [written by Roman Kollatschny and Matthias Schmidt] In this last article, we will finally show you the result of the project, Albert. Besides\u2026","rel":"","context":"In &quot;Student Projects&quot;","block_context":{"text":"Student Projects","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/student-projects\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1266,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2016\/08\/02\/project-how-to-build-an-intelligent-mirror\/","url_meta":{"origin":5147,"position":1},"title":"[Project] How to build an intelligent mirror","author":"Matthias Schmidt","date":"2. August 2016","format":false,"excerpt":"Hello there, today we want to feature a project, we were working in the last semester. A Smart Mirror. It\u2019s not that new to build such a mirror and we\u2019re not the first who built one. We still wanted to do it in another way with another focus. Instead of\u2026","rel":"","context":"In &quot;Student Projects&quot;","block_context":{"text":"Student Projects","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/student-projects\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":7125,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2019\/08\/21\/evaluating-and-visualizing-statistical-bot-data\/","url_meta":{"origin":5147,"position":2},"title":"Evaluating and Visualizing Statistical Bot Data","author":"zc001","date":"21. August 2019","format":false,"excerpt":"STAB Website Homepage The idea Video game streaming has taken over a big part of the commercial video game scene with Twitch being its biggest platform. Viewers are able to communicate with other viewers and streamers through the chat, or watch their previous streams or highlights. These highlights are made\u2026","rel":"","context":"In &quot;Cloud Technologies&quot;","block_context":{"text":"Cloud Technologies","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/scalable-systems\/cloud-technologies\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/08\/chart.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/08\/chart.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/08\/chart.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":10714,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2020\/09\/29\/getting-started-with-devops\/","url_meta":{"origin":5147,"position":3},"title":"Getting Started with your first Software Project using DevOps","author":"bg037","date":"29. September 2020","format":false,"excerpt":"This Post is a getting started guide for creating a DevOps enabled web based software project.","rel":"","context":"In &quot;Cloud Technologies&quot;","block_context":{"text":"Cloud Technologies","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/scalable-systems\/cloud-technologies\/"},"img":{"alt_text":"Getting Started with DevOps cover image","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2020\/08\/cover-image.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2020\/08\/cover-image.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2020\/08\/cover-image.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2020\/08\/cover-image.jpg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2020\/08\/cover-image.jpg?resize=1050%2C600&ssl=1 3x"},"classes":[]},{"id":770,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2018\/06\/08\/the-new-ci-world-wrapping-it-up-with-git-2\/","url_meta":{"origin":5147,"position":4},"title":"The new CI world, Wrapping it up with Git","author":"Mario Erazo","date":"8. June 2018","format":false,"excerpt":"Welcome to part 6 - Man we are on a writing flow! - of our blog posts series. After all the coding done in the last parts, let\u2019s take a more laid back look at CI and Git. Nowadays many agile teams work with Git and Feature Branches. A developer\u2026","rel":"","context":"In &quot;DevOps&quot;","block_context":{"text":"DevOps","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/scalable-systems\/devops\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":804,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2016\/07\/12\/the-new-ci-world-wrapping-it-up-with-git\/","url_meta":{"origin":5147,"position":5},"title":"The new CI world, Wrapping it up with Git","author":"Mario Erazo","date":"12. July 2016","format":false,"excerpt":"Nowadays many agile teams work with Git and Feature Branches. A developer works with on a feature and at the end he merges the new feature\u2019s code into the project. However, this concept goes against the principles of CI. Let's take a closer look at this practice and find out\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/07\/Screen-Shot-2016-07-12-at-3.54.55-PM.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/07\/Screen-Shot-2016-07-12-at-3.54.55-PM.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/07\/Screen-Shot-2016-07-12-at-3.54.55-PM.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/07\/Screen-Shot-2016-07-12-at-3.54.55-PM.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/07\/Screen-Shot-2016-07-12-at-3.54.55-PM.png?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/07\/Screen-Shot-2016-07-12-at-3.54.55-PM.png?resize=1400%2C800&ssl=1 4x"},"classes":[]}],"jetpack_sharing_enabled":true,"authors":[{"term_id":779,"user_id":906,"is_guest":0,"slug":"fr066","display_name":"fr066","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/fa1fdd93c16996d97a50750c692771b7ce7dc9f93a04b808bf381a882ef6e681?s=96&d=mm&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/5147","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/users\/906"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/comments?post=5147"}],"version-history":[{"count":18,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/5147\/revisions"}],"predecessor-version":[{"id":5520,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/5147\/revisions\/5520"}],"wp:attachment":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/media?parent=5147"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/categories?post=5147"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/tags?post=5147"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/ppma_author?post=5147"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}