{"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\/sv\/blog\/administrirovanie\/istoriya-sozdaniya-oblachnogo-servisa-pripravlennaya-kiberpankom","title":{"rendered":"Historien bakom skapandet av molntj\u00e4nsten, kryddad med cyberpunk","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Historien bakom skapandet av molntj\u00e4nsten, kryddad med cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/d1cad1dfa3513b5794c7be916a9dbb4b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Med \u00f6kad erfarenhet inom IT b\u00f6rjar man m\u00e4rka att system har sin egen karakt\u00e4r. De kan vara samarbetsvilliga, tystl\u00e5tna, impulsiva eller str\u00e4nga. De kan attrahera eller avskr\u00e4cka. Oavsett vilket m\u00e5ste man \"f\u00f6rhandla\" med dem, man\u00f6vrera mellan \"sk\u00e4rvorna\" och bygga upp kedjor av deras interaktion.<\/p>\n<p><\/p>\n<p>S\u00e5 vi fick chansen att bygga en molnplattform, och f\u00f6r detta beh\u00f6vdes det \"\u00f6vertala\" ett par delsystem att samarbeta med oss. Som tur \u00e4r har vi \"API-spr\u00e5ket\", h\u00e4ndiga h\u00e4nder och massor av entusiasm. <\/p>\n<p><\/p>\n<p>I denna artikel blir det ingen teknisk hardcore, men en beskrivning av de problem vi st\u00f6tt p\u00e5 vid byggandet av molnet. Jag beslutade mig f\u00f6r att beskriva v\u00e5r v\u00e4g som en l\u00e4tt teknisk fantasi om hur vi s\u00f6kte en gemensam grund med systemen och vad som kom ut av det. <\/p>\n<p><\/p>\n<p>V\u00e4lkommen under kat.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><\/p>\n<h3 id=\"nachalo-puti\">Framstegens b\u00f6rjan<\/h3>\n<p><\/p>\n<p>F\u00f6r ett tag sedan st\u00e4lldes v\u00e5r grupp inf\u00f6r uppgiften att lansera en molnplattform f\u00f6r v\u00e5ra kunder. Vi hade st\u00f6d fr\u00e5n ledningen, resurser, h\u00e5rdvarustack och frihet att v\u00e4lja teknologier f\u00f6r implementeringen av programvarudelen av tj\u00e4nsten.<\/p>\n<p><\/p>\n<p>Det fanns ocks\u00e5 ett antal krav:<\/p>\n<p><\/p>\n<ul>\n<li>tj\u00e4nsten beh\u00f6ver en anv\u00e4ndarv\u00e4nlig personlig portal;<\/li>\n<li>plattformen m\u00e5ste integreras med det befintliga faktureringssystemet;<\/li>\n<li>program- och h\u00e5rdvarudelen: OpenStack + Tungsten Fabric (Open Contrail), som v\u00e5ra ingenj\u00f6rer har l\u00e4rt sig att \"laga\" ganska bra.<\/li>\n<\/ul>\n<p><\/p>\n<p>Om hur teamet samlades, hur gr\u00e4nssnittet f\u00f6r den personliga portalen utvecklades och hur designbeslut fattades, kommer vi att ber\u00e4tta en annan g\u00e5ng, om Habr-gemenskapen visar intresse.<br \/>\nVerktygen vi valde att anv\u00e4nda:<\/p>\n<p><\/p>\n<ul>\n<li>Python + Flask + Swagger + SQLAlchemy \u2014 en helt standard Python-sats;<\/li>\n<li>Vue.js f\u00f6r frontend;<\/li>\n<li>interaktionen mellan komponenterna och tj\u00e4nsterna beslutade vi att g\u00f6ra med hj\u00e4lp av Celery ovanp\u00e5 AMQP.<\/li>\n<\/ul>\n<p><\/p>\n<p>Innan jag besvarar fr\u00e5gor om valet av Python, vill jag f\u00f6rklara. Spr\u00e5ket har tagit sin plats inom v\u00e5rt f\u00f6retag och kring det har en liten, men \u00e4nd\u00e5 en kultur formats. D\u00e4rf\u00f6r beslutades det att b\u00f6rja bygga tj\u00e4nsten just p\u00e5 det. Dessutom \u00e4r hastigheten f\u00f6r utvecklingen oftast avg\u00f6rande i s\u00e5dana uppgifter. <\/p>\n<p><\/p>\n<p>S\u00e5, l\u00e5t oss b\u00f6rja v\u00e5r bekantskap.<\/p>\n<p><\/p>\n<h3 id=\"molchalivyy-bill--billing\">Tysta Bill \u2014 fakturering<\/h3>\n<p><\/p>\n<p><em>Vi har k\u00e4nt den h\u00e4r killen l\u00e4nge. Han satt alltid bredvid och r\u00e4knade tyst n\u00e5got. Ibland vidarebefordrade han anv\u00e4ndarf\u00f6rfr\u00e5gningar till oss, st\u00e4llde upp kundfakturor och hanterade tj\u00e4nster. En vanlig arbetsam kille. Dock fanns det sv\u00e5righeter. Han \u00e4r tystl\u00e5ten, ibland eftert\u00e4nksam och ofta \u2014 f\u00f6r sig sj\u00e4lv.<\/em><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Historien bakom skapandet av molntj\u00e4nsten, kryddad med cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/262bb5c9d6234041d264f8e041e647fe.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Faktureringssystemet var den f\u00f6rsta system vi f\u00f6rs\u00f6kte v\u00e4nja oss vid. Och den f\u00f6rsta sv\u00e5righeten vi st\u00f6tte p\u00e5 var vid hantering av tj\u00e4nster.<\/p>\n<p><\/p>\n<p>Till exempel, vid skapande eller radering hamnar uppgiften i faktureringssystemets interna k\u00f6. S\u00e5 h\u00e4r realiserades systemet f\u00f6r asynkron hantering av tj\u00e4nster. F\u00f6r att hantera v\u00e5ra typer av tj\u00e4nster beh\u00f6vde vi \"l\u00e4gga\" v\u00e5ra uppgifter i denna k\u00f6. H\u00e4r st\u00f6tte vi p\u00e5 problemet: brist p\u00e5 dokumentation. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Historien bakom skapandet av molntj\u00e4nsten, kryddad med cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/4d96251df014e315308c94f848bc6cd0.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Enligt beskrivningen av det programm\u00e4ssiga API:t g\u00e5r det att l\u00f6sa denna uppgift, men vi hade ingen tid f\u00f6r reverse engineering, s\u00e5 vi tog ut logiken och organiserade en uppgiftsk\u00f6 ovanp\u00e5 RabbitMQ. En operation \u00f6ver en tj\u00e4nst initieras av kunden fr\u00e5n sin anv\u00e4ndarpanel, omsluts i en \"uppgift\" av Celery p\u00e5 backend-sidan och utf\u00f6rs p\u00e5 fakturerings- och OpenStack-sidan. Celery g\u00f6r det ganska enkelt att hantera uppgifter, organisera omprioriteringar och \u00f6vervaka statusen. F\u00f6r mer om \"selleri\" kan man l\u00e4sa till exempel, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/oleg-bunin\/blog\/433476\/\">h\u00e4r<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Faktureringen stoppade inte projektet n\u00e4r pengarna tog slut. I samtal med utvecklarna ins\u00e5g vi att vid ber\u00e4kning efter statistiken (och vi beh\u00f6ver faktiskt implementera just denna logik) finns det en komplicerad \u00f6msesidig relation av stoppregler. Men dessa modeller passar d\u00e5ligt f\u00f6r v\u00e5r verklighet. Vi implementerade \u00e4ven detta genom uppgifter p\u00e5 Celery, d\u00e4r vi tog logiken f\u00f6r att hantera tj\u00e4nster till backend-sidan. <\/p>\n<p><\/p>\n<p>B\u00e5da ovanst\u00e5ende problemen ledde till att koden blev n\u00e5got \u00f6verdimensionerad och vi kommer i framtiden beh\u00f6va refaktorisera f\u00f6r att separera logiken f\u00f6r uppgiftshantering till en separat tj\u00e4nst. Vi beh\u00f6ver ocks\u00e5 lagra viss information om anv\u00e4ndarna och deras tj\u00e4nster i v\u00e5ra tabeller f\u00f6r att st\u00f6dja denna logik.<\/p>\n<p><\/p>\n<p>Ett annat problem \u00e4r tystnaden.<\/p>\n<p><\/p>\n<p>F\u00f6r vissa f\u00f6rfr\u00e5gningar till API:et svarar Billy tyst \"Okej\". S\u00e5 var till exempel fallet n\u00e4r vi gjorde ins\u00e4ttningar av lovade betalningar under testperioden (om detta senare). F\u00f6rfr\u00e5gningarna utf\u00f6rdes korrekt och vi s\u00e5g inga fel. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Historien bakom skapandet av molntj\u00e4nsten, kryddad med cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/d03f2c381fd39dbf33f2a0c3eeb1294d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Jag var tvungen att studera loggarna n\u00e4r jag arbetade med systemet genom UI. Det visade sig att sj\u00e4lva faktureringen g\u00f6r s\u00e5dana f\u00f6rfr\u00e5gningar genom att \u00e4ndra scope till en specifik anv\u00e4ndare, till exempel admin, och \u00f6verf\u00f6ra den som parameter su.<\/p>\n<p><\/p>\n<p>Sammanfattningsvis, trots luckor i dokumentationen och n\u00e5gra mindre fel i API:et, s\u00e5 gick allt relativt bra. Loggarna g\u00e5r att l\u00e4sa \u00e4ven vid h\u00f6g belastning, om man f\u00f6rst\u00e5r hur de \u00e4r uppbyggda och vad man ska leta efter. Databasens struktur \u00e4r invecklad, men helt rimlig och till och med attraktiv p\u00e5 vissa s\u00e4tt.<\/p>\n<p><\/p>\n<p>S\u00e5, f\u00f6r att sammanfatta, de huvudsakliga problem vi st\u00f6tte p\u00e5 under samarbetet var relaterade till de specifika implementeringarna av systemet: <\/p>\n<p><\/p>\n<ul>\n<li>underdokumenterade \"funktioner\" som p\u00e5 ett eller annat s\u00e4tt p\u00e5verkade oss;<\/li>\n<li>st\u00e4ngda k\u00e4llor (faktureringen \u00e4r skriven i C++), vilket inneb\u00e4r att vi inte kunde l\u00f6sa problem 1 p\u00e5 n\u00e5got annat s\u00e4tt \u00e4n \"metoden av f\u00f6rs\u00f6k och misstag\".<\/li>\n<\/ul>\n<p><\/p>\n<p>Lyckligtvis har produkten ett tillr\u00e4ckligt omfattande API och vi integrerade f\u00f6ljande delsystem i v\u00e5r anv\u00e4ndarpanel:<\/p>\n<p><\/p>\n<ul>\n<li>teknisk supportmodul \u2014 f\u00f6rfr\u00e5gningar fr\u00e5n anv\u00e4ndarpanelen \"proxeras\" i faktureringen transparant f\u00f6r tj\u00e4nstekunder;<\/li>\n<li>finansmodul \u2014 g\u00f6r det m\u00f6jligt att utf\u00e4rda fakturor till nuvarande kunder, genomf\u00f6ra debiteringar och generera betalningsdokument;<\/li>\n<li>tj\u00e4nstehanteringsmodul \u2014 f\u00f6r den var vi tvungna att implementera v\u00e5r egen hanterare. Systemets utbyggbarhet spelade oss i h\u00e4nderna och vi \"tr\u00e4nade\" Billing p\u00e5 en ny typ av tj\u00e4nster.<br \/>\nDet var lite arbete, men oavsett, jag tror att vi kommer att f\u00e5 till det med Billing.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"progulki-po-volframovym-polyam--tungsten-fabric\">Promenader genom tungstenf\u00e4lt \u2014 Tungsten Fabric<\/h3>\n<p><\/p>\n<p><em>Tungstenf\u00e4lt, t\u00e4ckta av hundratals kablar som leder tusentals bitar information genom sig. Informationen samlas i \"paket\", bryts ner, och bygger komplexa rutter, som genom magi.<\/em><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Historien bakom skapandet av molntj\u00e4nsten, kryddad med cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/9b6dd46d9f15e0e3393a8c1222abbf2f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Detta \u00e4r dom\u00e4nen f\u00f6r det andra systemet som vi var tvungna att f\u00e5 att fungera \u2014 Tungsten Fabric (TF), tidigare OpenContrail. Dess uppgift \u00e4r att hantera n\u00e4tverksutrustningen och tillhandah\u00e5lla programvaruabstraktion f\u00f6r oss som anv\u00e4ndare. TF \u2014 SDN, inkapslar komplex logik f\u00f6r arbete med n\u00e4tverksutrustning. Det finns en ganska bra artikel om teknologin, till exempel, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/muk\/blog\/251959\/\">). Ett typiskt exempel p\u00e5 anv\u00e4ndning:<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Systemet \u00e4r integrerat med OpenStack (om det kommer vi att prata om nedan) via Neutron-plugin. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Historien bakom skapandet av molntj\u00e4nsten, kryddad med cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/5abe3992efaab3e016a0c51dc0070a94.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Interaktion mellan OpenStack-tj\u00e4nster.<\/em><\/p>\n<p><\/p>\n<p>Vi blev bekanta med detta system genom grabbarna i driften. Vi anv\u00e4nder systemets API f\u00f6r att hantera n\u00e4tverksstacken av v\u00e5ra tj\u00e4nster. Det har hittills inte orsakat n\u00e5gra allvarliga problem eller besv\u00e4r (jag v\u00e5gar inte uttala mig f\u00f6r grabbarna i drift), men det har ocks\u00e5 funnits n\u00e5gra komiska interaktioner.<\/p>\n<p><\/p>\n<p>Det f\u00f6rsta s\u00e5g ut s\u00e5 h\u00e4r: kommandon som kr\u00e4vde att en stor m\u00e4ngd data skulle skrivas ut p\u00e5 instansens konsol vid anslutning via SSH helt enkelt \"h\u00e4ngde\" anslutningen, medan allt fungerade korrekt via VNC.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Historien bakom skapandet av molntj\u00e4nsten, kryddad med cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/02bc97d63a1299e1dda08fce0f10fb97.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>F\u00f6r dem som inte \u00e4r bekanta med problemet ser det ganska lustigt ut: ls \/root fungerar korrekt, medan till exempel top \"h\u00e4ngde\" helt. Lyckligtvis har vi redan st\u00f6tt p\u00e5 liknande problem. Det l\u00f6stes genom att justera MTU p\u00e5 v\u00e4gen fr\u00e5n compute-noderna till routrarna. F\u00f6r att n\u00e4mna det, \u00e4r detta faktiskt inget problem f\u00f6r TF.<\/p>\n<p><\/p>\n<p>N\u00e4sta problem v\u00e4ntade runt h\u00f6rnet. I ett \"underbart\" \u00f6gonblick f\u00f6rsvann routningens magi, bara s\u00e5 d\u00e4r. TF slutade hantera routningen p\u00e5 utrustningen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Historien bakom skapandet av molntj\u00e4nsten, kryddad med cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/db2a75ffdf2940b2ca90f73835f7a321.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi arbetade med OpenStack p\u00e5 admin-niv\u00e5 och gick sedan \u00f6ver till den n\u00f6dv\u00e4ndiga anv\u00e4ndarniv\u00e5n. SDN verkar \"\u00f6vertar\" den anv\u00e4ndarscope som anv\u00e4nds f\u00f6r att utf\u00f6ra \u00e5tg\u00e4rder. Problemet \u00e4r att detta admin-konto ocks\u00e5 anv\u00e4nds f\u00f6r att kommunicera mellan TF och OpenStack. Vid steget att v\u00e4xla till en anv\u00e4ndare f\u00f6rsvann \"magin\". Det l\u00f6stes genom att skapa ett separat konto f\u00f6r att arbeta med systemet. Detta gjorde att vi kunde arbeta utan att bryta integrationsfunktionaliteten.<\/p>\n<p><\/p>\n<h3 id=\"silikonovye-formy-zhizni--openstack\">Silicon Life Forms \u2014 OpenStack<\/h3>\n<p><\/p>\n<p><em>Det silikonliknande v\u00e4sendet av m\u00e4rklig form bor n\u00e4ra wolframf\u00e4lten. Det liknar mest ett \u00f6vervuxet barn som med ett svep kan krossa oss, men det utstr\u00e5lar ingen uppenbar aggression. Det v\u00e4cker inte r\u00e4dsla, men dess storlek inger f\u00f6rsiktighet. Precis som komplexiteten av vad som h\u00e4nder runt omkring.<\/em><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Historien bakom skapandet av molntj\u00e4nsten, kryddad med cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/8622d43e0cb963bc9ef2a2ce59a32499.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>OpenStack \u00e4r k\u00e4rnan i v\u00e5r plattform.<\/p>\n<p><\/p>\n<p>OpenStack har flera delsystem, av vilka vi hittills mest aktivt anv\u00e4nder Nova, Glance och Cinder. Var och en av dem har sitt eget API. Nova ansvarar f\u00f6r compute-resurser och skapande av instanser, Cinder - hantering av volymer och deras snapshots, Glance - bildtj\u00e4nst som hanterar OS-mallar och metadata om dem.<\/p>\n<p><\/p>\n<p>Varje tj\u00e4nst k\u00f6rs i en container, och budb\u00e4raren \u00e4r \"vita kaninen\" \u2014 RabbitMQ.<\/p>\n<p><\/p>\n<p>Detta system har orsakat oss flest ov\u00e4ntade problem.<\/p>\n<p><\/p>\n<p>Och det f\u00f6rsta problemet l\u00e4t inte v\u00e4nta p\u00e5 sig n\u00e4r vi f\u00f6rs\u00f6kte ansluta en extra volym till servern. Cinder API v\u00e4grade kategoriskt att utf\u00f6ra denna uppgift. Mer specifikt, om man ska tro sj\u00e4lva OpenStack, s\u00e5 etableras anslutningen, men inom den virtuella servern saknas disk enheten.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Historien bakom skapandet av molntj\u00e4nsten, kryddad med cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/b4755d893f3f8ad7d7aeab3af69f35cf.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi beslutade oss f\u00f6r att \"g\u00e5 runt\" och beg\u00e4rde samma \u00e5tg\u00e4rd via Nova API. Resultatet \u2014 enheten kopplades korrekt och var tillg\u00e4nglig inuti servern. Det verkar som att problemet uppst\u00e5r n\u00e4r block-lagringen inte svarar Cinder.<\/p>\n<p><\/p>\n<p>En ytterligare sv\u00e5righet v\u00e4ntade oss n\u00e4r vi arbetade med diskar. Den systemvolym som beh\u00f6vdes kunde inte kopplas bort fr\u00e5n servern.<\/p>\n<p><\/p>\n<p>\u00c5terigen, sj\u00e4lva OpenStack \"lovar\" att den har avbrutit anslutningen och att man nu kan arbeta korrekt med volymen separat. Men API:n vill kategoriskt inte utf\u00f6ra operationer p\u00e5 disken. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Historien bakom skapandet av molntj\u00e4nsten, kryddad med cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/952fd7cd11181605c52a7df71cd4f69f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>H\u00e4r beslutade vi att inte kriga f\u00f6r mycket, utan att \u00e4ndra v\u00e5r syn p\u00e5 hur tj\u00e4nsten fungerar. Eftersom det finns en instans, borde det ocks\u00e5 finnas en systemvolym. D\u00e4rf\u00f6r kan anv\u00e4ndaren f\u00f6r n\u00e4rvarande inte ta bort eller koppla bort den systemiska \"disken\" utan att f\u00f6rst ta bort \"servern\".<\/p>\n<p><\/p>\n<p>OpenStack \u00e4r ett ganska komplext system med sin egen logik och invecklad API. Vi \u00e5tnjuter ganska detaljerad dokumentation och naturligtvis metoden av pr\u00f6vningar och misstag (vad vore vi utan det).<\/p>\n<p><\/p>\n<h3 id=\"testovyy-zapusk\">Testk\u00f6rning<\/h3>\n<p><\/p>\n<p>Vi genomf\u00f6rde testk\u00f6rningen i december f\u00f6rra \u00e5ret. Huvudsyftet var att kontrollera v\u00e5rt projekts tekniska sida och UX i skarpt l\u00e4ge. Publiken invitas selektivt och testningen var st\u00e4ngd. Vi l\u00e4t dock \u00e4ven m\u00f6jlighet att beg\u00e4ra tillg\u00e5ng till testningen via v\u00e5r webbplats.<\/p>\n<p><\/p>\n<p>Sj\u00e4lva tesen, naturligtvis, gick inte utan komiska moment, eftersom v\u00e5ra \u00e4ventyr bara b\u00f6rjar h\u00e4r. <\/p>\n<p><\/p>\n<p>F\u00f6r det f\u00f6rsta uppskattade vi intresset f\u00f6r projektet n\u00e5got felaktigt och vi var tvungna att snabbt l\u00e4gga till compute-noder under testet. Ett vanligt fall f\u00f6r en kluster, men det fanns \u00e4ven h\u00e4r nyanser. I dokumentationen f\u00f6r en specifik TF-version anges en specifik version av k\u00e4rnan, som testades f\u00f6r att arbeta med vRouter. Vi valde att starta noder med nyare k\u00e4rnor. Resultatet \u2014 TF fick inte rutter fr\u00e5n noder. Vi var tvungna att akut rulla tillbaka k\u00e4rnorna.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Historien bakom skapandet av molntj\u00e4nsten, kryddad med cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/377208246d5e396317fb934a35ed1227.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>En annan komisk incident \u00e4r kopplad till funktionaliteten hos knappen \"\u00e4ndra l\u00f6senord\" i anv\u00e4ndarkontot. <\/p>\n<p><\/p>\n<p>Vi har beslutat att anv\u00e4nda JWT f\u00f6r att organisera \u00e5tkomst till anv\u00e4ndarportalen, s\u00e5 att vi inte beh\u00f6ver arbeta med sessioner. Eftersom systemen \u00e4r m\u00e5ngsidiga och spridda, hanterar vi v\u00e5r egen token, d\u00e4r vi \"knyter\" sessioner fr\u00e5n faktureringen och token fr\u00e5n OpenStack. Vid byte av l\u00f6senord, s\u00e5 \"upph\u00f6r\" token, eftersom anv\u00e4ndardata inte l\u00e4ngre \u00e4r giltiga och den m\u00e5ste f\u00f6rnyas. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Historien bakom skapandet av molntj\u00e4nsten, kryddad med cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/daa27256d0b888b2c59d4bc6129f600d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi missade detta \u00f6gonblick, och vi hade helt enkelt inte resurserna f\u00f6r att snabbt skriva klart denna del. Vi var tvungna att ta bort funktionalitet precis f\u00f6re testlanseringen.<br \/>\nF\u00f6r n\u00e4rvarande loggar vi ut anv\u00e4ndaren om l\u00f6senordet har \u00e4ndrats.<\/p>\n<p><\/p>\n<p>Trots dessa nyanser har testningen g\u00e5tt bra. Under ett par veckor hade vi omkring 300 bes\u00f6kare. Vi lyckades se p\u00e5 produkten genom anv\u00e4ndarnas \u00f6gon, testa den i realtid och samla in kvalitativ feedback. <\/p>\n<p><\/p>\n<h3 id=\"prodolzhenie-sleduet\">Forts\u00e4ttning f\u00f6ljer<\/h3>\n<p><\/p>\n<p>F\u00f6r m\u00e5nga av oss \u00e4r detta det f\u00f6rsta projektet av denna storlek. Vi har l\u00e4rt oss en hel del v\u00e4rdefulla l\u00e4xor om hur man arbetar i team, fattar arkitektoniska och designbeslut. Hur man med sm\u00e5 resurser integrerar komplexa system och rullar ut dem i produktion. <\/p>\n<p><\/p>\n<p>Sj\u00e4lvklart finns det mycket att arbeta med b\u00e5de n\u00e4r det g\u00e4ller koden och i integrationspunkterna mellan systemen. Projektet \u00e4r fortfarande ganska ungt, men vi \u00e4r fulla av ambitioner att utveckla det till en p\u00e5litlig och anv\u00e4ndarv\u00e4nlig tj\u00e4nst.<\/p>\n<p><\/p>\n<p>\u0421\u0438\u0441\u0442\u0435\u043c\u044b \u043c\u044b \u0443\u0436\u0435 \u0441\u043c\u043e\u0433\u043b\u0438 \u0443\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c. \u0411\u0438\u043b\u043b \u043f\u043e\u0441\u043b\u0443\u0448\u043d\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0441\u0447\u0435\u0442\u043e\u043c, \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0441\u0447\u0435\u0442\u043e\u0432 \u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0443 \u0441\u0435\u0431\u044f \u0432 \u043a\u0430\u043c\u043e\u0440\u043a\u0435. \u00ab\u0412\u043e\u043b\u0448\u0435\u0431\u0441\u0442\u0432\u043e\u00bb \u0432\u043e\u043b\u044c\u0444\u0440\u0430\u043c\u043e\u0432\u044b\u0445 \u043f\u043e\u043b\u0435\u0439 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u043d\u0430\u0441 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u044c\u044e. \u0418 \u043b\u0438\u0448\u044c OpenStack \u0438\u043d\u043e\u0433\u0434\u0430 \u043a\u0430\u043f\u0440\u0438\u0437\u043d\u0438\u0447\u0430\u0435\u0442, \u0432\u044b\u043a\u0440\u0438\u043a\u0438\u0432\u0430\u044f \u0447\u0442\u043e-\u0442\u043e \u0432\u0440\u043e\u0434\u0435 \u00ab&#8217;WSREP has not yet prepared node for application use\u00bb. \u041d\u043e \u044d\u0442\u043e \u0441\u043e\u0432\u0441\u0435\u043c \u0434\u0440\u0443\u0433\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f\u2026<\/p>\n<p><\/p>\n<p>Nyss lanserade vi tj\u00e4nsten.<br \/>\nAlla detaljer kan du f\u00e5 p\u00e5 v\u00e5r <noindex><a rel=\"nofollow\" href=\"https:\/\/clo.ru?utm_source=habr&amp;utm_medium=article&amp;utm_campaign=product&amp;utm_term=first_clo\">webbplats<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Historien bakom skapandet av molntj\u00e4nsten, kryddad med cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/32550980b529a5d7b395b3962218e53e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>CLO utvecklingsteam<\/em><\/p>\n<p><\/p>\n<p>                        <b class=\"spoiler_title\">Nyttiga l\u00e4nkar<\/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>K\u00e4lla: <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.4 - 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\/sv\/blog\/administrirovanie\/istoriya-sozdaniya-oblachnogo-servisa-pripravlennaya-kiberpankom\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\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\/sv\/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 skapandet av molntj\u00e4nsten, kryddad med cyberpunk | ProHoster","description":"Med \u00f6kad erfarenhet.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/istoriya-sozdaniya-oblachnogo-servisa-pripravlennaya-kiberpankom","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/79153","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=79153"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/79153\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/79154"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=79153"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=79153"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=79153"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}