{"id":23503,"date":"2020-06-26T16:15:38","date_gmt":"2020-06-26T14:15:38","guid":{"rendered":"https:\/\/www.radioking.com\/blog\/?p=23503"},"modified":"2020-07-15T13:10:50","modified_gmt":"2020-07-15T11:10:50","slug":"understanding-infrastructure-radioking-servers-part-2","status":"publish","type":"post","link":"https:\/\/www.radioking.com\/blog\/understanding-infrastructure-radioking-servers-part-2\/","title":{"rendered":"Understanding the infrastructure of RadioKing servers: Part 2"},"content":{"rendered":"<p>Alain, our system administrator, is back on the blog today following up on his <a href=\"https:\/\/www.radioking.com\/blog\/understanding-the-infrastructure-of-radioking-servers-part-1\/\" target=\"_blank\" rel=\"noopener\">first article<\/a>. Today we&rsquo;re sharing more secrets about RadioKing&rsquo;s infrastructure!\u00a0<!--more--><\/p>\n<p>Hello everybody, it&rsquo;s been a while since I&rsquo;ve written on the blog, so here I am! Today, I&rsquo;d like to talk to you about RadioKing&rsquo;s infrastructure. Before we dive in, here&rsquo;s a short glossary that may help you better understand the rest of the article:<\/p>\n<ul>\n<li><span style=\"color: #fb5e30;\"><strong>Cluster<\/strong><\/span>: refers to a group (or a \u00ab\u00a0cluster\u00a0\u00bb) (for example, we will talk about a radio cluster or an API cluster)<\/li>\n<li><span style=\"color: #fb5e30;\"><strong>Kubernetes:<\/strong><\/span>\u00a0technology that orchestrates containers (for example, containers may contain a radio station)<\/li>\n<li><span style=\"color: #fb5e30;\"><strong>Git\u00a0Repository<\/strong><\/span>:\u00a0a place where the code is stored so that you can make changes to it without losing the old version.<\/li>\n<\/ul>\n<h4><span style=\"color: #fb5e30;\"><strong>The new radio hosting system<br \/>\n<\/strong><\/span><\/h4>\n<p>As I explained in <a href=\"https:\/\/www.radioking.com\/blog\/understanding-the-infrastructure-of-radioking-servers-part-1\/\" target=\"_blank\" rel=\"noopener\">Part 1<\/a>, we have set up a <strong>new system<\/strong> to manage and host your radios. This system allows each radio to have <strong>its own operating environment<\/strong>. We have therefore <strong>isolated your radio stations<\/strong> from each other in order to allow us to better manage them.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-23492 lazyload\" data-src=\"https:\/\/www.radioking.com\/blog\/wp-content\/uploads\/2020\/06\/rosa.gif\" alt=\"\" width=\"500\" height=\"281\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 500px; --smush-placeholder-aspect-ratio: 500\/281;\" \/><noscript><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-23492\" src=\"https:\/\/www.radioking.com\/blog\/wp-content\/uploads\/2020\/06\/rosa.gif\" alt=\"\" width=\"500\" height=\"281\" \/><\/noscript><\/p>\n<p>Restarts, updates or even testing of new versions can therefore be done independently, <strong>without impacting other radio stations<\/strong>. This new system, which is fully automated, is based on <strong>Kubernetes<\/strong>. A <strong>Git<\/strong> <strong>repository<\/strong> is in charge of maintaining all the code allowing the management and deployment of the radios. This allows us to guarantee the validity of the configuration applied to the different clusters.<\/p>\n<p>This system, called \u00ab\u00a0GitOps\u00a0\u00bb (I&rsquo;m not a big fan of buzzwords), ensures resilience in the sense that, if the cluster were to be completely destroyed (which I hope not) it would be possible to <strong>rebuild an identical one quickly.<\/strong><\/p>\n<h4><span style=\"color: #fb5e30;\"><strong>The new Radio Manager<\/strong><\/span><\/h4>\n<p>By now, you&rsquo;ve probably taken the new Radio Manager in hand (and we&rsquo;re super proud of that!) This new manager is <strong>better thought out<\/strong> and, above all, <strong>better equipped<\/strong>.<\/p>\n<p>We have re-examined all the <strong>APIs<\/strong> that serve the functionalities offered by this New Manager. Following the logic of stateless (=destructible) micro-services (here the APIs), it is also a Kubernetes cluster that hosts all these APIs. They are separated from the radios cluster to ensure a better resilience.<\/p>\n<p>Once again, management, updates and troubleshooting are <strong>much easier and more reliable<\/strong>. By following the principle \u00ab\u00a0<strong>Cattle vs Pets<\/strong>\u00a0\u00bb (replaceable = cattle, indispensable = pet), every component of this infrastructure is <strong>replaceable without damage.<\/strong><\/p>\n<h4><span style=\"color: #fb5e30;\"><strong>The new file storage system<br \/>\n<\/strong><\/span><\/h4>\n<p>You may have experienced an outage affecting our broadcasting service during the month of June 2020. We have worked hard to provide you with <strong>more reliable and distributed file storage<\/strong>. The new technology used is state of the art, and is in the production phase. We have implemented a Ceph cluster, hosted on <strong>powerful<\/strong> <strong>machines<\/strong> with a <strong>large storage volume.<\/strong><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-23490 lazyload\" data-src=\"https:\/\/www.radioking.com\/blog\/wp-content\/uploads\/2020\/06\/ezgif.com-optimize-1.gif\" alt=\"\" width=\"480\" height=\"320\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 480px; --smush-placeholder-aspect-ratio: 480\/320;\" \/><noscript><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-23490\" src=\"https:\/\/www.radioking.com\/blog\/wp-content\/uploads\/2020\/06\/ezgif.com-optimize-1.gif\" alt=\"\" width=\"480\" height=\"320\" \/><\/noscript><\/p>\n<p>All servers benefited from the latest updates, making them <strong>more secure and reliable<\/strong>. Each component of this infrastructure has been tested as part of\u00a0 the Disaster<b class=\"b4\">\u00a0<\/b>Recovery<b class=\"b5\">\u00a0<\/b>Plan. This means that we have simulated a failure of all or part of the system and <strong>analysed the behaviour<\/strong> of the system in response to the malfunction caused.\u00a0 We are thus able to maintain the distributed file system more efficiently, allowing the storage of all the audio tracks that you add to your <a href=\"https:\/\/manager.radioking.com\/radio\/0\/media\/bac\/1\" target=\"_blank\" rel=\"noopener\">Media Library<\/a>.<\/p>\n<p>Finally, knowing that two precautions are better than one, this system is also <strong>backed up at another host<\/strong>, on <strong>another server<\/strong>. Just like our actual system, by the way.<\/p>\n<h4><strong><span style=\"color: #fb5e30;\">Metrics, metrics and more metrics&#8230;<br \/>\n<\/span><\/strong><\/h4>\n<p>We&rsquo;re continuing to work on the<strong> overview of the entire infrastructure<\/strong>. A large number of <strong>metrics<\/strong>, concerning servers, virtual machines and RadioKing containers, are collected (CPU, RAM, network, etc&#8230;) in order to be alerted at an early stage so that we can <strong>intervene quickly and precisely<\/strong> in case of a malfunction.<\/p>\n<p>These numerous metrics provide increased visibility of the infrastructure, but also an <strong>overall performance index<\/strong>. We are therefore able to scale the various servers that make up our infrastructure.<\/p>\n<p>In addition, the collection of server logs (history) is now <strong>generalized<\/strong> and <strong>centralized<\/strong>. We are currently building dashboards to visualize the log flows. They also give us the possibility to <strong>detect abnormal behaviour<\/strong> of the infrastructure.<\/p>\n<p style=\"text-align: center;\"><a href='https:\/\/www.radioking.com\/create-radio' class='eckosc eckosc_button font_alt eckosc_button_size_large eckosc_button_position_inline eckosc_button_rounded' style='background-color:#fb5e30;' target='_blank'' data-color='#fb5e30'>Create your own radio station today!<\/a>\n","protected":false},"excerpt":{"rendered":"<p>Alain, our system administrator, is back on the blog today following up on his first article. Today we&rsquo;re sharing more secrets about RadioKing&rsquo;s infrastructure!\u00a0<\/p>\n","protected":false},"author":64,"featured_media":23677,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[86],"tags":[],"_links":{"self":[{"href":"https:\/\/www.radioking.com\/blog\/wp-json\/wp\/v2\/posts\/23503"}],"collection":[{"href":"https:\/\/www.radioking.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.radioking.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.radioking.com\/blog\/wp-json\/wp\/v2\/users\/64"}],"replies":[{"embeddable":true,"href":"https:\/\/www.radioking.com\/blog\/wp-json\/wp\/v2\/comments?post=23503"}],"version-history":[{"count":3,"href":"https:\/\/www.radioking.com\/blog\/wp-json\/wp\/v2\/posts\/23503\/revisions"}],"predecessor-version":[{"id":23513,"href":"https:\/\/www.radioking.com\/blog\/wp-json\/wp\/v2\/posts\/23503\/revisions\/23513"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.radioking.com\/blog\/wp-json\/wp\/v2\/media\/23677"}],"wp:attachment":[{"href":"https:\/\/www.radioking.com\/blog\/wp-json\/wp\/v2\/media?parent=23503"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.radioking.com\/blog\/wp-json\/wp\/v2\/categories?post=23503"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.radioking.com\/blog\/wp-json\/wp\/v2\/tags?post=23503"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}