KÄ beigt uztraukties un sÄkt dzÄ«vot bez monolÄ«ta
Mums visiem patÄ«k stÄsti. Mums patÄ«k sÄdÄt pie ugunskura un runÄt par savÄm pagÄtnes uzvarÄm, cÄ«ÅÄm vai vienkÄrÅ”i savu darba pieredzi.
Å odien ir tieÅ”i tÄda diena. Un pat ja jÅ«s Å”obrÄ«d neesat pie ugunskura, mums ir jums stÄsts. StÄsts par to, kÄ mÄs sÄkÄm strÄdÄt ar krÄtuvi pakalpojumÄ Tarantool.
KÄdreiz mÅ«su uzÅÄmumÄ bija pÄris āmonolÄ«tiā un visiem vieni āgriestiā, kuriem Å”ie monolÄ«ti lÄnÄm, bet noteikti tuvojÄs, ierobežojot mÅ«su uzÅÄmuma lidojumu, mÅ«su attÄ«stÄ«bu. Un bija skaidra sapratne: kÄdu dienu mÄs smagi sitÄ«sim Å”os griestus.
Tagad dominÄ ideoloÄ£ija, kas nodala visu un visus, sÄkot no aprÄ«kojuma lÄ«dz biznesa loÄ£ikai. TÄ rezultÄtÄ mums, piemÄram, ir divi DC, kas tÄ«kla lÄ«menÄ« ir praktiski neatkarÄ«gi. Un tad viss bija pavisam savÄdÄk.
MÅ«sdienÄs ir daudz rÄ«ku un rÄ«ku izmaiÅu veikÅ”anai CI/CD, K8S utt. āMonolÄ«tajÄā laikÄ mums nevajadzÄja tik daudz sveÅ”vÄrdu. Pietika vienkÄrÅ”i izlabot āuzglabÄÅ”anuā datu bÄzÄ.
TaÄu laiks gÄja uz priekÅ”u, un lÄ«dz ar to palielinÄjÄs arÄ« pieprasÄ«jumu skaits, dažkÄrt pÄrsniedzot mÅ«su iespÄjas. LÄ«dz ar NVS valstu ienÄkÅ”anu tirgÅ«, pirmÄ monolÄ«ta datu bÄzes procesora slodze nenoslÄ«dÄja zem 90%, un RPS palika 2400 lÄ«menÄ«. Un tie nebija tikai nelieli selektori, bet gan dūŔīgi vaicÄjumi ar virkne pÄrbaužu un JOIN, kas varÄtu darboties gandrÄ«z pusei datu uz liela IO fona.
Kad uz skatuves sÄka parÄdÄ«ties pilnvÄrtÄ«gi MelnÄs piektdienas izpÄrdoÅ”anas ā un Wildberry bija viena no pirmajÄm, kas tÄs rÄ«koja KrievijÄ ā, situÄcija kļuva pavisam bÄdÄ«ga. Galu galÄ slodze Å”ÄdÄs dienÄs palielinÄs trÄ«s reizes.
Ak, Å”ie "monolÄ«tie laiki"! Esmu pÄrliecinÄts, ka esat piedzÄ«vojis ko lÄ«dzÄ«gu, un joprojÄm nevarat saprast, kÄ tas var notikt ar jums.
Ko jÅ«s varat darÄ«t - modei ir raksturÄ«ga tehnoloÄ£ija. ApmÄram pirms 5 gadiem mums nÄcÄs pÄrdomÄt vienu no Å”iem modiem, izveidojot .NET un MS SQL serverÄ« esoÅ”u vietni, kurÄ rÅ«pÄ«gi tika saglabÄta visa vietnes loÄ£ika. TurÄju to tik rÅ«pÄ«gi, ka tÄda monolÄ«ta zÄÄ£ÄÅ”ana izrÄdÄ«jÄs ilgs un nebÅ«t ne viegls prieks.
Neliela atkÄpe.
DažÄdos pasÄkumos saku: "ja nezÄÄ£Äji monolÄ«tu, tad neaugi!" Mani interesÄ jÅ«su viedoklis par Å”o jautÄjumu, lÅ«dzu, rakstiet to komentÄros.
PÄrkona skaÅa
AtgriezÄ«simies pie sava "ugunskura". Lai sadalÄ«tu āmonolÄ«tÄsā funkcionalitÄtes slodzi, mÄs nolÄmÄm sistÄmu sadalÄ«t mikropakalpojumos, kuru pamatÄ ir atvÄrtÄ pirmkoda tehnoloÄ£ijas. Jo tos ir vismaz lÄtÄk mÄrogot. Un mums bija 100% izpratne, ka mums bÅ«s jÄmÄro (un daudz). Galu galÄ jau tajÄ laikÄ bija iespÄja iekļūt kaimiÅvalstu tirgos, un reÄ£istrÄciju skaits, kÄ arÄ« pasÅ«tÄ«jumu skaits sÄka augt vÄl spÄcÄ«gÄk.
IzanalizÄjot pirmos kandidÄtus pÄrejai no monolÄ«ta uz mikropakalpojumiem, sapratÄm, ka 80% tajos rakstÄ«tÄ nÄk no back office sistÄmÄm, bet lasÄ«Å”ana ā no front office. PirmkÄrt, tas attiecÄs uz pÄris mums svarÄ«gÄm apakÅ”sistÄmÄm - lietotÄju datiem un preÄu galÄ«go izmaksu aprÄÄ·inÄÅ”anas sistÄmu, pamatojoties uz informÄciju par papildu klientu atlaidÄm un kuponiem.
AtkÄpe. Tagad ir bail iedomÄties, bet bez iepriekÅ”minÄtajÄm apakÅ”sistÄmÄm no mÅ«su monolÄ«ta tika izÅemti arÄ« preÄu katalogi, lietotÄju iepirkumu grozs, preÄu meklÄÅ”anas sistÄma, preÄu katalogu filtrÄÅ”anas sistÄma un dažÄdas ieteikumu sistÄmas. Katras no tÄm darbÄ«bai ir atseviŔķas Å”auri pielÄgotu sistÄmu klases, taÄu kÄdreiz tÄs visas dzÄ«voja vienÄ āmÄjÄā.
Uzreiz plÄnojÄm pÄrsÅ«tÄ«t datus par saviem klientiem uz Ŕķelto sistÄmu. PreÄu gala izmaksu aprÄÄ·inÄÅ”anas funkcionalitÄtes noÅemÅ”anai bija nepiecieÅ”ama laba mÄrogojamÄ«ba lasÄ«Å”anai, jo tÄ radÄ«ja vislielÄko RPS slodzi un bija visgrÅ«tÄk Ä«stenojama datu bÄzei (aprÄÄ·inu procesÄ tiek iesaistÄ«ts daudz datu).
RezultÄtÄ mÄs nonÄcÄm pie shÄmas, kas labi sader ar Tarantool.
Tolaik mikropakalpojumu darbÄ«bai tika izvÄlÄtas shÄmas darbam ar vairÄkiem datu centriem uz virtuÄlajÄm un aparatÅ«ras maŔīnÄm. KÄ parÄdÄ«ts attÄlos, Tarantool replikÄcijas opcijas tika izmantotas gan galvenÄ-galvenÄ, gan galvenÄ-pakalpojuma režīmos.
ArhitektÅ«ra. 1. iespÄja. LietotÄja pakalpojums
PaÅ”laik ir 24 shards, no kuriem katrÄ ir 2 eksemplÄri (pa vienam katram DC), un tas viss ir galvenais ā galvenais režīms.
Datu bÄzes augÅ”pusÄ ir lietojumprogrammas, kas piekļūst datu bÄzes replikÄm. Lietojumprogrammas darbojas ar Tarantool, izmantojot mÅ«su pielÄgoto bibliotÄku, kas ievieÅ” Tarantool Go draivera saskarni. ViÅa redz visas kopijas un var strÄdÄt kopÄ ar meistaru, lai lasÄ«tu un rakstÄ«tu. BÅ«tÄ«bÄ tas ievieÅ” repliku kopas modeli, kas pievieno loÄ£iku kopiju atlasei, atkÄrtojumu veikÅ”anai, Ä·Ädes pÄrtraucÄju un Ätruma ierobežojumu.
Å ajÄ gadÄ«jumÄ ir iespÄjams konfigurÄt replikas atlases politiku fragmentu kontekstÄ. PiemÄram, roundrobin.
Pirms dažiem mÄneÅ”iem lielÄkÄ daļa pieprasÄ«jumu par preÄu galÄ«go paÅ”izmaksu nonÄca pie jauna servisa, kas principÄ strÄdÄ bez datu bÄzÄm, bet pirms kÄda laika visu 100% apstrÄdÄja serviss ar Tarantool zem motora pÄrsega.
Pakalpojumu datu bÄze sastÄv no 4 masteriem, kuros sinhronizators apkopo datus, un katrs no Å”iem replikÄcijas pamatelementiem izplata datus tikai lasÄmÄm replikÄm. Katram meistaram ir aptuveni 15 Å”Ädas kopijas.
PirmajÄ vai otrajÄ shÄmÄ, ja viena lÄ«dzstrÄva nav pieejama, lietojumprogramma var saÅemt datus otrajÄ.
Ir vÄrts atzÄ«mÄt, ka replikÄcija programmÄ Tarantool ir diezgan elastÄ«ga un to var konfigurÄt izpildes laikÄ. CitÄs sistÄmÄs radÄs grÅ«tÄ«bas. PiemÄram, mainot parametrus max_wal_senders un max_replication_slots programmÄ PostgreSQL, ir jÄrestartÄ vednis, kas dažos gadÄ«jumos var izraisÄ«t savienojumu pÄrtraukÅ”anu starp lietojumprogrammu un DBVS.
MeklÄ un atradÄ«si!
KÄpÄc mÄs to nedarÄ«jÄm "kÄ normÄli cilvÄki", bet izvÄlÄjÄmies netipisku veidu? Tas ir atkarÄ«gs no tÄ, kas tiek uzskatÄ«ts par normÄlu. Daudzi cilvÄki parasti veido kopu no Mongo un izplata to trÄ«s Ä£eogrÄfiski sadalÄ«tos DC.
TobrÄ«d mums jau bija divi Redis projekti. PirmÄ bija keÅ”atmiÅa, bet otrÄ - pastÄvÄ«ga ne pÄrÄk kritisku datu krÄtuve. Ar viÅu bija diezgan grÅ«ti, daļÄji mÅ«su vainas dÄļ. ReizÄm galvenais bija diezgan lieli sÄjumi, un laiku pa laikam vietÄ kļuva slikti. MÄs izmantojÄm Å”o sistÄmu master-slave versijÄ. Un bija daudz gadÄ«jumu, kad kaut kas notika ar meistaru un replikÄcija sabojÄjÄs.
Tas ir, Redis ir labs bezvalstnieku uzdevumiem, nevis statusa uzdevumiem. PrincipÄ tas ļÄva atrisinÄt lielÄko daļu problÄmu, bet tikai tad, ja tie bija atslÄgas vÄrtÄ«bas risinÄjumi ar indeksu pÄri. Bet Redis toreiz bija diezgan bÄdÄ«gs ar neatlaidÄ«bu un atkÄrtoÅ”anos. TurklÄt bija sÅ«dzÄ«bas par veiktspÄju.
MÄs domÄjÄm par MySQL un PostgreSQL. Bet pirmais mums kaut kÄ nesanÄca, un otrais pats par sevi ir diezgan sarežģīts produkts, un nebÅ«tu pareizi uz tÄ veidot vienkÄrÅ”us pakalpojumus.
MÄs izmÄÄ£inÄjÄm RIAK, Cassandra, pat grafiku datu bÄzi. Tie visi ir diezgan niÅ”as risinÄjumi, kas nebija piemÄroti vispÄrÄja universÄla pakalpojumu radÄ«Å”anas instrumenta lomai.
Galu galÄ mÄs apmetÄmies uz Tarantool.
MÄs tam pievÄrsÄmies, kad tas bija 1.6 versijÄ. MÅ«s ieinteresÄja atslÄgas vÄrtÄ«bas simbioze un relÄciju datu bÄzes funkcionalitÄte. Ir sekundÄrie indeksi, transakcijas un atstarpes, tÄs ir kÄ tabulas, bet nav vienkÄrÅ”as, tajÄs var uzglabÄt dažÄdu kolonnu skaitu. Bet Tarantool galvenÄ iezÄ«me bija sekundÄrie indeksi, kas apvienoti ar atslÄgas vÄrtÄ«bu un darÄ«jumu spÄju.
Savu lomu spÄlÄja arÄ« atsaucÄ«gÄ krievvalodÄ«go kopiena, kas bija gatava palÄ«dzÄt tÄrzÄÅ”anÄ. MÄs to aktÄ«vi izmantojÄm un dzÄ«vojam tieÅ”i tÄrzÄÅ”anÄ. Un neaizmirstiet par pienÄcÄ«gu neatlaidÄ«bu bez acÄ«mredzamÄm kļūdÄm un kļūdÄm. Ja paskatÄs uz mÅ«su vÄsturi ar Tarantool, mums bija daudz sÄpju un neveiksmju ar replikÄciju, taÄu mÄs nekad nezaudÄjÄm datus tÄs vainas dÄļ!
ÄŖstenoÅ”anas sÄkums bija aptuvens
TajÄ laikÄ mÅ«su galvenais izstrÄdes steks bija .NET, kuram nebija Tarantool savienotÄja. Uzreiz sÄkÄm kaut ko darÄ«t Go. Tas labi strÄdÄja arÄ« ar Lua. GalvenÄ problÄma tajÄ laikÄ bija ar atkļūdoÅ”anu: .NET ar Å”o viss ir lieliski, bet pÄc tam bija grÅ«ti ienirt iegultÄs Lua pasaulÄ, kad jums nav nekÄdas atkļūdoÅ”anas, izÅemot žurnÄlus. TurklÄt replikÄcija nez kÄpÄc periodiski izjuka, tÄpÄc nÄcÄs iedziļinÄties Tarantool dzinÄja struktÅ«rÄ. TÄrzÄÅ”ana palÄ«dzÄja ar to un mazÄkÄ mÄrÄ arÄ« dokumentÄciju; dažreiz mÄs apskatÄ«jÄm kodu. Toreiz dokumentÄcija bija tik un tÄ.
TÄpÄc vairÄku mÄneÅ”u laikÄ man izdevÄs sakÄrtot galvu un iegÅ«t pienÄcÄ«gus rezultÄtus, strÄdÄjot ar Tarantool. MÄs apkopojÄm atsauces izstrÄdes git, kas palÄ«dzÄja izveidot jaunus mikropakalpojumus. PiemÄram, kad radÄs uzdevums: izveidot citu mikropakalpojumu, izstrÄdÄtÄjs repozitorijÄ apskatÄ«ja atsauces risinÄjuma pirmkodu, un jauna izveide aizÅÄma ne vairÄk kÄ nedÄļu.
Tie bija Ä«paÅ”i laiki. Parasti jÅ«s varÄtu pieiet pie administratora pie blakus galda un pajautÄt: "Dodiet man virtuÄlo maŔīnu." PÄc apmÄram trÄ«sdesmit minÅ«tÄm automaŔīna jau bija pie jums. JÅ«s pats izveidojÄt savienojumu, visu instalÄjÄt, un satiksme tika nosÅ«tÄ«ta jums.
Å odien tas vairs nedarbosies: pakalpojumam jÄpievieno uzraudzÄ«ba un reÄ£istrÄÅ”ana, funkcionalitÄte jÄpÄrklÄj ar testiem, jÄpasÅ«ta virtuÄlÄ maŔīna vai piegÄde uz Kuber utt. KopumÄ tÄ bÅ«s labÄk, lai gan tas prasÄ«s ilgÄku laiku un bÅ«s apgrÅ«tinoÅ”Äk.
Skaldi un valdi. KÄds darÄ«jums ar Lua?
Bija nopietna dilemma: dažas komandas nespÄja droÅ”i ieviest izmaiÅas pakalpojumÄ ar daudz loÄ£ikas Lua. To bieži pavadÄ«ja pakalpojums, kas nedarbojÄs.
Tas ir, izstrÄdÄtÄji gatavo kaut kÄdas izmaiÅas. Tarantool sÄk veikt migrÄciju, bet kopija joprojÄm ir ar veco kodu; KÄds DDL vai kas cits tur nonÄk caur replikÄciju, un kods vienkÄrÅ”i izjÅ«k, jo netiek Åemts vÄrÄ. RezultÄtÄ administratoru atjauninÄÅ”anas procedÅ«ra tika izklÄstÄ«ta uz A4 lapas: pÄrtrauciet replikÄciju, atjauniniet Å”o, ieslÄdziet replikÄciju, izslÄdziet Å”eit, atjauniniet tur. Murgs!
RezultÄtÄ tagad LuÄ visbiežÄk cenÅ”amies neko nedarÄ«t. VienkÄrÅ”i izmantojiet iproto (binÄro protokolu mijiedarbÄ«bai ar serveri), un tas arÄ« viss. VarbÅ«t tas ir izstrÄdÄtÄju zinÄÅ”anu trÅ«kums, taÄu no Ŕī viedokļa sistÄma ir sarežģīta.
MÄs ne vienmÄr akli sekojam Å”im scenÄrijam. Å odien mums nav melnÄ un baltÄ: vai nu viss ir Lua, vai viss ir Go. MÄs jau saprotam, kÄ mÄs varam tos apvienot, lai vÄlÄk nesaskartos ar migrÄcijas problÄmÄm.
Kur tagad atrodas Tarantool?
PakalpojumÄ Tarantool tiek izmantots, lai aprÄÄ·inÄtu preÄu galÄ«gÄs izmaksas, Åemot vÄrÄ atlaižu kuponus, kas pazÄ«stami arÄ« kÄ āReklÄmdevÄjsā. KÄ jau teicu iepriekÅ”, viÅÅ” tagad dodas pensijÄ: viÅu aizstÄj jauns katalogu pakalpojums ar iepriekÅ” aprÄÄ·inÄtÄm cenÄm, bet pirms pusgada visi aprÄÄ·ini tika veikti Promotizer. IepriekÅ” puse no tÄs loÄ£ikas tika rakstÄ«ta Lua valodÄ. Pirms diviem gadiem serviss tika pÄrvÄrsts par krÄtuvi, un Go tika pÄrrakstÄ«ta loÄ£ika, jo bija nedaudz mainÄ«jusies atlaižu mehÄnika un pakalpojumam pietrÅ«ka veiktspÄjas.
Viens no svarÄ«gÄkajiem pakalpojumiem ir lietotÄja profils. Tas nozÄ«mÄ, ka visi Wildberry lietotÄji tiek glabÄti pakalpojumÄ Tarantool, un to ir aptuveni 50 miljoni. SistÄma, kas sadalÄ«ta ar lietotÄja ID, kas sadalÄ«ta pa vairÄkiem DC, kas savienoti ar Go pakalpojumiem.
PÄc RPS datiem, Promoter savulaik bija lÄ«deris, sasniedzot 6 tÅ«kstoÅ”us pieprasÄ«jumu. VienÄ brÄ«dÄ« mums bija 50-60 eksemplÄru. Tagad RPS lÄ«deris ir lietotÄju profili, aptuveni 12 tÅ«kstoÅ”i. Å is pakalpojums izmanto pielÄgotu sadalÄ«Å”anu, dalÄ«tu ar lietotÄju ID diapazoniem. Serviss apkalpo vairÄk nekÄ 20 maŔīnas, bet tas ir par daudz, plÄnojam samazinÄt pieŔķirtos resursus, jo tam pietiek ar 4-5 aparÄtu jaudu.
Sesijas pakalpojums ir mÅ«su pirmais pakalpojums vshard un kasetnei. Vshard iestatÄ«Å”ana un Kasetnes atjauninÄÅ”ana prasÄ«ja no mums zinÄmas pÅ«les, taÄu galu galÄ viss izdevÄs.
Pakalpojums dažÄdu baneru attÄloÅ”anai vietnÄ un mobilajÄ aplikÄcijÄ bija viens no pirmajiem, kas tika izlaists tieÅ”i Tarantool. Å is pakalpojums ir ievÄrojams ar to, ka tam ir 6-7 gadi, tas joprojÄm darbojas un nekad nav pÄrstartÄts. Tika izmantota galvenÄ un galvenÄ replikÄcija. Nekad nekas nav salÅ«zis.
Ir piemÄrs Tarantool izmantoÅ”anai Ätrai uzziÅas funkcionalitÄtei noliktavas sistÄmÄ, lai dažos gadÄ«jumos Ätri vÄlreiz pÄrbaudÄ«tu informÄciju. MÄs mÄÄ£inÄjÄm Å”im nolÅ«kam izmantot Redis, taÄu dati atmiÅÄ aizÅÄma vairÄk vietas nekÄ Tarantool.
Ar Tarantool darbojas arÄ« gaidÄ«Å”anas saraksta pakalpojumi, klientu abonementi, Å”obrÄ«d modÄ«gi stÄsti un atliktÄs preces. PÄdÄjais pakalpojums atmiÅÄ aizÅem apmÄram 120 GB. Å is ir visplaÅ”Äkais pakalpojums no iepriekÅ”minÄtajiem.
SecinÄjums
Pateicoties sekundÄrajiem indeksiem, kas apvienoti ar atslÄgas vÄrtÄ«bu un transakciju, Tarantool ir labi piemÄrots uz mikropakalpojumiem balstÄ«tÄm arhitektÅ«rÄm. TomÄr mÄs saskÄrÄmies ar grÅ«tÄ«bÄm, ievieÅ”ot izmaiÅas pakalpojumos ar lielu loÄ£iku pakalpojumÄ Lua ā pakalpojumi bieži pÄrstÄja darboties. MÄs nevarÄjÄm to pÄrvarÄt, un laika gaitÄ mÄs nonÄcÄm pie dažÄdÄm Lua un Go kombinÄcijÄm: mÄs zinÄm, kur lietot vienu valodu un kur citu valodu.