{"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\/hr\/blog\/administrirovanie\/istoriya-sozdaniya-oblachnogo-servisa-pripravlennaya-kiberpankom","title":{"rendered":"Povijest stvaranja usluge u oblaku, za\u010dinjena cyberpunkom","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Povijest stvaranja usluge u oblaku, za\u010dinjena cyberpunkom\" src=\"\/wp-content\/uploads\/2020\/04\/d1cad1dfa3513b5794c7be916a9dbb4b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>S vremenom u IT-u po\u010dinje\u0161 primje\u0107ivati da sustavi imaju svoj karakter. Mogu biti pristupa\u010dni, tihi, kapriciozni, strogi. Mogu privla\u010diti ili odbijati. Tako ili onako, mora\u0161 \u00abdogovarati\u00bb s njima, manevrirati izme\u0111u \u00abpodvodnih kamen\u010di\u0107a\u00bb i graditi lance njihove interakcije.<\/p>\n<p><\/p>\n<p>Eto, i nama je pripala \u010dast izgraditi cloud platformu, a za to je bilo potrebno \u00abuvjeriti\u00bb par podsustava da rade s nama. Na sre\u0107u, imamo \u00abjezik API\u00bb, lijepe ruke i hrpu entuzijazma. <\/p>\n<p><\/p>\n<p>U ovom \u010dlanku ne\u0107e biti tehni\u010dkih hardcore tema, ali \u0107e biti opis problema s kojima smo se suo\u010dili prilikom izgradnje oblaka. Odlu\u010dio sam opisati na\u0161 put kao laganu tehni\u010dku fantaziju o tome kako smo tra\u017eili zajedni\u010dki jezik sa sustavima i \u0161to je od toga proiza\u0161lo. <\/p>\n<p><\/p>\n<p>Dobrodo\u0161li ispod.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><\/p>\n<h3 id=\"nachalo-puti\">Po\u010detak puta<\/h3>\n<p><\/p>\n<p>Nedavno je pred na\u0161 tim postavljen zadatak \u2014 pokrenuti cloud platformu za na\u0161e klijente. Imali smo podr\u0161ku uprave, resurse, hardverski stog i slobodu u izboru tehnologija za realizaciju softverskog dijela usluge.<\/p>\n<p><\/p>\n<p>Bilo je i nekoliko zahtjeva:<\/p>\n<p><\/p>\n<ul>\n<li>usluga treba imati jednostavno su\u010delje korisni\u010dkog ra\u010duna;<\/li>\n<li>platforma mora biti integrirana u postoje\u0107i sustav naplate;<\/li>\n<li>softversko-hardverski dio: OpenStack + Tungsten Fabric (Open Contrail), koje su na\u0161i in\u017eenjeri nau\u010dili dovoljno dobro \u00abpripremati\u00bb.<\/li>\n<\/ul>\n<p><\/p>\n<p>O tome kako se okupila ekipa, razvijalo su\u010delje korisni\u010dkog ra\u010duna i donosile dizajnerske odluke, pri\u010dat \u0107emo drugi put, ako zajednica Habr bude zainteresirana.<br \/>\nAlati koje smo odlu\u010dili koristiti:<\/p>\n<p><\/p>\n<ul>\n<li>Python + Flask + Swagger + SQLAlchemy \u2014 potpuno standardni Python set;<\/li>\n<li>Vue.js za frontend;<\/li>\n<li>interakciju izme\u0111u komponenti i usluga odlu\u010dili smo raditi uz pomo\u0107 Celery preko AMQP.<\/li>\n<\/ul>\n<p><\/p>\n<p>Anticipiraju\u0107i pitanja o izboru Pythona, pojasnit \u0107u. Jezik je zauzeo svoju ni\u0161u u na\u0161oj tvrtki i oko njega se stvorila mala, ali ipak kultura. Stoga je odlu\u010deno po\u010deti graditi uslugu ba\u0161 na njemu. Tim vi\u0161e \u0161to brzina razvoja u takvim zadacima \u010desto igra klju\u010dnu ulogu. <\/p>\n<p><\/p>\n<p>Dakle, krenimo s na\u0161im upoznavanjem.<\/p>\n<p><\/p>\n<h3 id=\"molchalivyy-bill--billing\">Tihi Bill \u2014 naplata<\/h3>\n<p><\/p>\n<p><em>S ovim momkom poznajemo se ve\u0107 dugo. Uvijek je sjedio pored nas i ne\u0161to tiho ra\u010dunao. Ponekad nam je preusmjeravao korisni\u010dke zahtjeve, izdavao klijentima ra\u010dune, upravljao uslugama. Obi\u010dan radan momak. Istina, bilo je pote\u0161ko\u0107a. Bio je \u0161utljiv, ponekad zami\u0161ljen i \u010desto \u2014 u svom svijetu.<\/em><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Povijest stvaranja usluge u oblaku, za\u010dinjena cyberpunkom\" src=\"\/wp-content\/uploads\/2020\/04\/262bb5c9d6234041d264f8e041e647fe.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Billing je prvi sustav s kojim smo poku\u0161ali ostvariti prijateljski odnos. I prva pote\u0161ko\u0107a nai\u0161la je tijekom obrade usluga.<\/p>\n<p><\/p>\n<p>Na primjer, prilikom kreiranja ili brisanja, zadatak pada u unutarnju queue billing sustava. Tako je implementiran sustav asinkronog rada s uslugama. Za obradu na\u0161ih vrsta usluga morali smo \"slo\u017eiti\" na\u0161e zadatke u tu queue. I ovdje smo se suo\u010dili s problemom: nedostatak dokumentacije. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Povijest stvaranja usluge u oblaku, za\u010dinjena cyberpunkom\" src=\"\/wp-content\/uploads\/2020\/04\/4d96251df014e315308c94f848bc6cd0.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sude\u0107i prema opisu softverskog API-ja, ovu zada\u0107u je ipak mogu\u0107e rije\u0161iti, ali nismo imali vremena za reverzno in\u017eenjerstvo, pa smo iznijeli logiku van i organizirali queue zadataka iznad RabbitMQ. Operacija nad uslugom inicira se od strane klijenta iz korisni\u010dkog su\u010delja, obavija se u \"zadatak\" Celery-ja na backendu i izvr\u0161ava se na strani billing-a i OpenStack-a. Celery omogu\u0107uje prili\u010dno jednostavno upravljanje zadacima, organizaciju ponovnih izvr\u0161enja i pra\u0107enje stanja. Vi\u0161e o \"celery\"-ju mo\u017ee se pro\u010ditati, na primjer, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/oleg-bunin\/blog\/433476\/\">ovdje<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Tako\u0111er, billing nije zaustavljao projekt kada su se novci potro\u0161ili. Razgovaraju\u0107i s programerima, saznali smo da pri prora\u010dunu prema statistikama (a trebali smo implementirati upravo takvu logiku) postoji slo\u017eena me\u0111usobna povezanost pravila zaustavljanja. No, ti modeli slabo odgovaraju na\u0161oj stvarnosti. Tako\u0111er smo implementirali putem zadataka na Celery-ju, prebacuju\u0107i logiku upravljanja uslugama na backend. <\/p>\n<p><\/p>\n<p>Obje gore navedene pote\u0161ko\u0107e dovele su do toga da je kod malo narastao i da \u0107emo se u budu\u0107nosti morati posvetiti refaktoringu kako bismo iznijeli logiku upravljanja zadacima u zasebnu uslugu. Tako\u0111er moramo pohranjivati dio informacija o korisnicima i njihovim uslugama u vlastitim tablicama kako bismo podr\u017eali ovu logiku.<\/p>\n<p><\/p>\n<p>Jo\u0161 jedan problem \u2014 \u0161utljivost.<\/p>\n<p><\/p>\n<p>Na dio zahtjeva prema API-ju Billy mlako odgovara \"U redu\". Tako je bilo, na primjer, kada smo vr\u0161ili knji\u017eenje obe\u0107anih uplata tijekom testiranja (o tome vi\u0161e kasnije). Zahtjevi su ispravno izvr\u0161avani i nismo vidjeli gre\u0161ke. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Povijest stvaranja usluge u oblaku, za\u010dinjena cyberpunkom\" src=\"\/wp-content\/uploads\/2020\/04\/d03f2c381fd39dbf33f2a0c3eeb1294d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Morao sam prou\u010diti logove dok sam radio sa sustavom putem su\u010delja. Isprva se pokazalo da sam billing izvodi takve zahtjeve, mijenjaju\u0107i opseg na odre\u0111enog korisnika, poput admina, proslijediv\u0161i ga u parametru su.<\/p>\n<p><\/p>\n<p>U cjelini, unato\u010d prazninama u dokumentaciji i malim gre\u0161kama u API-ju, sve je pro\u0161lo dovoljno dobro. Logove je mogu\u0107e pro\u010ditati \u010dak i pri velikim optere\u0107enjima, ako se razumije kako su strukturirani i \u0161to treba tra\u017eiti. Struktura baze podataka je kompleksna, ali sasvim logi\u010dna i u ne\u010demu \u010dak i privla\u010dna.<\/p>\n<p><\/p>\n<p>Dakle, da rezimiramo, glavni problemi s kojima smo se susreli tijekom interakcije vezani su uz specifi\u010dnosti implementacije odre\u0111enog sustava: <\/p>\n<p><\/p>\n<ul>\n<li>nedokumentirane \"funkcije\" koje su nas na ovaj ili onaj na\u010din pogodile;<\/li>\n<li>zatvoreni izvorni kodovi (billing je napisan u C++), kao posljedica \u2014 nemogu\u0107nost da se rje\u0161enje za problem 1 prona\u0111e osim metodom \"poku\u0161aja i pogre\u0161aka\".<\/li>\n<\/ul>\n<p><\/p>\n<p>Sre\u0107om, proizvod ima dovoljno razvijen API i integrirali smo u svoj osobni ra\u010dun sljede\u0107e podsustave:<\/p>\n<p><\/p>\n<ul>\n<li>modul tehni\u010dke podr\u0161ke \u2014 zahtjevi iz osobnog ra\u010duna se \"proksiraju\" u billing transparentno za klijente usluge;<\/li>\n<li>financijski modul \u2014 omogu\u0107uje izdavanje ra\u010duna trenutnim klijentima, provo\u0111enje zadu\u017eenja i generiranje platnih dokumenata;<\/li>\n<li>modul za upravljanje uslugama \u2014 za njega smo morali implementirati svoj obradnik. Pro\u0161irivost sustava nam je i\u0161la na ruku i \"nau\u010dili\" smo Billie novom tipu usluga.<br \/>\nBilo je potrebno malo truda, ali mislim da \u0107emo se s Billijem sna\u0107i.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"progulki-po-volframovym-polyam--tungsten-fabric\">\u0160etnje po tungsten poljima \u2014 Tungsten Fabric<\/h3>\n<p><\/p>\n<p><em>Tungsten polja, ispresijecana stotinama \u017eica koje provode tisu\u0107e bitova informacija. Informacije se prikupljaju u \"pakete\", analiziraju se, grade\u0107i slo\u017eene rute, poput \u010darolije.<\/em><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Povijest stvaranja usluge u oblaku, za\u010dinjena cyberpunkom\" src=\"\/wp-content\/uploads\/2020\/04\/9b6dd46d9f15e0e3393a8c1222abbf2f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ovo je podru\u010dje drugog sustava s kojim smo se morali sprijateljiti \u2014 Tungsten Fabric (TF), biv\u0161i OpenContrail. Njegova je zada\u0107a upravljanje mre\u017enom opremom, pru\u017eaju\u0107i softversku apstrakciju nama, kao korisnicima. TF \u2014 SDN, uklju\u010duje slo\u017eenu logiku upravljanja mre\u017enom opremom. O samoj tehnologiji postoji dobar \u010dlanak, na primjer, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/muk\/blog\/251959\/\">ovdje<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Sustav je integriran s OpenStackom (o kojem \u0107emo govoriti u nastavku) putem Neutronovog dodatka. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Povijest stvaranja usluge u oblaku, za\u010dinjena cyberpunkom\" src=\"\/wp-content\/uploads\/2020\/04\/5abe3992efaab3e016a0c51dc0070a94.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Interakcija usluga OpenStack.<\/em><\/p>\n<p><\/p>\n<p>Ovaj sustav nam je predstavila ekipa iz operativnog odjela. Koristimo API sustava za upravljanje mre\u017enim okvirom na\u0161ih usluga. Do sada nam nije uzrokovao ozbiljnije probleme ili neugodnosti, ali ne mogu govoriti u ime kolega iz OE. Me\u0111utim, bilo je i nekoliko neobi\u010dnih situacija tijekom suradnje.<\/p>\n<p><\/p>\n<p>Prvi je izgledao ovako: komande koje zahtijevaju ispis velikih koli\u010dina podataka na konzolu instance pri povezivanju preko SSH jednostavno su \"obje\u0161ivale\" vezu, dok je preko VNC sve radilo ispravno.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Povijest stvaranja usluge u oblaku, za\u010dinjena cyberpunkom\" src=\"\/wp-content\/uploads\/2020\/04\/02bc97d63a1299e1dda08fce0f10fb97.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Za one koji nisu upoznati s problemom, to izgleda prili\u010dno smije\u0161no: ls \/root radi ispravno, dok top, na primjer, \"smrzava\" sustav. Na sre\u0107u, ve\u0107 smo se susreli s sli\u010dnim problemima. Rije\u0161eno je pode\u0161avanjem MTU-a na putu od compute \u010dvorova do usmjeriva\u010da. Usput, to i nije problem TF-a.<\/p>\n<p><\/p>\n<p>Sljede\u0107i problem \u010dekao je iza ugla. U jedan \"predivan\" trenutak, \u010darolija usmjeravanja je nestala, tako jednostavno. TF je prestao upravljati usmjeravanjem na opremi.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Povijest stvaranja usluge u oblaku, za\u010dinjena cyberpunkom\" src=\"\/wp-content\/uploads\/2020\/04\/db2a75ffdf2940b2ca90f73835f7a321.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Radili smo s Openstack s razine admina i nakon toga prelazili na razinu potrebnog korisnika. SDN, \u010dini se, \"presre\u0107e\" opseg korisnika s kojim se izvr\u0161avaju radnje. Stvar je u tome \u0161to se taj isti admin ra\u010dun koristi za povezivanje TF-a i OpenStacka. Tijekom prebacivanja na korisni\u010dki ra\u010dun, \"\u010darolija\" je nestajala. Rje\u0161enje je bilo otvoriti odvojeni ra\u010dun za rad sa sustavom. To je omogu\u0107ilo rad bez naru\u0161avanja funkcionalnosti integracije.<\/p>\n<p><\/p>\n<h3 id=\"silikonovye-formy-zhizni--openstack\">Silicijski oblici \u017eivota \u2014 OpenStack<\/h3>\n<p><\/p>\n<p><em>Silicijsko bi\u0107e neobi\u010dnog oblika \u017eivi nedaleko od wolframovih polja. Najvi\u0161e nalikuje prekomjernom djetetu koje jednim zamahom mo\u017ee zgnje\u010diti nas, ali ne pokazuje o\u010ditu agresiju. Ne izaziva strah, ali njegove dimenzije stvaraju zabrinutost. Kao i slo\u017eenost onoga \u0161to se doga\u0111a oko njega.<\/em><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Povijest stvaranja usluge u oblaku, za\u010dinjena cyberpunkom\" src=\"\/wp-content\/uploads\/2020\/04\/8622d43e0cb963bc9ef2a2ce59a32499.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>OpenStack \u2014 jezgra na\u0161e platforme.<\/p>\n<p><\/p>\n<p>OpenStack ima nekoliko podsustava, od kojih najvi\u0161e koristimo Nova, Glance i Cinder. Svaki od njih ima svoj API. Nova je odgovorna za compute resurse i kreiranje instanci, Cinder za upravljanje volumenima i njihovim snimcima, dok je Glance usluga za slike koja upravlja predlo\u0161cima operativnih sustava i metapodacima vezanim uz njih.<\/p>\n<p><\/p>\n<p>Svaka usluga pokre\u0107e se u kontejneru, a posrednik poruka je \"beli zec\" \u2014 RabbitMQ.<\/p>\n<p><\/p>\n<p>Ovaj sustav nam je najvi\u0161e donio iznena\u0111uju\u0107ih problema.<\/p>\n<p><\/p>\n<p>Prvi problem nije iznenadio kada smo poku\u0161ali povezati dodatni volumen s poslu\u017eiteljem. Cinder API kategori\u010dki je odbio izvr\u0161iti ovu radnju. Drugim rije\u010dima, ako vjerujemo OpenStacku, veza je uspostavljena, ali unutar virtualnog poslu\u017eitelja ure\u0111aj diska nedostaje.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Povijest stvaranja usluge u oblaku, za\u010dinjena cyberpunkom\" src=\"\/wp-content\/uploads\/2020\/04\/b4755d893f3f8ad7d7aeab3af69f35cf.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Odlu\u010dili smo \"i\u0107i naokolo\" i zatra\u017eili istu radnju putem Nova API-ja. Rezultat \u2014 ure\u0111aj se ispravno povezuje i dostupan je unutar poslu\u017eitelja. \u010cini se da problem nastaje kada block-storage ne odgovara Cinderu.<\/p>\n<p><\/p>\n<p>Jo\u0161 jedna pote\u0161ko\u0107a \u010dekala nas je pri radu s diskovima. Nije bilo mogu\u0107e odvojiti sistemski volumen od poslu\u017eitelja.<\/p>\n<p><\/p>\n<p>Ponovno, sam OpenStack \"jam\u010di\" da je veza uklonjena i da sada mo\u017eemo ispravno raditi s volumenom zasebno. No, API kategori\u010dki nije \u017eelio izvesti operacije nad diskom. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Povijest stvaranja usluge u oblaku, za\u010dinjena cyberpunkom\" src=\"\/wp-content\/uploads\/2020\/04\/952fd7cd11181605c52a7df71cd4f69f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ovdje smo odlu\u010dili posebno se ne boriti, ve\u0107 promijeniti pogled na logiku rada usluge. Ako postoji instance, trebao bi postojati i sistemski volumen. Stoga korisnik trenutno ne mo\u017ee izbrisati ili isklju\u010diti sistemski \"disk\" bez brisanja \"poslu\u017eitelja\".<\/p>\n<p><\/p>\n<p>OpenStack je dovoljno slo\u017een kompleks sustava s vlastitom logikom interakcije i zamr\u0161enim API-jem. Pomo\u0107 nam pru\u017ea dovoljno detaljna dokumentacija i, naravno, metod probanja i gre\u0161aka (kuda bi bez njega).<\/p>\n<p><\/p>\n<h3 id=\"testovyy-zapusk\">Testno pokretanje<\/h3>\n<p><\/p>\n<p>Testno pokretanje provodili smo u prosincu pro\u0161le godine. Glavni cilj bio je provjeriti u realnim uvjetima na\u0161 projekt s tehni\u010dke strane i s aspekta UX-a. Publiku smo pozivali selektivno, a testiranje je bilo zatvoreno. No, tako\u0111er smo ostavili mogu\u0107nost za tra\u017eenje pristupa testiranju na na\u0161oj web stranici.<\/p>\n<p><\/p>\n<p>Sam test, naravno, nije pro\u0161ao bez nezgoda, jer su tu na\u0161e avanture tek po\u010dele. <\/p>\n<p><\/p>\n<p>Prvo, malo smo pogre\u0161no procijenili interes za projekt i morali smo brzo dodavati compute \u010dvorove tijekom testa. Uobi\u010dajen slu\u010daj za klaster, no tu su tako\u0111er bili i detalji. U dokumentaciji za odre\u0111enu verziju TF-a navedena je to\u010dna verzija jezgre na kojoj je testirano djelovanje s vRouterom. Odlu\u010dili smo pokretati \u010dvorove s novijim jezgrama. Kao rezultat \u2014 TF nije dobio rute s \u010dvorova. Morali smo hitno vra\u0107ati jezgre.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Povijest stvaranja usluge u oblaku, za\u010dinjena cyberpunkom\" src=\"\/wp-content\/uploads\/2020\/04\/377208246d5e396317fb934a35ed1227.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Druga nezgoda povezana je s funkcionalno\u0161\u0107u gumba \"izmijeni lozinku\" u korisni\u010dkom su\u010delju. <\/p>\n<p><\/p>\n<p>Odlu\u010dili smo koristiti JWT za organizaciju pristupa korisni\u010dkom su\u010delju kako bismo izbjegli rad s sesijama. S obzirom na to da su sustavi raznoliki i \u0161iroko rasprostranjeni, upravljamo vlastitim tokenom u koji \u00abumotavamo\u00bb sesije iz billing sustava i token iz OpenStack-a. Kada se password promijeni, token, naravno, \u00abizgubi na va\u017enosti\u00bb, budu\u0107i da su korisni\u010dki podaci ve\u0107 neva\u017ee\u0107i i treba ih ponovno izdati. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Povijest stvaranja usluge u oblaku, za\u010dinjena cyberpunkom\" src=\"\/wp-content\/uploads\/2020\/04\/daa27256d0b888b2c59d4bc6129f600d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Propustili smo ovaj trenutak, a resursa za brzo dopisivanje ovog dijela jednostavno nije bilo dovoljno. Morali smo izrezati funkcionalnost neposredno prije nego \u0161to smo oti\u0161li u testiranje.<br \/>\nTrenutno izlazimo iz sustava korisnika ako je password promijenjen.<\/p>\n<p><\/p>\n<p>Unato\u010d tim nijansama, testiranje je pro\u0161lo dobro. Tijekom nekoliko tjedana, oko 300 ljudi posjetilo nas je. Uspjeli smo pogledati proizvod o\u010dima korisnika, testirati ga u akciji i prikupiti kvalitetan feedback. <\/p>\n<p><\/p>\n<h3 id=\"prodolzhenie-sleduet\">Nastavlja se<\/h3>\n<p><\/p>\n<p>Za mnoge od nas ovo je prvi projekt ovakvog opsega. Izvukli smo nekoliko dragocjenih lekcija o tome kako raditi u timu, donositi arhitektonske i dizajnerske odluke. Kako integrirati slo\u017eene sustave s ograni\u010denim resursima i implementirati ih u produkciju. <\/p>\n<p><\/p>\n<p>Naravno, ima prostora za rad i na planu koda, kao i na razmaku izme\u0111u integracije sustava. Projekat je jo\u0161 mlad, ali puni smo ambicija da iz njega izgradimo pouzdanu i korisnu uslugu.<\/p>\n<p><\/p>\n<p>Sistemi smo ve\u0107 uspjeli motivirati. Bill se poslu\u0161no bavi ra\u010dunom, slanjem faktura i zahtjevima korisnika u svom kutku. \"\u010carolija\" volframovih polja osigurava nam stabilnu vezu. I samo OpenStack ponekad pravi probleme, vi\u010du\u0107i ne\u0161to poput \"'WSREP jo\u0161 nije pripremio \u010dvor za kori\u0161tenje aplikacije\". No, to je sasvim druga pri\u010da\u2026<\/p>\n<p><\/p>\n<p>Nedavno smo pokrenuli uslugu.<br \/>\nSve detalje mo\u017eete saznati na na\u0161em <noindex><a rel=\"nofollow\" href=\"https:\/\/clo.ru?utm_source=habr&amp;utm_medium=article&amp;utm_campaign=product&amp;utm_term=first_clo\">web stranici<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Povijest stvaranja usluge u oblaku, za\u010dinjena cyberpunkom\" src=\"\/wp-content\/uploads\/2020\/04\/32550980b529a5d7b395b3962218e53e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Razvojni tim CLO<\/em><\/p>\n<p><\/p>\n<p>                        <b class=\"spoiler_title\">Koristitne veze<\/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>Izvor: <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\/hr\/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=\"hr_HR\" \/>\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\/hr\/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\udd47Povijest stvaranja obla\u010dne usluge, za\u010dinjena cyberpunkom | ProHoster","description":"Srazom iskustva.","canonical_url":"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/istoriya-sozdaniya-oblachnogo-servisa-pripravlennaya-kiberpankom","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hr_HR","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\/hr\/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\/hr\/wp-json\/wp\/v2\/posts\/79153","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/comments?post=79153"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts\/79153\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media\/79154"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media?parent=79153"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/categories?post=79153"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/tags?post=79153"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}