Ki jan yo sispann enkyete epi kòmanse viv san yon monolit

Ki jan yo sispann enkyete epi kòmanse viv san yon monolit

Nou tout renmen istwa. Nou renmen chita alantou dife a epi pale sou viktwa sot pase nou yo, batay, oswa tou senpleman eksperyans travay nou an.

Jodi a se jis yon jou konsa. E menm si ou pa nan dife kounye a, nou gen yon istwa pou ou. Istwa a nan ki jan nou te kòmanse travay ak depo sou Tarantool.

Yon fwa sou yon tan, konpayi nou an te gen yon koup nan "monolit" ak yon sèl "plafon" pou tout moun, nan ki monolit sa yo te tou dousman men siman apwoche, limite vòl la nan konpayi nou an, devlopman nou an. Epi te gen yon konpreyansyon klè: yon jou nou pral frape plafon sa a difisil.

Li se kounye a ideoloji dominan nan separe tout bagay ak tout moun, soti nan ekipman nan lojik biznis. Kòm yon rezilta, nou, pou egzanp, gen de DCs ki pratikman endepandan nan nivo rezo a. Lè sa a, tout bagay te konplètman diferan.

Jodi a, gen anpil zouti ak zouti pou fè chanjman nan fòm CI/CD, K8S, elatriye. Nan tan "monolitik la", nou pa t 'bezwen anpil mo etranje. Li te ase tou senpleman korije "depo" nan baz done a.

Men, tan te avanse, ak kantite demann te avanse ansanm ak li, pafwa tire RPS pi lwen pase kapasite nou yo. Avèk antre nan peyi CIS yo nan mache a, chaj la sou processeur baz done a nan premye monolit la pa t 'tonbe anba a 90%, ak RPS te rete nan nivo a 2400. Ak sa yo pa t' sèlman ti seleksyon, men demann for ak yon. pakèt chèk ak JOIN ki ta ka kouri prèske pou mwatye nan done yo kont background nan nan gwo IO.

Lè lavant konplè Black Friday yo te kòmanse parèt sou sèn nan - ak Wildberries se te youn nan premye moun ki kenbe yo nan Larisi - sitiyasyon an te vin konplètman tris. Apre yo tout, chaj la nan jou sa yo ogmante twa fwa.
Oh, "tan monolitik" sa yo! Mwen sèten ke ou te fè eksperyans yon bagay ki sanble, epi ou toujou pa ka konprann ki jan sa a ka rive ou.

Ki sa ou ka fè - mòd se nannan nan teknoloji. Apeprè 5 ane de sa, nou te oblije repanse youn nan mod sa yo nan fòm lan nan yon sit ki deja egziste sou .NET ak MS SQL sèvè, ki ak anpil atansyon estoke tout lojik nan sit la li menm. Mwen te kenbe li ak anpil atansyon ke si yon monolith sa yo te tounen yon plezi long epi yo pa ditou fasil.
Yon ti digression.

Nan divès evènman mwen di: "si ou pa t 'wè yon monolit, Lè sa a, ou pa t' grandi!" Mwen enterese nan opinyon ou sou zafè sa a, tanpri ekri li nan kòmantè yo.

Yon son loraj

Ann tounen nan "bonfire" nou an. Pou distribye chaj la nan fonksyonalite "monolitik", nou deside divize sistèm nan an mikwosèvis ki baze sou teknoloji opensource. Paske, nan yon minimòm, yo pi bon mache nan echèl. Epi nou te gen 100% konprann ke nou ta gen echèl (ak anpil). Apre yo tout, deja nan tan sa a li te posib antre nan mache yo nan peyi vwazen yo, ak kantite anrejistreman, osi byen ke kantite lòd, yo te kòmanse grandi menm pi fò.

Lè nou te analize kandida yo premye pou depa soti nan monolit la nan mikwosèvis, nou reyalize ke 80% nan ekri nan yo soti nan sistèm biwo back, ak lekti nan biwo a devan. Premye a tout, sa a konsène yon koup nan subsystems enpòtan pou nou - done itilizatè ak yon sistèm pou kalkile pri final la nan machandiz ki baze sou enfòmasyon sou rabè kliyan adisyonèl ak koupon.

Indented. Koulye a, li pè imajine, men anplis de subsistèm mansyone anwo yo, katalòg pwodwi, yon kabwa itilizatè, yon sistèm rechèch pwodwi, yon sistèm filtraj pou katalòg pwodwi, ak divès kalite sistèm rekòmandasyon yo te retire tou nan monolit nou an. Pou operasyon an nan chak nan yo, gen klas separe nan sistèm etwat pwepare, men yon fwa sou yon tan yo tout te viv nan yon sèl "kay".

Nou te planifye imedyatman transfere done sou kliyan nou yo nan sistèm nan sharded. Retire nan fonksyonalite pou kalkile pri final la nan machandiz yo mande bon évolutivité pou lekti, paske li te kreye pi gwo chaj RPS la e li te pi difisil pou aplike pou baz done a (anpil done ki enplike nan pwosesis kalkil la).

Kòm yon rezilta, nou te vini ak yon konplo ki anfòm byen ak Tarantool.

Nan epòk sa a, pou operasyon mikwosèvis yo, yo te chwazi plan pou travay ak plizyè sant done sou machin vityèl ak pyès ki nan konpitè. Jan yo montre nan figi yo, opsyon replikasyon Tarantool yo te aplike nan tou de mòd mèt-mèt ak mèt-esklav.

Ki jan yo sispann enkyete epi kòmanse viv san yon monolit
Achitekti. Opsyon 1. Sèvis itilizatè

Nan moman sa a, gen 24 shards, yo chak gen 2 ka (yonn pou chak DC), tout nan mòd mèt-mèt.

Sou tèt baz done a gen aplikasyon pou jwenn aksè nan kopi baz done yo. Aplikasyon yo travay ak Tarantool atravè bibliyotèk koutim nou an, ki aplike koòdone chofè Tarantool Go. Li wè tout kopi yo epi li ka travay ak mèt la pou li ak ekri. Esansyèlman, li aplike modèl seri replik la, ki ajoute lojik pou chwazi kopi, fè essais, yon disjoncteurs ak yon limit pousantaj.

Nan ka sa a, li posib pou konfigirasyon politik seleksyon kopi nan yon kontèks shards. Pou egzanp, roundrobin.

Ki jan yo sispann enkyete epi kòmanse viv san yon monolit
Achitekti. Opsyon 2. Sèvis pou kalkile pri final la nan machandiz yo

Kèk mwa de sa, pi fò nan demann yo pou kalkile pri final la nan machandiz te ale nan yon nouvo sèvis, ki, nan prensip, travay san baz done, men kèk tan de sa tout bagay te trete 100% pa yon sèvis ak Tarantool anba kapo a.

Baz done sèvis la konsiste de 4 mèt kote senkronize a kolekte done, epi chak nan mèt replikasyon sa yo distribye done nan kopi lekti sèlman. Chak mèt gen apeprè 15 kopi sa yo.

Swa nan premye a oswa nan dezyèm konplo a, si yon sèl DC pa disponib, aplikasyon an ka resevwa done nan dezyèm lan.

Li se vo anyen ke replikasyon nan Tarantool se byen fleksib epi yo ka konfigirasyon nan ègzekutabl. Nan lòt sistèm, difikilte te parèt. Pou egzanp, chanje paramèt max_wal_senters ak max_replication_slots nan PostgreSQL mande pou yon rekòmanse sòsye an, ki nan kèk ka ka mennen nan koupe koneksyon ant aplikasyon an ak DBMS la.

Chèche epi w ap jwenn!

Poukisa nou pa t 'fè li "tankou moun nòmal", men te chwazi yon fason atipik? Sa depann de sa ki konsidere kòm nòmal. Anpil moun jeneralman fè yon grap soti nan Mongo epi gaye li atravè twa DCs geo-distribiye.

Lè sa a, nou te deja gen de pwojè Redis. Premye a te yon kachèt, ak dezyèm lan se te yon depo ki pèsistan pou done pa twò kritik. Li te byen difisil avè l ', an pati nan fòt nou an. Pafwa volim byen gwo te nan kle a, e de tan zan tan sit la te vin malad. Nou itilize sistèm sa a nan vèsyon mèt-esklav la. Epi te gen anpil ka kote yon bagay te rive mèt la epi replikasyon te kraze.

Sa vle di, Redis bon pou travay apatrid, pa travay leta. Nan prensip, li te pèmèt rezoud pifò pwoblèm, men sèlman si yo te solisyon kle-valè ak yon pè nan endèks. Men, Redis nan tan sa a te byen tris ak pèsistans ak replikasyon. Anplis de sa, te gen plent sou pèfòmans.

Nou te panse sou MySQL ak PostgreSQL. Men, premye a yon jan kanmenm pa t 'trape sou nou, ak yon sèl nan dezyèm se yon pwodwi olye sofistike nan tèt li, epi li ta apwopriye yo bati sèvis senp sou li.
Nou te eseye RIAK, Cassandra, menm yon baz done graf. Sa yo se tout solisyon jistis nich ki pa t 'konvenab pou wòl nan yon zouti jeneral inivèsèl pou kreye sèvis yo.

Finalman nou rete sou Tarantool.

Nou tounen vin jwenn li lè li te nan vèsyon 1.6. Nou te enterese nan li pa senbyotik la nan kle-valè ak fonksyonalite a nan yon baz done relasyon. Gen endis segondè, tranzaksyon ak espas, sa yo se tankou tab, men se pa senp, ou ka magazen diferan kantite kolòn nan yo. Men, karakteristik nan asasen nan Tarantool se te endèks segondè konbine avèk kle-valè ak tranzaksyon.

Kominote ki pale Ris ki reponn, ki pare pou ede nan chat, te jwe yon wòl tou. Nou aktivman itilize sa a epi ap viv dirèkteman nan chat la. Epi pa bliye sou desan ki pèsistan san erè evidan ak erè. Si ou gade nan istwa nou ak Tarantool, nou te gen anpil doulè ak echèk ak replikasyon, men nou pa janm pèdi done akòz fòt li!

Aplikasyon an te kòmanse difisil

Nan tan sa a, pile devlopman prensipal nou an te .NET, ki pa te gen okenn konektè pou Tarantool. Nou imedyatman te kòmanse fè yon bagay nan Go. Li te travay byen ak Lua tou. Pwoblèm prensipal la nan tan sa a te ak debogaj: nan .NET tout bagay se gwo ak sa a, men apre sa li te difisil plonje nan mond lan nan Lua entegre, lè ou pa gen okenn debogaj eksepte mòso bwa. Anplis de sa, pou kèk rezon replikasyon detanzantan tonbe apa, kidonk mwen te oblije fouye nan estrikti a nan motè Tarantool la. Chat la te ede ak sa a, ak nan yon pi piti, dokiman an; pafwa nou gade kòd la. Nan tan sa a, dokiman an te konsa-konsa.

Se konsa, sou kou a nan plizyè mwa, mwen jere jwenn tèt mwen alantou ak jwenn rezilta desan nan travay ak Tarantool. Nou konpile devlopman referans nan git ki te ede ak fòmasyon nan nouvo mikwosèvis. Pa egzanp, lè yon travay te parèt: pou kreye yon lòt mikwosèvis, pwomotè a te gade kòd sous solisyon referans nan depo a, epi li te pran pa plis pase yon semèn pou kreye yon nouvo.

Sa yo te tan espesyal. Konvansyonèl, Lè sa a, ou ta ka ale nan admin nan pwochen tab la epi mande: "Ban m 'yon machin vityèl." Apeprè trant minit pita machin nan te deja avèk ou. Ou konekte tèt ou, enstale tout bagay, epi trafik yo te voye ba ou.

Jodi a sa p ap travay ankò: ou bezwen ajoute siveyans ak antre nan sèvis la, kouvri fonksyonalite a ak tès, kòmande yon machin vityèl oswa livrezon nan Kuber, elatriye. An jeneral, li pral pi bon fason sa a, byenke li pral pran plis tan epi li pral plis anbarasman.

Divize epi dirije. Ki sa ki nan kontra a ak Lua?

Te gen yon dilèm grav: kèk ekip yo pa t 'kapab dewoule seryezman chanjman nan yon sèvis ki gen anpil lojik nan Lua. Sa a te souvan akonpaye pa sèvis la pa travay.

Sa vle di, devlopè yo ap prepare kèk kalite chanjman. Tarantool kòmanse fè migrasyon an, men kopi a toujou ak ansyen kòd la; Gen kèk DDL oswa yon lòt bagay ki rive la atravè replikasyon, ak kòd la tou senpleman tonbe apa paske li pa pran an kont. Kòm yon rezilta, pwosedi aktyalizasyon pou administratè yo te mete deyò sou fèy A4: sispann replikasyon, mete ajou sa a, vire sou replikasyon, fèmen isit la, mete ajou la. Kochma!

Kòm yon rezilta, kounye a nou pi souvan eseye pa fè anyen nan Lua. Jis itilize iproto (yon pwotokòl binè pou kominike avèk sèvè a), e se li. Petèt sa a se yon mank de konesans nan mitan devlopè yo, men nan pwen sa a de vi sistèm nan se konplèks.

Nou pa toujou swiv script sa a avèg. Jodi a nou pa gen nwa ak blan: swa tout bagay se nan Lua, oswa tout bagay se nan Go. Nou deja konprann ki jan nou ka konbine yo pou nou pa fini ak pwoblèm migrasyon pita.

Ki kote Tarantool ye kounye a?
Tarantool yo itilize nan sèvis la pou kalkile pri final la nan machandiz pran an kont koupon rabè, ke yo rele tou "Promotè". Kòm mwen te di pi bonè, li se kounye a pran retrèt: li se ranplase pa yon nouvo sèvis katalòg ak pri pre-kalkile, men sis mwa de sa tout kalkil yo te fè nan Promotizer. Précédemment, mwatye nan lojik li yo te ekri nan Lua. De zan de sa, sèvis la te tounen yon etablisman depo, ak lojik la te reekri nan Go, paske mekanik yo nan rabè te chanje yon ti kras ak sèvis la te manke pèfòmans.

Youn nan sèvis ki pi enpòtan yo se pwofil itilizatè a. Sa vle di, tout itilizatè Wildberries yo estoke nan Tarantool, e gen apeprè 50 milyon ladan yo.Yon sistèm ki divize pa ID itilizatè, distribye atravè plizyè DC ki konekte ak sèvis Go.
Dapre RPS, Pwomotè te yon fwa lidè a, rive nan 6 mil demann. Nan yon pwen nou te gen 50-60 kopi. Koulye a, lidè nan RPS se pwofil itilizatè, apeprè mil 12. Sèvis sa a sèvi ak koutim sharding, divize pa seri de ID itilizatè. Sèvis la sèvi plis pase 20 machin, men sa a twòp; nou planifye pou diminye resous yo atribye ba yo, paske kapasite 4-5 machin yo ase pou li.

Sèvis sesyon se premye sèvis nou sou vshard ak Cartridge. Mete kanpe vshard ak mete ajou Cartridge te mande kèk efò nan men nou, men nan fen tout bagay te travay deyò.

Sèvis pou montre bandwòl diferan sou sit entènèt la ak nan aplikasyon mobil lan se te youn nan premye moun ki te pibliye dirèkteman sou Tarantool. Sèvis sa a remakab pou lefèt ke li gen 6-7 ane fin vye granmoun, li toujou nan operasyon epi li pa janm te rdemare. Yo te itilize replikasyon mèt-mèt. Pa gen anyen ki janm kraze.

Gen yon egzanp lè l sèvi avèk Tarantool pou fonksyonalite referans rapid nan yon sistèm depo pou byen vit tcheke enfòmasyon an nan kèk ka. Nou te eseye sèvi ak Redis pou sa, men done yo nan memwa te pran plis espas pase Tarantool.

Sèvis yo nan yon lis datant, abònman kliyan, istwa kounye a alamòd ak machandiz difere tou travay ak Tarantool. Dènye sèvis nan memwa pran apeprè 120 GB. Sa a se sèvis ki pi konplè nan pi wo a.

Konklizyon

Mèsi a endèks segondè konbine avèk valè-kle ak tranzaksyon, Tarantool byen adapte pou achitekti ki baze sou mikwo-sèvis. Sepandan, nou te rankontre difikilte lè nou te fè chanjman nan sèvis yo ak anpil lojik nan Lua - sèvis yo souvan sispann travay. Nou pa t 'kapab simonte sa a, ak sou tan nou te rive nan konbinezon diferan nan Lua ak Go: nou konnen ki kote yo sèvi ak yon lang ak ki kote yo sèvi ak yon lòt.

Ki lòt bagay pou li sou sijè a

Sous: www.habr.com

Add nouvo kòmantè