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;
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:
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Ä.
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.
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.
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.
Å Ä« 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.
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.
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Ä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.
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Ä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.
Å 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.
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Ä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Ä.