{"id":79153,"date":"2020-04-24T19:42:43","date_gmt":"2020-04-24T17:42:43","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/istoriya-sozdaniya-oblachnogo-servisa-pripravlennaya-kiberpankom"},"modified":"2020-04-24T19:42:43","modified_gmt":"2020-04-24T17:42:43","slug":"istoriya-sozdaniya-oblachnogo-servisa-pripravlennaya-kiberpankom","status":"publish","type":"post","link":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/istoriya-sozdaniya-oblachnogo-servisa-pripravlennaya-kiberpankom","title":{"rendered":"Historien om oprettelsen af en cloudtjeneste, krydret med cyberpunk","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Historien om oprettelsen af en cloudtjeneste, krydret med cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/d1cad1dfa3513b5794c7be916a9dbb4b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Med stigende erfaring i IT begynder man at bem\u00e6rke, at systemer har deres egen karakter. De kan v\u00e6re lydige, tavse, flamboyante, h\u00e5rde. De kan tiltr\u00e6kke eller frast\u00f8de. P\u00e5 den ene eller den anden m\u00e5de m\u00e5 man \"forhandle\" med dem, navigere gennem \"undervandsklipper\" og opbygge k\u00e6der af deres interaktion.<\/p>\n<p><\/p>\n<p>Og vi fik \u00e6ren af at bygge en cloud-platform, og for dette kr\u00e6vede det, at vi \"overtalte\" et par undersystemer til at arbejde med os. Heldigvis har vi \"API-sprog\", dygtige h\u00e6nder og en masse begejstring. <\/p>\n<p><\/p>\n<p>I denne artikel vil der ikke v\u00e6re teknisk hardcore, men der vil v\u00e6re en beskrivelse af de problemer, vi st\u00f8dte p\u00e5 under opbygningen af skyen. Jeg har besluttet at beskrive vores rejse som en let teknisk fantasi om, hvordan vi fandt et f\u00e6lles sprog med systemerne, og hvad der kom ud af det. <\/p>\n<p><\/p>\n<p>Velkommen under katten.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><\/p>\n<h3 id=\"nachalo-puti\">Starten p\u00e5 rejsen<\/h3>\n<p><\/p>\n<p>For nogen tid siden blev vores team givet opgaven at lancere en cloud-platform til vores kunder. Vi havde st\u00f8tte fra ledelsen, ressourcer, hardware og frihed til at v\u00e6lge teknologier til implementeringen af den softwaredel.<\/p>\n<p><\/p>\n<p>Der var ogs\u00e5 en r\u00e6kke krav:<\/p>\n<p><\/p>\n<ul>\n<li>tjenesten har brug for et brugervenligt kontrolpanel;<\/li>\n<li>platformen skal integreres i det eksisterende faktureringssystem;<\/li>\n<li>den program- og hardwarem\u00e6ssige del: OpenStack + Tungsten Fabric (Open Contrail), som vores ingeni\u00f8rer har l\u00e6rt at \"tilberede\" godt.<\/li>\n<\/ul>\n<p><\/p>\n<p>Om hvordan holdet blev samlet, der blev udviklet et brugergr\u00e6nseflade til kontrolpanelet, og der blev truffet designbeslutninger, vil jeg fort\u00e6lle om en anden gang, hvis Habr-f\u00e6llesskabet viser interesse.<br \/>\nDe v\u00e6rkt\u00f8jer, vi har besluttet at bruge:<\/p>\n<p><\/p>\n<ul>\n<li>Python + Flask + Swagger + SQLAlchemy \u2013 et ganske standard Python-s\u00e6t;<\/li>\n<li>Vue.js til frontend;<\/li>\n<li>interaktionen mellem komponenterne og tjenesterne besluttede vi at g\u00f8re gennem Celery ovenp\u00e5 AMQP.<\/li>\n<\/ul>\n<p><\/p>\n<p>Forudseende sp\u00f8rgsm\u00e5l om valget af Python, vil jeg pr\u00e6cisere. Sproget har fundet sin niche i vores virksomhed, og omkring det er der opst\u00e5et en lille, men dog kultur. Derfor blev det besluttet at begynde at bygge tjenesten netop p\u00e5 det. Is\u00e6r fordi udviklingshastighed i s\u00e5danne opgaver ofte er afg\u00f8rende. <\/p>\n<p><\/p>\n<p>Lad os s\u00e5 begynde vores bekendtskab.<\/p>\n<p><\/p>\n<h3 id=\"molchalivyy-bill--billing\">Tavs Bill \u2013 fakturering<\/h3>\n<p><\/p>\n<p><em>Vi har kendt denne fyr i lang tid. Han har altid siddet ved siden af og talt stille for sig selv. Nogle gange videresendte han brugernes foresp\u00f8rgsler til os, oprettede kundeudskrifter og styrede tjenesterne. En almindelig h\u00e5rdtarbejdende fyr. Men der var problemer. Han var stille, t\u00e6nksom nogle gange og ofte \u2014 i sine egne tanker.<\/em><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Historien om oprettelsen af en cloudtjeneste, krydret med cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/262bb5c9d6234041d264f8e041e647fe.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Billing er det f\u00f8rste system, som vi fors\u00f8gte at lave en relation til. Og den f\u00f8rste vanskelighed m\u00f8dte vi, da vi skulle h\u00e5ndtere tjenester.<\/p>\n<p><\/p>\n<p>For eksempel, n\u00e5r man opretter eller sletter, havner opgaven i billingens interne k\u00f8. P\u00e5 den m\u00e5de er et system til asynkron behandling af tjenester realiseret. For at behandle vores tjenestetyper blev vi n\u00f8dt til at 'l\u00e6gge' vores opgaver i denne k\u00f8. Og her st\u00f8dte vi p\u00e5 problemet: mangel p\u00e5 dokumentation. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Historien om oprettelsen af en cloudtjeneste, krydret med cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/4d96251df014e315308c94f848bc6cd0.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>If\u00f8lge beskrivelsen af API'et kunne denne opgave dog l\u00f8ses, men vi havde ikke tid til at besk\u00e6ftige os med reverse engineering, s\u00e5 vi flyttede logikken ud og organiserede en opgavek\u00f8 oven p\u00e5 RabbitMQ. Operationen over en tjeneste initieres af kunden fra kontrolpanelet, pakkes ind i en 'opgave' i Celery p\u00e5 backend'en og udf\u00f8res af billing og OpenStack. Celery g\u00f8r det relativt let at administrere opgaver, organisere gentagelser og f\u00f8lge status. Man kan l\u00e6se mere om 'celery' for eksempel h\u00e9r, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/oleg-bunin\/blog\/433476\/\">her<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Desuden stoppede billing ikke projektet, hvor pengene var opbrugt. Ved at kommunikere med udviklerne fandt vi ud af, at der ved beregning af statistik (og vi havde brug for at implementere netop denne logik) er en kompleks sammenh\u00e6ng mellem stopreglerne. Men disse modeller passer ikke godt til vores virkelighed. Vi implementerede ogs\u00e5 dette via opgaver i Celery, hvor vi tog logikken til styring af tjenester p\u00e5 backend-siden. <\/p>\n<p><\/p>\n<p>Begge ovenst\u00e5ende problemer f\u00f8rte til, at koden blev lidt opsvulmet, og at vi i fremtiden bliver n\u00f8dt til at refaktorere for at flytte logikken omkring opgaver til en separat service. Vi skal ogs\u00e5 gemme en del information om brugerne og deres tjenester i vores tabeller for at opretholde denne logik.<\/p>\n<p><\/p>\n<p>Endnu et problem \u2014 tavsheden.<\/p>\n<p><\/p>\n<p>For nogle API-foresp\u00f8rgsler svarer Billy stille 'Okay'. S\u00e5dan var det for eksempel, da vi kreditere de lovede betalinger i testperioden (om det senere). Foresp\u00f8rgslerne blev udf\u00f8rt korrekt, og vi s\u00e5 ingen fejl. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Historien om oprettelsen af en cloudtjeneste, krydret med cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/d03f2c381fd39dbf33f2a0c3eeb1294d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Jeg m\u00e5tte studere loggene, mens jeg arbejdede med systemet gennem UI. Det viste sig, at selve faktureringssystemet udf\u00f8rer s\u00e5danne anmodninger ved at \u00e6ndre omfanget til en specifik bruger, for eksempel admin, ved at sende denne bruger i parameteren su.<\/p>\n<p><\/p>\n<p>Generelt gik det ret godt, p\u00e5 trods af problemerne i dokumentationen og mindre fejl i API'et. Loggene kan l\u00e6ses selv under h\u00f8j belastning, hvis man forst\u00e5r, hvordan de er opbygget, og hvad der skal s\u00f8ges efter. Database-strukturen er indviklet, men ganske logisk og endda p\u00e5 nogle m\u00e5de attraktiv.<\/p>\n<p><\/p>\n<p>S\u00e5 for at opsummere, de vigtigste problemer, vi st\u00f8dte p\u00e5 i interaktionsfasen, skyldtes de specifikke implementeringer af det givne system: <\/p>\n<p><\/p>\n<ul>\n<li>underdokumenterede \u201cfeatures\u201d, der p\u00e5 en eller anden m\u00e5de p\u00e5virkede os;<\/li>\n<li>lukkede kildekoder (faktureringssystemet er skrevet i C++), hvilket resulterer i, at vi ikke kunne l\u00f8se problem 1 p\u00e5 nogen anden m\u00e5de end gennem 'trial and error'.<\/li>\n<\/ul>\n<p><\/p>\n<p>Heldigvis har produktet et ret omfattende API, og vi har integreret f\u00f8lgende undersystemer i vores personlige panel:<\/p>\n<p><\/p>\n<ul>\n<li>teknisk supportmodul - foresp\u00f8rgsler fra det personlige panel 'prokseres' i faktureringen uden at kunderne opdager det;<\/li>\n<li>finansmodul - g\u00f8r det muligt at sende fakturaer til nuv\u00e6rende kunder, foretage debiteringer og generere betalingsdokumenter;<\/li>\n<li>tjenestestyringsmodul - for det var vi n\u00f8dt til at implementere vores egen behandler. Systemets udvidelsesmulighed var en fordel for os, og vi 'tr\u00e6nede' Billy i en ny typetjeneste.<br \/>\nDet var besv\u00e6rligt, men p\u00e5 en eller anden m\u00e5de tror jeg, at vi vil komme overens med Billy.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"progulki-po-volframovym-polyam--tungsten-fabric\">Vandreture gennem wolframfelter - Tungsten Fabric<\/h3>\n<p><\/p>\n<p><em>Wolframfelter, der er fyldt med hundredvis af kabler, der transporterer tusinder af bits information. Informationen samles i 'pakker', der analyseres og danner komplekse ruter, som ved magi.<\/em><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Historien om oprettelsen af en cloudtjeneste, krydret med cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/9b6dd46d9f15e0e3393a8c1222abbf2f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dette er dom\u00e6net for det andet system, som vi m\u00e5tte integrere os med - Tungsten Fabric (TF), tidligere OpenContrail. Dets opgave er at styre netv\u00e6rksudstyr og give os som brugere en software-abstraktion. TF - SDN, inkorporerer kompliceret logik til arbejde med netv\u00e6rksudstyr. Der er en god artikel om selve teknologien, for eksempel, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/muk\/blog\/251959\/\">her<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Systemet er integreret med OpenStack (som der vil blive talt om nedenfor) gennem Neutron-plugin. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Historien om oprettelsen af en cloudtjeneste, krydret med cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/5abe3992efaab3e016a0c51dc0070a94.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Interaktionen mellem OpenStack-tjenester.<\/em><\/p>\n<p><\/p>\n<p>Dette system blev introduceret for os af drengene fra driftsafdelingen. Vi bruger API'et til systemet til at styre netv\u00e6rksstakken for vores tjenester. Det har indtil videre ikke givet os alvorlige problemer eller ubehag (jeg vil ikke tale for drengene fra driftsafdelingen), men der har dog v\u00e6ret nogle kuri\u00f8se interaktioner.<\/p>\n<p><\/p>\n<p>Den f\u00f8rste s\u00e5 s\u00e5dan ud: kommandoer, der skulle udskrive store m\u00e6ngder data til konsollen ved SSH-forbindelse, satte forbindelsen i st\u00e5, mens alt fungerede korrekt via VNC.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Historien om oprettelsen af en cloudtjeneste, krydret med cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/02bc97d63a1299e1dda08fce0f10fb97.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>For dem, der ikke kender problemet, ser det ret komisk ud: ls \/root fungerer korrekt, mens, for eksempel, top 'fryser' helt. Heldigvis har vi allerede v\u00e6ret ude for lignende problemer. Det blev l\u00f8st ved at justere MTU p\u00e5 ruten fra compute-noderne til routerne. For at sige det mildt, det er ikke et problem for TF.<\/p>\n<p><\/p>\n<p>Det n\u00e6ste problem ventede om hj\u00f8rnet. P\u00e5 et 'smukt' tidspunkt forsvandt rutingmagien, bare s\u00e5dan. TF stoppede med at styre ruting p\u00e5 udstyret.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Historien om oprettelsen af en cloudtjeneste, krydret med cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/db2a75ffdf2940b2ca90f73835f7a321.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi arbejdede med OpenStack fra admin-niveau, og efter det skiftede vi til det \u00f8nskede brugerniveau. SDN ser ud til at 'fange' brugerscope, hvormed handlinger udf\u00f8res. Problemet er, at denne samme admin-konto bruges til at forbinde TF og OpenStack. Ved skiftet til brugeren forsvandt 'magien'. Det blev l\u00f8st ved at oprette en separat konto til arbejdet med systemet. Dette gjorde det muligt at arbejde uden at bryde integrationsfunktionen.<\/p>\n<p><\/p>\n<h3 id=\"silikonovye-formy-zhizni--openstack\">Siliciumlivsformer \u2013 OpenStack<\/h3>\n<p><\/p>\n<p><em>Det siliciumv\u00e6sen med sin underlige form lever t\u00e6t p\u00e5 wolframfelterne. Det mest ligner et overdimensioneret barn, der med et enkelt sving kan kaste os til side, men der kommer ikke nogen \u00e5benlys aggression fra det. Det er ikke skr\u00e6mmende, men dets st\u00f8rrelse giver anledning til bekymring. Ligesom kompleksiteten af det, der foreg\u00e5r omkring.<\/em><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Historien om oprettelsen af en cloudtjeneste, krydret med cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/8622d43e0cb963bc9ef2a2ce59a32499.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>OpenStack er kernen i vores platform.<\/p>\n<p><\/p>\n<p>OpenStack har flere undersystemer, hvoraf vi indtil videre bruger Nova, Glance og Cinder mest aktivt. Hver af dem har sit eget API. Nova st\u00e5r for compute-ressourcer og oprettelse af instanser, Cinder \u2013 administration af volumener og deres snapshots, Glance \u2013 billedtjeneste, der administrerer OS-skabeloner og metadata om dem.<\/p>\n<p><\/p>\n<p>Hver service k\u00f8rer i en container, og beskedbrokeren er 'den hvide kanin' \u2013 RabbitMQ.<\/p>\n<p><\/p>\n<p>Dette system har givet os flest uventede problemer.<\/p>\n<p><\/p>\n<p>Og den f\u00f8rste udfordring dukkede hurtigt op, da vi fors\u00f8gte at tilslutte et ekstra volume til serveren. Cinder API n\u00e6gtede konsekvent at udf\u00f8re denne opgave. Mere pr\u00e6cist, hvis man skal tro OpenStack selv, s\u00e5 oprettes forbindelsen, men inde i den virtuelle server mangler disk-enheden.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Historien om oprettelsen af en cloudtjeneste, krydret med cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/b4755d893f3f8ad7d7aeab3af69f35cf.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi besluttede os for at \"g\u00e5 en omvej\" og anmodede om den samme handling fra Nova API. Resultatet \u2014 enheden tilsluttes korrekt og er tilg\u00e6ngelig inde i serveren. Det ser ud til, at problemet opst\u00e5r, n\u00e5r block-storage ikke svarer Cinder.<\/p>\n<p><\/p>\n<p>Endnu en kompleksitet ventede os, da vi arbejdede med diskene. Systemvolumen kunne ikke frakobles fra serveren.<\/p>\n<p><\/p>\n<p>Igen h\u00e6vder OpenStack, at den har \u00f8delagt forbindelsen, og nu kan man arbejde korrekt med volume separat. Men API'en n\u00e6gtede kategorisk at udf\u00f8re operationer p\u00e5 disken. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Historien om oprettelsen af en cloudtjeneste, krydret med cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/952fd7cd11181605c52a7df71cd4f69f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Her besluttede vi ikke at k\u00e6mpe for meget, men \u00e6ndrede perspektivet p\u00e5 logikken bag tjenesten. Da der er en instans, skal der ogs\u00e5 v\u00e6re et systemvolume. Derfor kan brugeren ikke slette eller frakoble \"disk\" uden at slette \"serveren\".<\/p>\n<p><\/p>\n<p>OpenStack er et ret komplekst systemkompleks med sin egen logik for interaktion og indviklet API. Vi f\u00e5r hj\u00e6lp fra ret detaljeret dokumentation og selvf\u00f8lgelig metoden med pr\u00f8ver og fejl (hvordan kunne det v\u00e6re anderledes?).<\/p>\n<p><\/p>\n<h3 id=\"testovyy-zapusk\">Testk\u00f8rsel<\/h3>\n<p><\/p>\n<p>Vi udf\u00f8rte testk\u00f8rslen i december sidste \u00e5r. Hovedopgaven var at kontrollere vores projekts tekniske side i driftsmilj\u00f8et og UX-siden. Publikum blev inviteret udvalgt, og testningen var lukket. Vi gav dog ogs\u00e5 mulighed for at anmode om adgang til testningen p\u00e5 vores hjemmeside.<\/p>\n<p><\/p>\n<p>Selve testen blev naturligvis ikke uden komiske \u00f8jeblikke, da vores eventyr kun lige var begyndt. <\/p>\n<p><\/p>\n<p>For det f\u00f8rste undervurderede vi interessen for projektet, og vi m\u00e5tte hurtigt tilf\u00f8je compute-noder midt i testen. En almindelig sag for et klynge, men der var ogs\u00e5 nuancer her. I dokumentationen for den specifikke version af TF er der angivet en bestemt version af kernen, hvorp\u00e5 arbejdet med vRouter blev testet. Vi besluttede at starte noder med nyere kerner. Resultatet \u2014 TF modtog ikke ruter fra noderne. Vi m\u00e5tte hastigt nedgradere kernerne.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Historien om oprettelsen af en cloudtjeneste, krydret med cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/377208246d5e396317fb934a35ed1227.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>En anden komisk situation er relateret til funktionen af knappen \"\u00e6ndre adgangskode\" i den personlige konto. <\/p>\n<p><\/p>\n<p>Vi har besluttet at bruge JWT til at organisere adgangen til brugerens konto, s\u00e5 vi ikke skal arbejde med sessioner. Da systemerne er forskellige og bredt distribuerede, styrer vi vores egen token, hvor vi \"pakket\" sessionerne fra fakturering og token fra OpenStack. Ved \u00e6ndring af passwordet \"udl\u00f8ber\" tokenet selvf\u00f8lgelig, da brugerens data ikke l\u00e6ngere er gyldige, og det skal genudstedes. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Historien om oprettelsen af en cloudtjeneste, krydret med cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/daa27256d0b888b2c59d4bc6129f600d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi glemte dette punkt, og vi havde simpelt hen ikke ressourcer til hurtigt at skrive denne del. Vi m\u00e5tte sk\u00e6re funktionalitet fra lige f\u00f8r testlanceringen.<br \/>\nI \u00f8jeblikket logger vi brugeren ud, hvis passwordet er blevet \u00e6ndret.<\/p>\n<p><\/p>\n<p>P\u00e5 trods af disse nuancer gik testningen godt. I l\u00f8bet af et par uger havde vi omkring 300 bes\u00f8gende. Vi fik mulighed for at se produktet gennem brugernes \u00f8jne, teste det i praksis og indsamle kvalitetsfeedback. <\/p>\n<p><\/p>\n<h3 id=\"prodolzhenie-sleduet\">Forts\u00e6ttes<\/h3>\n<p><\/p>\n<p>For mange af os er dette det f\u00f8rste projekt af denne st\u00f8rrelse. Vi har l\u00e6rt en r\u00e6kke v\u00e6rdifulde lektioner om, hvordan man arbejder i et team, tr\u00e6ffer arkitektoniske og designbeslutninger. Hvordan man integrerer komplekse systemer med begr\u00e6nsede ressourcer og ruller dem ud i produktionen. <\/p>\n<p><\/p>\n<p>Selvf\u00f8lgelig er der stadig meget at arbejde p\u00e5 b\u00e5de med koden og i gr\u00e6nsefladerne mellem systemerne. Projektet er stadig ungt, men vi er fulde af ambitioner om at g\u00f8re det til en p\u00e5lidelig og brugervenlig service.<\/p>\n<p><\/p>\n<p>Vi har allerede f\u00e5et systemerne til at samarbejde. Bill sidder lydigt og t\u00e6ller, fakturerer og h\u00e5ndterer brugernes foresp\u00f8rgsler i sit lille rum. \"Magien\" fra tungstenfelterne sikrer os stabil kommunikation. Og kun OpenStack er nogle gange lunefuld og r\u00e5ber noget i retning af \"WSREP har endnu ikke forberedt noden til anvendelse af applikationen\". Men det er en helt anden historie...<\/p>\n<p><\/p>\n<p>Vi har for nylig lanceret tjenesten.<br \/>\nDu kan finde alle detaljer p\u00e5 vores <noindex><a rel=\"nofollow\" href=\"https:\/\/clo.ru?utm_source=habr&amp;utm_medium=article&amp;utm_campaign=product&amp;utm_term=first_clo\">websitet<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Historien om oprettelsen af en cloudtjeneste, krydret med cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/32550980b529a5d7b395b3962218e53e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>CLO udviklingsteam<\/em><\/p>\n<p><\/p>\n<p>                        <b class=\"spoiler_title\">Nyttige links<\/b><\/p>\n<p><strong>OpenStack<\/strong><\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.openstack.org\/nova\/latest\/\">https:\/\/docs.openstack.org\/nova\/latest\/<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.openstack.org\/keystone\/latest\/\">https:\/\/docs.openstack.org\/keystone\/latest\/<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.openstack.org\/cinder\/latest\/\">https:\/\/docs.openstack.org\/cinder\/latest\/<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.openstack.org\/glance\/latest\/\">https:\/\/docs.openstack.org\/glance\/latest\/<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<p><strong>Tungsten Fabric<\/strong><\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/docs.tungsten.io\/en\/latest\/user\/getting-started\/index.html\">http:\/\/docs.tungsten.io\/en\/latest\/user\/getting-started\/index.html<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.juniper.net\/documentation\/en_US\/contrail-cloud10.0\/topics\/concept\/contrail-cloud-openstack-integration-overview.html\">https:\/\/www.juniper.net\/documentation\/en_US\/contrail-cloud10.0\/topics\/concept\/contrail-cloud-openstack-integration-overview.html<\/a><\/noindex><\/li>\n<\/ul>\n<p>Kilde: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/first\/blog\/493606\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0421 \u0440\u043e\u0441\u0442\u043e\u043c \u0441\u0442\u0430\u0436\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0432 IT \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0448\u044c \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u044c, \u0447\u0442\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438\u043c\u0435\u044e\u0442 \u0441\u0432\u043e\u0439 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440. \u041e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043a\u043b\u0430\u0434\u0438\u0441\u0442\u044b\u043c\u0438, \u043c\u043e\u043b\u0447\u0430\u043b\u0438\u0432\u044b\u043c\u0438, \u0432\u0437\u0431\u0430\u043b\u043c\u043e\u0448\u043d\u044b\u043c\u0438, \u0441\u0443\u0440\u043e\u0432\u044b\u043c\u0438. \u041c\u043e\u0433\u0443\u0442 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c \u043a \u0441\u0435\u0431\u0435 \u0438\u043b\u0438 \u043e\u0442\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0442\u044c. \u0422\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435, \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u00ab\u0434\u043e\u0433\u043e\u0432\u0430\u0440\u0438\u0432\u0430\u0442\u044c\u0441\u044f\u00bb \u0441 \u043d\u0438\u043c\u0438, \u043b\u0430\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u00ab\u043f\u043e\u0434\u0432\u043e\u0434\u043d\u044b\u043c\u0438 \u043a\u0430\u043c\u043d\u044f\u043c\u0438\u00bb \u0438 \u0432\u044b\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u0438\u0445 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. \u0412\u043e\u0442 \u0438 \u043d\u0430\u043c \u0432\u044b\u043f\u0430\u043b\u0430 \u0447\u0435\u0441\u0442\u044c \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043e\u0431\u043b\u0430\u0447\u043d\u0443\u044e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443, \u0430 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u00ab\u0443\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c\u00bb [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":79154,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-79153","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0421 \u0440\u043e\u0441\u0442\u043e\u043c \u0441\u0442\u0430\u0436\u0430.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/istoriya-sozdaniya-oblachnogo-servisa-pripravlennaya-kiberpankom\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u043f\u0440\u0438\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u043a\u0438\u0431\u0435\u0440\u043f\u0430\u043d\u043a\u043e\u043c | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0421 \u0440\u043e\u0441\u0442\u043e\u043c \u0441\u0442\u0430\u0436\u0430.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/istoriya-sozdaniya-oblachnogo-servisa-pripravlennaya-kiberpankom\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-04-24T17:42:43+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-04-24T17:42:43+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Historien om oprettelsen af en cloud service, krydret med cyberpunk | ProHoster","description":"Med stigende erfaring.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/istoriya-sozdaniya-oblachnogo-servisa-pripravlennaya-kiberpankom","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u043f\u0440\u0438\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u043a\u0438\u0431\u0435\u0440\u043f\u0430\u043d\u043a\u043e\u043c | ProHoster","og:description":"\u0421 \u0440\u043e\u0441\u0442\u043e\u043c \u0441\u0442\u0430\u0436\u0430.","og:url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/istoriya-sozdaniya-oblachnogo-servisa-pripravlennaya-kiberpankom","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-04-24T17:42:43+00:00","article:modified_time":"2020-04-24T17:42:43+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"79153","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 16:43:24","updated":"2022-10-02 03:25:48","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/79153","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=79153"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/79153\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/79154"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=79153"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=79153"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=79153"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}