Mākoņpakalpojuma izveides vēsture, kas papildināta ar kiberpanku

Mākoņpakalpojuma izveides vēsture, kas papildināta ar kiberpanku

Strādājot IT jomā, jūs sākat pamanīt, ka sistēmām ir savs raksturs. Tie var būt elastīgi, klusi, ekscentriski un stingri. Viņi var piesaistīt vai atbaidīt. Tā vai citādi, jums ir "jāvienojas" ar viņiem, jāmanevrē starp "slazdiem" un jāveido viņu mijiedarbības ķēdes.

Tāpēc mums bija tas gods izveidot mākoņa platformu, un Å”im nolÅ«kam mums vajadzēja ā€œpārliecinātā€ dažas apakÅ”sistēmas sadarboties ar mums. Par laimi, mums ir ā€œAPI valodaā€, tieÅ”as rokas un liels entuziasms.

Šis raksts nebūs tehniski sarežģīts, taču tajā tiks aprakstītas problēmas, ar kurām saskārāmies mākoņa izveides laikā. Nolēmu aprakstīt mūsu ceļu vieglas tehniskas fantāzijas veidā par to, kā mēs meklējām kopīgu valodu ar sistēmām un kas no tā iznāca.

Laipni lūdzam kaķī.

Sākot no ceļojuma

Pirms kāda laika mūsu komandai tika uzdots palaist mākoņu platformu mūsu klientiem. Mums bija vadības atbalsts, resursi, aparatūras steks un brīvība tehnoloģiju izvēlē, lai ieviestu pakalpojuma programmatūras daļu.

Bija arī vairākas prasības:

  • pakalpojumam ir nepiecieÅ”ams ērts personÄ«gais konts;
  • platformai jābÅ«t integrētai esoÅ”ajā norēķinu sistēmā;
  • programmatÅ«ra un aparatÅ«ra: OpenStack + Tungsten Fabric (Open Contrail), ko mÅ«su inženieri ir iemācÄ«juÅ”ies diezgan labi ā€œpagatavotā€.

Par to, kā tika komplektēta komanda, izstrādāts personīgā konta interfeiss un pieņemti dizaina lēmumi, pastāstīsim citreiz, ja Habras kopienai būs interese.
Rīki, kurus nolēmām izmantot:

  • Python + Flask + Swagger + SQLAlchemy - pilnÄ«gi standarta Python komplekts;
  • Vue.js priekÅ”galam;
  • Mēs nolēmām mijiedarboties starp komponentiem un pakalpojumiem, izmantojot Selery, izmantojot AMQP.

Paredzot jautājumus par Python izvēli, es paskaidroÅ”u. MÅ«su uzņēmumā valoda ir atradusi savu niÅ”u un ap to izveidojusies neliela, bet tomēr kultÅ«ra. Tāpēc tika nolemts uz tā sākt bÅ«vēt dienestu. Turklāt Ŕādu problēmu attÄ«stÄ«bas ātrums bieži ir noteicoÅ”ais.

Tātad, sāksim mūsu iepazīŔanos.

Klusais rēķins - rēķini

Mēs esam pazÄ«stami ar Å”o puisi ilgu laiku. ViņŔ vienmēr sēdēja man blakus un klusÄ«bā kaut ko skaitÄ«ja. Dažkārt viņŔ pārsÅ«tÄ«ja mums lietotāju pieprasÄ«jumus, izrakstÄ«ja klientu rēķinus un pārvaldÄ«ja pakalpojumus. Parasts strādÄ«gs puisis. Tiesa, bija grÅ«tÄ«bas. ViņŔ ir kluss, dažreiz domÄ«gs un bieži vien pie sevis domā.

Mākoņpakalpojuma izveides vēsture, kas papildināta ar kiberpanku

Norēķini ir pirmā sistēma, ar kuru mēģinājām sadraudzēties. Un pirmās grūtības, ar kurām saskārāmies, bija pakalpojumu apstrādē.

Piemēram, kad uzdevums ir izveidots vai dzēsts, tas nonāk iekŔējā norēķinu rindā. Tādējādi tiek ieviesta asinhronā darba sistēma ar pakalpojumiem. Lai apstrādātu mÅ«su pakalpojumu veidus, mÅ«su uzdevumi bija jāievieto Å”ajā rindā. Un Å”eit mēs saskārāmies ar problēmu: trÅ«kst dokumentācijas.

Mākoņpakalpojuma izveides vēsture, kas papildināta ar kiberpanku

Spriežot pēc programmatÅ«ras API apraksta, Å”o problēmu joprojām ir iespējams atrisināt, taču mums nebija laika veikt reverso inženieriju, tāpēc mēs izņēmām loÄ£iku un organizējām uzdevumu rindu virs RabbitMQ. DarbÄ«bu ar pakalpojumu klients iniciē no sava personÄ«gā konta, tā pārvērÅ”as par Selery ā€œuzdevumuā€ aizmugurē un tiek veikta norēķinu un OpenStack pusē. Selerijas ļauj diezgan ērti pārvaldÄ«t uzdevumus, organizēt atkārtojumus un uzraudzÄ«t statusu. JÅ«s varat lasÄ«t vairāk par ā€œselerijuā€, piemēram, Å”eit.

ArÄ« rēķinu izrakstÄ«Å”ana neapturēja projektu, kuram pietrÅ«ka naudas. Sazinoties ar izstrādātājiem, mēs noskaidrojām, ka, aprēķinot statistiku (un mums ir jāīsteno tieÅ”i Ŕāda veida loÄ£ika), pastāv sarežģīta apstāŔanās noteikumu savstarpējā saistÄ«ba. Taču Å”ie modeļi neatbilst mÅ«su realitātei. Mēs to arÄ« ieviesām, izmantojot uzdevumus vietnē Selery, izmantojot pakalpojumu pārvaldÄ«bas loÄ£iku aizmugures pusē.

Abas iepriekÅ” minētās problēmas noveda pie tā, ka kods kļuva nedaudz uzpÅ«sts, un nākotnē mums bÅ«s jāpārveido, lai pārvietotu loÄ£iku darbam ar uzdevumiem atseviŔķā pakalpojumā. Lai atbalstÄ«tu Å”o loÄ£iku, mÅ«su tabulās ir jāsaglabā informācija par lietotājiem un viņu pakalpojumiem.

Vēl viena problēma ir klusÄ“Å”ana.

Billijs klusi atbild ar ā€œOkā€ uz dažiem API pieprasÄ«jumiem. Tā tas bija, piemēram, kad pārbaudes laikā veicām solÄ«to maksājumu maksājumus (vairāk par to vēlāk). PieprasÄ«jumi tika izpildÄ«ti pareizi, un mēs neredzējām nekādas kļūdas.

Mākoņpakalpojuma izveides vēsture, kas papildināta ar kiberpanku

Man bija jāizpēta žurnāli, strādājot ar sistēmu caur UI. Izrādījās, ka rēķins pats veic līdzīgus pieprasījumus, mainot sfēru uz konkrētu lietotāju, piemēram, admin, nododot to parametrā su.

Kopumā, neskatoties uz nepilnÄ«bām dokumentācijā un nelieliem API trÅ«kumiem, viss noritēja diezgan labi. Žurnālus var lasÄ«t pat pie lielas slodzes, ja saprotat, kā tie ir strukturēti un kam jāpievērÅ” uzmanÄ«ba. Datu bāzes struktÅ«ra ir grezna, taču diezgan loÄ£iska un savā ziņā pat pievilcÄ«ga.

Tātad, apkopojot, galvenās problēmas, ar kurām mēs saskārāmies mijiedarbÄ«bas posmā, ir saistÄ«tas ar konkrētas sistēmas ievieÅ”anas iezÄ«mēm:

  • nedokumentētas ā€œiezÄ«mesā€, kas mÅ«s tā vai citādi ietekmējuÅ”as;
  • slēgtā avota (norēķini tiek rakstÄ«ti C++ valodā), kā rezultātā - 1. problēmu nav iespējams atrisināt citādi, kā tikai ā€œizmēģinājumu un kļūduā€.

Par laimi, produktam ir diezgan plaÅ”a API, un mēs savā personÄ«gajā kontā esam integrējuÅ”i Ŕādas apakÅ”sistēmas:

  • tehniskā atbalsta modulis - pieprasÄ«jumi no jÅ«su personÄ«gā konta tiek pārskatāmi piesaistÄ«ti norēķinu veikÅ”anai pakalpojumu klientiem;
  • finanÅ”u modulis - ļauj izrakstÄ«t rēķinus esoÅ”ajiem klientiem, veikt norakstÄ«Å”anu un Ä£enerēt maksājumu dokumentus;
  • servisa vadÄ«bas modulis - Å”im nolÅ«kam mums bija jāievieÅ” savs hendleris. Sistēmas paplaÅ”ināmÄ«ba nospēlēja mÅ«su rokās, un mēs ā€œiemācÄ«jāmā€ Billijam jauna veida pakalpojumu.
    Tas bija nedaudz apgrūtinājums, bet tā vai citādi, es domāju, ka mēs ar Billiju tiksim galā.

Pastaiga pa volframa laukiem ā€“ Tungsten Fabric

Volframa lauki, kas izraibināti ar simtiem vadu, caur tiem nododot tÅ«kstoÅ”iem informācijas bitu. Informācija tiek savākta ā€œpaketēsā€, parsēta, veidojot sarežģītus marÅ”rutus, it kā ar burvju mājienu.

Mākoņpakalpojuma izveides vēsture, kas papildināta ar kiberpanku

Å Ä« ir otrās sistēmas domēns, ar kuru mums bija jāsadraudzējas - Tungsten Fabric (TF), agrāk OpenContrail. Tās uzdevums ir pārvaldÄ«t tÄ«kla iekārtas, nodroÅ”inot programmatÅ«ras abstrakciju mums kā lietotājiem. TF - SDN, iekapsulē sarežģīto loÄ£iku darbam ar tÄ«kla iekārtām. Ir labs raksts par paÅ”u tehnoloÄ£iju, piemēram, Å”eit.

Sistēma ir integrēta ar OpenStack (apskatīts tālāk), izmantojot Neutron spraudni.

Mākoņpakalpojuma izveides vēsture, kas papildināta ar kiberpanku
OpenStack pakalpojumu mijiedarbība.

Operāciju nodaļas puiÅ”i mÅ«s iepazÄ«stināja ar Å”o sistēmu. Mēs izmantojam sistēmas API, lai pārvaldÄ«tu mÅ«su pakalpojumu tÄ«kla steku. Mums tas vēl nav radÄ«jis nekādas nopietnas problēmas vai neērtÄ«bas (es nevaru runāt par puiÅ”iem no OE), taču mijiedarbÄ«bā ir bijuÅ”as dažas dÄ«vainÄ«bas.

Pirmais izskatÄ«jās Ŕādi: komandas, kurām, veidojot savienojumu, izmantojot SSH, bija nepiecieÅ”ams izvadÄ«t lielu datu apjomu uz instances konsoli, vienkārÅ”i ā€œuzkāraā€ savienojumu, savukārt caur VNC viss darbojās pareizi.

Mākoņpakalpojuma izveides vēsture, kas papildināta ar kiberpanku

Tiem, kam problēma nav pazÄ«stama, tā izskatās diezgan jocÄ«gi: ls /root darbojas pareizi, kamēr, piemēram, tops ā€œsasalstā€ pilnÄ«bā. Par laimi, mēs jau iepriekÅ” esam saskāruÅ”ies ar lÄ«dzÄ«gām problēmām. Tas tika nolemts, noskaņojot MTU marÅ”rutā no skaitļoÅ”anas mezgliem uz marÅ”rutētājiem. Starp citu, tā nav TF problēma.

Nākamā problēma bija tepat aiz stÅ«ra. Vienā ā€œskaistajāā€ mirklÄ« marÅ”rutÄ“Å”anas burvÄ«ba pazuda, tāpat vien. TF ir pārtraucis aprÄ«kojuma marÅ”rutÄ“Å”anas pārvaldÄ«bu.

Mākoņpakalpojuma izveides vēsture, kas papildināta ar kiberpanku

Mēs strādājām ar Openstack no administratora lÄ«meņa un pēc tam pārgājām uz nepiecieÅ”amo lietotāja lÄ«meni. Å Ä·iet, ka SDN ā€œnolaupaā€ tā lietotāja loku, kurÅ” veic darbÄ«bas. Fakts ir tāds, ka TF un OpenStack savienoÅ”anai tiek izmantots tas pats administratora konts. Pārejot uz lietotāju, ā€œmaÄ£ijaā€ pazuda. Tika nolemts izveidot atseviŔķu kontu darbam ar sistēmu. Tas ļāva mums strādāt, nepārkāpjot integrācijas funkcionalitāti.

Silicon Lifeforms ā€” OpenStack

Netālu no volframa laukiem dzÄ«vo dÄ«vainas formas silikona radÄ«jums. Visvairāk tas izskatās pēc pārauguÅ”a bērna, kurÅ” var mÅ«s saspiest ar vienu ŔūpoÅ”anos, bet no viņa puses nav redzama acÄ«mredzama agresija. Tas neizraisa bailes, bet tā izmērs iedveÅ” bailes. Tāpat kā apkārt notiekoŔā sarežģītÄ«ba.

Mākoņpakalpojuma izveides vēsture, kas papildināta ar kiberpanku

OpenStack ir mūsu platformas kodols.

OpenStack ir vairākas apakÅ”sistēmas, no kurām Å”obrÄ«d visaktÄ«vāk izmantojam Nova, Glance un Cinder. Katram no tiem ir savs API. Nova ir atbildÄ«gs par skaitļoÅ”anas resursiem un gadÄ«jumu izveidi, Cinder ir atbildÄ«gs par apjomu un to momentuzņēmumu pārvaldÄ«bu, Glance ir attēlu pakalpojums, kas pārvalda OS veidnes un metainformāciju par tiem.

Katrs pakalpojums darbojas konteinerā, un ziņojumu starpnieks ir ā€œbaltais trusisā€ - RabbitMQ.

Šī sistēma mums sagādāja visnegaidītākās problēmas.

Un pirmā problēma nebija ilgi jāgaida, kad mēģinājām pieslēgt serverim papildu sējumu. Cinder API kategoriski atteicās veikt Å”o uzdevumu. PrecÄ«zāk, ja ticat paÅ”am OpenStack, savienojums ir izveidots, bet virtuālajā serverÄ« nav diska ierÄ«ces.

Mākoņpakalpojuma izveides vēsture, kas papildināta ar kiberpanku

Mēs nolēmām braukt ar apkārtceļu un pieprasÄ«jām to paÅ”u darbÄ«bu no Nova API. Rezultātā ierÄ«ce izveido savienojumu pareizi un ir pieejama serverÄ«. Å Ä·iet, ka problēma rodas, ja bloku krātuve nereaģē uz Cinder.

Strādājot ar diskiem, mūs gaidīja vēl viena grūtība. Sistēmas apjomu nevarēja atvienot no servera.

Atkal pats OpenStack ā€œzvērā€, ka ir iznÄ«cinājis savienojumu, un tagad jÅ«s varat pareizi strādāt ar skaļumu atseviŔķi. Bet API kategoriski nevēlējās veikt darbÄ«bas ar disku.

Mākoņpakalpojuma izveides vēsture, kas papildināta ar kiberpanku

Å eit mēs nolēmām Ä«paÅ”i necÄ«nÄ«ties, bet gan mainÄ«t savu skatÄ«jumu uz dienesta loÄ£iku. Ja ir gadÄ«jums, ir jābÅ«t arÄ« sistēmas apjomam. Tāpēc lietotājs vēl nevar noņemt vai atspējot sistēmas ā€œdiskuā€, neizdzÄ“Å”ot ā€œserveriā€.

OpenStack ir diezgan sarežģīts sistēmu kopums ar savu mijiedarbības loģiku un greznu API. Mums palīdz diezgan detalizēta dokumentācija un, protams, izmēģinājumi un kļūdas (kur gan mēs bez tās būtu).

Testa brauciens

Mēs veicām izmēģinājuma palaiÅ”anu pagājuŔā gada decembrÄ«. Galvenais uzdevums bija pārbaudÄ«t mÅ«su projektu kaujas režīmā no tehniskās puses un no UX puses. Auditorija tika uzaicināta selektÄ«vi, un testÄ“Å”ana tika slēgta. Tomēr esam atstājuÅ”i arÄ« iespēju pieprasÄ«t piekļuvi testÄ“Å”anai mÅ«su vietnē.

Pats pārbaudÄ«jums, protams, neizpalika bez jautriem brīžiem, jo ā€‹ā€‹Å”eit mÅ«su piedzÄ«vojumi tikai sākas.

Pirmkārt, mēs nedaudz nepareizi novērtējām interesi par projektu un nācās ātri pievienot skaitļoÅ”anas mezglus tieÅ”i testa laikā. IzplatÄ«ts gadÄ«jums klasterim, taču arÄ« Å”eit bija dažas nianses. Konkrētas TF versijas dokumentācijā ir norādÄ«ta konkrētā kodola versija, kurā tika pārbaudÄ«ts darbs ar vRouter. Mēs nolēmām palaist mezglus ar jaunākiem kodoliem. Rezultātā TF nesaņēma marÅ”rutus no mezgliem. Man bija steidzami jāatvelk kodoli.

Mākoņpakalpojuma izveides vēsture, kas papildināta ar kiberpanku

Vēl viens interesants ir saistÄ«ts ar pogas ā€œMainÄ«t paroliā€ funkcionalitāti jÅ«su personÄ«gajā kontā.

Mēs nolēmām izmantot JWT, lai organizētu piekļuvi mÅ«su personÄ«gajam kontam, lai nedarbotos ar sesijām. Tā kā sistēmas ir daudzveidÄ«gas un plaÅ”i izkaisÄ«tas, mēs pārvaldām paÅ”i savu pilnvaru, kurā ā€œaptveramā€ sesijas no norēķiniem un marÄ·ieri no OpenStack. Kad parole tiek mainÄ«ta, marÄ·ieris, protams, ā€œsabojājasā€, jo lietotāja dati vairs nav derÄ«gi un tie ir atkārtoti jāizsniedz.

Mākoņpakalpojuma izveides vēsture, kas papildināta ar kiberpanku

Mēs pazaudējām Å”o punktu, un vienkārÅ”i nebija pietiekami daudz resursu, lai ātri pabeigtu Å”o darbu. Mums bija jāizslēdz funkcionalitāte tieÅ”i pirms testa palaiÅ”anas.
PaÅ”laik mēs atsakāmies no lietotāja, ja parole ir mainÄ«ta.

Neskatoties uz Ŕīm niansēm, testÄ“Å”ana noritēja labi. Pāris nedēļu laikā piestāja ap 300 cilvēku. Mēs varējām aplÅ«kot produktu ar lietotāju acÄ«m, pārbaudÄ«t to darbÄ«bā un apkopot augstas kvalitātes atsauksmes.

Lai varētu turpināt

Daudziem no mums Å”is ir pirmais Ŕāda mēroga projekts. Mēs guvām vairākas vērtÄ«gas atziņas par to, kā strādāt komandā un pieņemt arhitektÅ«ras un dizaina lēmumus. Kā integrēt sarežģītas sistēmas ar maziem resursiem un iekļaut tās ražoÅ”anā.

Protams, ir pie kā strādāt gan koda ziņā, gan sistēmas integrācijas saskarnēs. Projekts ir diezgan jauns, taču esam pilni ar ambīcijām to izaugt par uzticamu un ērtu servisu.

Mēs jau esam spējuÅ”i pārliecināt sistēmas. Bils savā skapÄ« apzinÄ«gi apstrādā skaitÄ«Å”anu, rēķinu izrakstÄ«Å”anu un lietotāju pieprasÄ«jumus. Volframa lauku "maÄ£ija" nodroÅ”ina mums stabilu komunikāciju. Un tikai OpenStack dažreiz kļūst kaprÄ«zs, kliedzot kaut ko lÄ«dzÄ«gu: ā€œWSREP vēl nav sagatavojis mezglu lietojumprogrammu lietoÅ”anaiā€. Bet tas ir pavisam cits stāsts...

Mēs nesen uzsākām pakalpojumu.
Visu informāciju varat uzzināt mÅ«su vietnē TieÅ”saistē.

Mākoņpakalpojuma izveides vēsture, kas papildināta ar kiberpanku
CLO izstrādes komanda

Noderīgas saites

OpenStack

Volframa audums

Avots: www.habr.com

Pievieno komentāru