{"id":92806,"date":"2020-08-31T07:42:03","date_gmt":"2020-08-31T05:42:03","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/kak-perestat-bespokoitsya-i-nachat-zhit-bez-monolita"},"modified":"2020-08-31T07:42:03","modified_gmt":"2020-08-31T05:42:03","slug":"kak-perestat-bespokoitsya-i-nachat-zhit-bez-monolita","status":"publish","type":"post","link":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/kak-perestat-bespokoitsya-i-nachat-zhit-bez-monolita","title":{"rendered":"Jak p\u0159estat m\u00edt starosti a za\u010d\u00edt \u017e\u00edt bez monolitu","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Jak p\u0159estat m\u00edt starosti a za\u010d\u00edt \u017e\u00edt bez monolitu\" src=\"\/wp-content\/uploads\/2020\/08\/eb6ab7fd08eeebd8cdad89b0e4e6588e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nV\u0161ichni m\u00e1me r\u00e1di p\u0159\u00edb\u011bhy. R\u00e1di si sedneme k ohni a vypr\u00e1v\u00edme o sv\u00fdch minul\u00fdch v\u00edt\u011bzstv\u00edch, bitv\u00e1ch nebo prost\u011b o sv\u00fdch pracovn\u00edch zku\u0161enostech.<\/p>\n<p>Dnes je pr\u00e1v\u011b takov\u00fd den. I kdy\u017e nyn\u00ed nejste u ohn\u011b, m\u00e1me pro v\u00e1s p\u0159\u00edb\u011bh. P\u0159\u00edb\u011bh o tom, jak jsme za\u010dali pracovat s \u00falo\u017ei\u0161t\u011bm na Tarantool.<\/p>\n<p>Kdysi d\u00e1vno m\u011bla na\u0161e firma n\u011bkolik \u201emonolit\u016f\u201c a jeden spole\u010dn\u00fd \u201estrop\u201c, kter\u00fd se k t\u011bmto monolit\u016fm pomalu, ale jist\u011b bl\u00ed\u017eil, omezuj\u00edc\u00ed rozvoj na\u0161\u00ed firmy. A bylo jasn\u00e9, \u017ee se jednou pevn\u011b naraz\u00edme na tento strop.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nDnes vl\u00e1dne ideologie rozd\u011blen\u00ed v\u0161eho a v\u0161ude, po\u010d\u00ednaje hardwarem a kon\u010de obchodn\u00ed logikou. V d\u016fsledku toho m\u00e1me nap\u0159\u00edklad dv\u011b DC, prakticky nez\u00e1visl\u00e1 na s\u00ed\u0165ov\u00e9 \u00farovni. Tehdy to v\u0161ak bylo naprosto jinak.<\/p>\n<p>Dnes existuje spousta n\u00e1stroj\u016f a prost\u0159edk\u016f pro prov\u00e1d\u011bn\u00ed zm\u011bn, jako jsou CI\/CD, K8S a podobn\u011b. V \u201emonolitn\u00ed\u201c dob\u011b jsme v\u0161ak nepot\u0159ebovali tolik ciz\u00edch slov. Sta\u010dilo jen opravit \u201e\u00falohu\u201c v datab\u00e1zi.<\/p>\n<p>Ale \u010das plynul vp\u0159ed a po\u010det dotaz\u016f se posouval vp\u0159ed s n\u00edm, ob\u010das p\u0159i\u010dem\u017e RPS p\u0159ekon\u00e1valo na\u0161e mo\u017enosti. P\u0159i vstupu na trh zem\u00ed SNS nezat\u011b\u017eovala z\u00e1t\u011b\u017e na procesoru DB prvn\u00edho monolitu pokles pod 90 %, a RPS z\u016fst\u00e1valy na \u00farovni 2400. A to nebyly jen mal\u00e9 selektivky, ale obrovsk\u00e9 dotazy se spoustou kontrol a JOIN\u016f, kter\u00e9 mohly prostoupit t\u00e9m\u011b\u0159 polovinou dat v prost\u0159ed\u00ed vysok\u00e9ho I\/O.<\/p>\n<p>Kdy\u017e na sc\u00e9n\u011b za\u010daly prob\u00edhat skute\u010dn\u00e9 v\u00fdprodeje b\u011bhem \u201e\u010cern\u00e9ho p\u00e1tku\u201c, - a Wildberries je za\u010dal po\u0159\u00e1dat jako jeden z prvn\u00edch v Rusku, - situace se stala opravdu \u017ealostnou. V\u017edy\u0165 z\u00e1t\u011b\u017e v takov\u00fdch dnech vzrostla t\u0159ikr\u00e1t.<br \/>\nAch, ty \u201emonolitn\u00ed \u010dasy\u201c! Jsem si jist, \u017ee i vy jste se setkali s podobn\u00fdm a st\u00e1le nem\u016f\u017eete pochopit, jak se to mohlo st\u00e1t v\u00e1m.<\/p>\n<p>Co se d\u00e1 d\u011blat \u2014 m\u00f3da se t\u00fdk\u00e1 i technologi\u00ed. Je\u0161t\u011b p\u0159ed p\u011bti lety jsme museli p\u0159epracovat jednu z takov\u00fdch m\u00f3d v podob\u011b existuj\u00edc\u00edho webu na .NET a MS SQL serveru, kter\u00fd pe\u010dliv\u011b uchov\u00e1val ve\u0161kerou logiku fungov\u00e1n\u00ed samotn\u00e9ho webu. Uchov\u00e1val ji tak pe\u010dliv\u011b, \u017ee roz\u0159ez\u00e1n\u00ed takov\u00e9ho monolitu se uk\u00e1zalo jako dlouh\u00e1 a zdaleka nejednoduch\u00e1 z\u00e1bava.<br \/>\nMal\u00e9 odbo\u010den\u00ed. <\/p>\n<p>Na r\u016fzn\u00fdch akc\u00edch \u0159\u00edk\u00e1m: \u201ePokud jste neod\u0159\u00edzli monolit, nevyrostli jste!\u201c Zaj\u00edm\u00e1 m\u011b v\u00e1\u0161 n\u00e1zor na to, napi\u0161te mi pros\u00edm do koment\u00e1\u0159\u016f.<\/p>\n<h3>A hrom zabur\u00e1cel<\/h3>\n<p>\nVr\u00e1t\u00edme se k na\u0161emu \"krbu\". Abychom rozd\u011blili z\u00e1t\u011b\u017e \"monolitn\u00ed\" funk\u010dnosti, rozhodli jsme se rozd\u011blit syst\u00e9m na mikroslu\u017eby zalo\u017een\u00e9 na technolog\u00edch s otev\u0159en\u00fdm zdrojov\u00fdm k\u00f3dem. Proto\u017ee, minim\u00e1ln\u011b, jejich \u0161k\u00e1lov\u00e1n\u00ed je levn\u011bj\u0161\u00ed. A pochopen\u00ed toho, \u017ee se bude muset \u0161k\u00e1lovat (a hodn\u011b), jsme m\u011bli na 100 %. U\u017e v t\u00e9 dob\u011b jsme se dostali na trhy sousedn\u00edch zem\u00ed a po\u010det registrac\u00ed, stejn\u011b jako po\u010det objedn\u00e1vek, za\u010dal r\u016fst je\u0161t\u011b rychleji.<\/p>\n<p>Po anal\u00fdze prvn\u00edch uchaze\u010d\u016f o odchod z monolitu do mikroslu\u017eeb jsme pochopili, \u017ee v 80 % p\u0159\u00edpad\u016f doch\u00e1z\u00ed ke 99 % z\u00e1pis\u016fm z back office syst\u00e9m\u016f, zat\u00edmco \u010dten\u00ed prob\u00edh\u00e1 z front endu. To se p\u0159edev\u0161\u00edm t\u00fdkalo n\u011bkolika d\u016fle\u017eit\u00fdch subsyst\u00e9m\u016f pro n\u00e1s - u\u017eivatelsk\u00fdch dat a syst\u00e9mu v\u00fdpo\u010dtu kone\u010dn\u00e9 ceny zbo\u017e\u00ed na z\u00e1klad\u011b informac\u00ed o dodate\u010dn\u00fdch z\u00e1kaznick\u00fdch slev\u00e1ch a kuponech.<\/p>\n<p>Na pravomoce odstavce. Te\u010f je t\u011b\u017ek\u00e9 si to p\u0159edstavit, ale vedle v\u00fd\u0161e zm\u00edn\u011bn\u00fdch subsyst\u00e9m\u016f byly z na\u0161eho monolitu tak\u00e9 vyjmuty produktov\u00e9 katalogy, u\u017eivatelsk\u00fd ko\u0161\u00edk, syst\u00e9m vyhled\u00e1v\u00e1n\u00ed produkt\u016f, syst\u00e9m filtrov\u00e1n\u00ed produktov\u00fdch katalog\u016f a r\u016fzn\u00e9 doporu\u010dovac\u00ed syst\u00e9my. Pro ka\u017ed\u00e9ho z nich existuj\u00ed samostatn\u00e9 t\u0159\u00eddy \u00fazce specializovan\u00fdch syst\u00e9m\u016f, ale kdysi v\u0161ichni bydleli v jednom \"domku\". <\/p>\n<p>Okam\u017eit\u011b jsme napl\u00e1novali vyjmut\u00ed dat o na\u0161ich z\u00e1kazn\u00edc\u00edch do shardovan\u00e9 syst\u00e9mu. Vyjmut\u00ed funk\u010dnosti v\u00fdpo\u010dtu kone\u010dn\u00e9 ceny zbo\u017e\u00ed vy\u017eadovalo dobrou \u0161k\u00e1lovatelnost v \u010dten\u00ed, proto\u017ee ta vytv\u00e1\u0159ela nejv\u011bt\u0161\u00ed z\u00e1t\u011b\u017e na RPS a byla nejn\u00e1ro\u010dn\u011bj\u0161\u00ed na proveden\u00ed pro datab\u00e1zi (do procesu v\u00fdpo\u010dt\u016f bylo zapojeno velmi mnoho dat). <\/p>\n<p>V d\u016fsledku toho se n\u00e1m narodila sch\u00e9ma, kter\u00e1 se dob\u0159e kombinuje s Tarantool.<\/p>\n<p>V t\u00e9 dob\u011b byly pro fungov\u00e1n\u00ed mikroslu\u017eeb vybr\u00e1ny sch\u00e9mata pr\u00e1ce s n\u011bkolika datov\u00fdmi centry na virtu\u00e1ln\u00edch a fyzick\u00fdch stroj\u00edch. Jak ukazuj\u00ed obr\u00e1zky, byly pou\u017eity varianty replikac\u00ed Tarantool jak v re\u017eimu master-master, tak master-slave. <\/p>\n<p><img decoding=\"async\" alt=\"Jak p\u0159estat m\u00edt starosti a za\u010d\u00edt \u017e\u00edt bez monolitu\" src=\"\/wp-content\/uploads\/2020\/08\/b7bf3d6646ec9f6a8f8af3a539adede1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Architektura. Varianta 1. Slu\u017eba pro u\u017eivatele<\/i><\/p>\n<p>V sou\u010dasn\u00e9 dob\u011b se jedn\u00e1 o 24 shard\u016f, z nich\u017e ka\u017ed\u00fd m\u00e1 2 instance (po jedn\u00e9 na ka\u017ed\u00e9m DC), v\u0161echny v re\u017eimu master-master.<\/p>\n<p>Nad datab\u00e1zemi se nach\u00e1zej\u00ed aplikace, kter\u00e9 komunikuj\u00ed s replikami datab\u00e1ze. Aplikace pracuj\u00ed s Tarantool prost\u0159ednictv\u00edm na\u0161\u00ed vlastn\u00ed knihovny, kter\u00e1 implementuje rozhran\u00ed Go ovlada\u010de Tarantool. Vid\u00ed v\u0161echny repliky a m\u016f\u017ee pracovat s masterem pro \u010dten\u00ed a z\u00e1pis. V podstat\u011b realizuje model replica set, do kter\u00e9ho byla p\u0159id\u00e1na logika v\u00fdb\u011bru replik, prov\u00e1d\u011bn\u00ed opakovan\u00fdch pokus\u016f, circuit breaker a rate limit.<\/p>\n<p>P\u0159itom je mo\u017en\u00e9 konfigurovat politiku v\u00fdb\u011bru repliky v r\u00e1mci shardu. Nap\u0159\u00edklad round-robin.<\/p>\n<p><img decoding=\"async\" alt=\"Jak p\u0159estat m\u00edt starosti a za\u010d\u00edt \u017e\u00edt bez monolitu\" src=\"\/wp-content\/uploads\/2020\/08\/6dc36fa54e3d01bd51f879fccdfd8e0b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Architektura. Varianta 2. Slu\u017eba pro v\u00fdpo\u010det kone\u010dn\u00e9 ceny zbo\u017e\u00ed.<\/i><\/p>\n<p>P\u0159ed n\u011bkolika m\u011bs\u00edci v\u011bt\u0161ina po\u017eadavk\u016f na v\u00fdpo\u010det kone\u010dn\u00e9 ceny zbo\u017e\u00ed p\u0159e\u0161la na novou slu\u017ebu, kter\u00e1 v podstat\u011b funguje bez datab\u00e1z\u00ed, ale n\u011bjakou dobu 100 % zpracov\u00e1vala slu\u017eba s Tarantool pod kapotou.<\/p>\n<p>Datab\u00e1ze slu\u017eby to jsou 4 master servery, do kter\u00fdch synchroniz\u00e1tor shroma\u017e\u010fuje data, a ka\u017ed\u00fd z t\u011bchto master\u016f prost\u0159ednictv\u00edm replikace distribuuje data na readonly repliky. Ka\u017ed\u00fd master m\u00e1 p\u0159ibli\u017en\u011b 15 takov\u00fdch replik.<\/p>\n<p>A\u0165 u\u017e v prvn\u00edm \u010di druh\u00e9m sch\u00e9matu, v p\u0159\u00edpad\u011b nedostupnosti jednoho DC m\u016f\u017ee aplikace z\u00edsk\u00e1vat data z druh\u00e9ho.<\/p>\n<p>Je t\u0159eba poznamenat, \u017ee v Tarantool je replikace pom\u011brn\u011b flexibiln\u00ed a konfigurovateln\u00e1 za b\u011bhu. V jin\u00fdch syst\u00e9mech mohou nast\u00e1vat komplikace. Nap\u0159\u00edklad p\u0159i zm\u011bn\u011b parametr\u016f max_wal_senders a max_replication_slots v PostgreSQL je vy\u017eadov\u00e1n restart masteru, co\u017e v n\u011bkter\u00fdch p\u0159\u00edpadech m\u016f\u017ee v\u00e9st k p\u0159eru\u0161en\u00ed spojen\u00ed mezi aplikac\u00ed a DBMS.<\/p>\n<h3>Hledejte a naleznete!<\/h3>\n<p>\nPro\u010d jsme neud\u011blali \"jako norm\u00e1ln\u00ed lid\u00e9\" a zvolili netypick\u00fd zp\u016fsob? Z\u00e1vis\u00ed na tom, co pova\u017eovat za norm\u00e1ln\u00ed. Mnoz\u00ed v\u016fbec tvo\u0159\u00ed klastr z Mongo a rozprost\u00edraj\u00ed ho po t\u0159ech geograficky distribuovan\u00fdch DC.<\/p>\n<p>Tehdy u\u017e jsme m\u011bli dva projekty na Redis. Prvn\u00ed byl cache a druh\u00fd p\u0159edstavoval persistentn\u00ed \u00falo\u017ei\u0161t\u011b pro m\u00e9n\u011b kritick\u00e1 data. S n\u00edm to bylo docela slo\u017eit\u00e9, \u010d\u00e1ste\u010dn\u011b i na\u0161\u00ed vinou. N\u011bkdy se v kl\u00ed\u010di nach\u00e1zely dost velk\u00e9 objemy a ob\u010das to zp\u016fsobovalo probl\u00e9my na webu. Tento syst\u00e9m jsme pou\u017e\u00edvali v variant\u011b master-slave. A bylo mnoho p\u0159\u00edpad\u016f, kdy se s masterem n\u011bco d\u011blo a replikace se rozbila. <\/p>\n<p>Redis je tedy dobr\u00fd pro stateless \u00fakoly, ne v\u0161ak pro stateful. V z\u00e1sad\u011b to \u0159e\u0161ilo v\u011bt\u0161inu probl\u00e9m\u016f, ale pouze pokud \u0161lo o \u0159e\u0161en\u00ed typu key-value s n\u011bkolika indexy. Nicm\u00e9n\u011b v t\u00e9 dob\u011b m\u011bl Redis probl\u00e9my s perzistenc\u00ed a replikac\u00ed. Krom\u011b toho byly i st\u00ed\u017enosti na v\u00fdkon.<\/p>\n<p>Zva\u017eovali jsme MySQL a PostgreSQL. Prvn\u00ed se u n\u00e1s n\u011bjak neuchytil, zat\u00edmco druh\u00fd je s\u00e1m o sob\u011b pom\u011brn\u011b slo\u017eit\u00fd produkt a bylo by nevhodn\u00e9 na n\u011bm stav\u011bt jednoduch\u00e9 slu\u017eby.<br \/>\nZkou\u0161eli jsme RIAK, Cassandru, dokonce i grafovou datab\u00e1zi. V\u0161echna tato \u0159e\u0161en\u00ed jsou pom\u011brn\u011b specifick\u00e1 a nehodila se jako obecn\u00fd univerz\u00e1ln\u00ed n\u00e1stroj pro vytv\u00e1\u0159en\u00ed slu\u017eeb.<\/p>\n<p>Nakonec jsme se rozhodli pro Tarantool.<\/p>\n<p>Oslovili jsme ho, kdy\u017e byl ve verzi 1.6. Zaujal n\u00e1s v n\u011bm symbi\u00f3za key-value a funk\u010dnost rela\u010dn\u00ed datab\u00e1ze. Existuj\u00ed sekund\u00e1rn\u00ed indexy, transakce a spacety, co\u017e jsou jako tabulky, ale slo\u017eit\u011bj\u0161\u00ed, lze v nich uchov\u00e1vat r\u016fzn\u00e9 po\u010dty sloupc\u016f. Ale killer feature Tarantoolu byly sekund\u00e1rn\u00ed indexy v kombinaci s key-value a transak\u010dn\u00edm zpracov\u00e1n\u00edm.<\/p>\n<p>D\u016fle\u017eitou roli hr\u00e1lo tak\u00e9 reaguj\u00edc\u00ed rusky mluv\u00edc\u00ed spole\u010denstv\u00ed, kter\u00e9 bylo ochotn\u00e9 pomoci v chatu. Aktivn\u011b jsme toho vyu\u017e\u00edvali a prakticky jsme \u017eili v chatu. A nesm\u00edme zapom\u00ednat na slu\u0161nou perzistenci bez zjevn\u00e9ho chyb a nedostatk\u016f. Pokud se pod\u00edv\u00e1me na na\u0161i historii s Tarantool, m\u011bli jsme hodn\u011b bolest\u00ed a probl\u00e9m\u016f s replikac\u00ed, ale ani jednou jsme d\u00edky n\u011bmu neztratili data!<\/p>\n<h3>Zav\u00e1d\u011bn\u00ed za\u010dalo obt\u00ed\u017en\u011b.<\/h3>\n<p>\nV t\u00e9 dob\u011b byl na\u0161\u00edm hlavn\u00edm v\u00fdvojov\u00fdm stackem .NET, pro kter\u00fd neexistoval konektor pro Tarantool. Ihned jsme za\u010dali n\u011bco d\u011blat v Go. S Lua se tak\u00e9 docela da\u0159ilo. Hlavn\u00ed probl\u00e9m v tu chv\u00edli byl s lad\u011bn\u00edm: v .NET bylo v\u0161e skv\u011bl\u00e9, ale pot\u00e9 se pono\u0159it do sv\u011bta embedded Lua, kdy\u017e m\u00e1\u0161 krom\u011b log\u016f \u017e\u00e1dn\u00e9 lad\u011bn\u00ed, bylo slo\u017eit\u00e9. Krom\u011b toho se replikace z n\u011bjak\u00e9ho d\u016fvodu ob\u010das rozpadla, co\u017e n\u00e1s donutilo hloub\u011bji proniknout do struktury engine Tarantoolu. V tom pomohl chat, m\u00e9n\u011b u\u017e dokumentace, n\u011bkdy jsme se d\u00edvali do k\u00f3du. V t\u00e9 dob\u011b byla dokumentace pr\u016fm\u011brn\u00e1.<\/p>\n<p>Tak se b\u011bhem n\u011bkolika m\u011bs\u00edc\u016f poda\u0159ilo nasb\u00edrat zku\u0161enosti a dos\u00e1hnout dobr\u00fdch v\u00fdsledk\u016f p\u0159i pr\u00e1ci s Tarantool. Vytvo\u0159ili jsme v Gitu vzorov\u00e9 v\u00fdvojov\u00e9 pr\u00e1ce, kter\u00e9 pom\u00e1haly p\u0159i vzniku nov\u00fdch mikroslu\u017eeb. Nap\u0159\u00edklad, kdy\u017e vznikl \u00fakol: vytvo\u0159it dal\u0161\u00ed mikroslu\u017ebu, developer se pod\u00edval na zdrojov\u00e9 k\u00f3dy vzorov\u00e9ho \u0159e\u0161en\u00ed v repozit\u00e1\u0159i a vytvo\u0159en\u00ed nov\u00e9ho trvalo maxim\u00e1ln\u011b t\u00fdden. <\/p>\n<p>Byly to zvl\u00e1\u0161tn\u00ed \u010dasy. Tehdy jsi mohl p\u0159istoupit k adminovi u vedlej\u0161\u00edho stolu a po\u017e\u00e1dat: \u201eDej mi virtu\u00e1lku\u201c. Po n\u011bjak\u00fdch t\u0159iceti minut\u00e1ch byla ma\u0161ina u\u017e tvoje. S\u00e1m jsi se p\u0159ipojoval, v\u0161echno instaloval a m\u011bli jsi na to p\u0159iveden\u00fd provoz.<\/p>\n<p>Dnes u\u017e to takto nefunguje: je t\u0159eba nastavit monitoring slu\u017eby, logov\u00e1n\u00ed, pokr\u00fdt funkcionalitu testy, objednat virtu\u00e1lku nebo nasazen\u00ed v Kubernetes atd. Obecn\u011b je to lep\u0161\u00ed, i kdy\u017e je to del\u0161\u00ed a slo\u017eit\u011bj\u0161\u00ed.<\/p>\n<h3>Rozd\u011bluj a panuj. Jak to vypad\u00e1 s Luou?<\/h3>\n<p>\nByla v\u00e1\u017en\u00e1 dilema: n\u011bkter\u00fdm t\u00fdm\u016fm se neda\u0159ilo spolehliv\u011b nasazovat zm\u011bny v slu\u017eb\u011b s velk\u00fdm mno\u017estv\u00edm logiky na Lu\u011b. \u010casto to vedlo k nefunk\u010dnosti slu\u017eby. <\/p>\n<p>To znamen\u00e1, \u017ee v\u00fdvoj\u00e1\u0159i p\u0159ipravuj\u00ed n\u011bjakou zm\u011bnu. Tarantool za\u010dne prov\u00e1d\u011bt migraci, zat\u00edmco replikace m\u00e1 je\u0161t\u011b star\u00fd k\u00f3d; p\u0159ijde tam n\u011bjak\u00fd DDL p\u0159es replikaci, n\u011bco jin\u00e9ho a k\u00f3d se jednodu\u0161e rozpadne, proto\u017ee to nebylo zohledn\u011bno. V d\u016fsledku toho byla procedura aktualizace u admin\u016f pops\u00e1na na listu A4: zastavit replikaci, aktualizovat to, zapnout replikaci, vypnout zde, aktualizovat tam. Hr\u016fza! <\/p>\n<p>Nakonec se dnes sna\u017e\u00edme na Lu\u011b nic ned\u011blat. Jen pomoc\u00ed iproto (bin\u00e1rn\u00ed protokol pro komunikaci se serverem) a to je v\u0161e. Mo\u017en\u00e1 je to nedostatek znalost\u00ed u v\u00fdvoj\u00e1\u0159\u016f, ale z tohoto pohledu je syst\u00e9m slo\u017eit\u00fd.<\/p>\n<p>Nedodr\u017eujeme v\u017edy slep\u011b tento sc\u00e9n\u00e1\u0159. Dnes nem\u00e1me \u010dernou a b\u00edlou: bu\u010f v\u0161echno na Lu\u011b, nebo v\u0161echno na Go. U\u017e ch\u00e1peme, jak to kombinovat, abychom pozd\u011bji nem\u011bli probl\u00e9my s migrac\u00ed.<\/p>\n<p>Kde je nyn\u00ed Tarantool?<br \/>\nTarantool se pou\u017e\u00edv\u00e1 ve slu\u017eb\u011b pro v\u00fdpo\u010det kone\u010dn\u00e9 ceny zbo\u017e\u00ed s ohledem na slevov\u00e9 kup\u00f3ny, zn\u00e1m\u00e9 jako \u201ePromotayzer\u201c. Jak jsem ji\u017e d\u0159\u00edve zm\u00ednil, nyn\u00ed odch\u00e1z\u00ed do pozad\u00ed: nahrazuje ho nov\u00fd katalogov\u00fd servis s p\u0159edpo\u010d\u00edtan\u00fdmi cenami, ale je\u0161t\u011b p\u0159ed p\u016fl rokem se v\u0161echny v\u00fdpo\u010dty prov\u00e1d\u011bly v \u201ePromotayzeru\u201c. D\u0159\u00edve byla polovina jeho logiky napsan\u00e1 v Lua. P\u0159ed dv\u011bma lety se ze slu\u017eby stalo \u00falo\u017ei\u0161t\u011b a logika byla p\u0159epracov\u00e1na do Go, proto\u017ee mechanismus pr\u00e1ce se slevami se m\u00edrn\u011b zm\u011bnil a slu\u017eb\u011b chyb\u011bla v\u00fdkonnost. <\/p>\n<p>Jednou z nejkriti\u010dt\u011bj\u0161\u00edch slu\u017eeb je profil u\u017eivatele. To znamen\u00e1, \u017ee v\u0161ichni u\u017eivatel\u00e9 Wildberries jsou ulo\u017eeni v Tarantoolu, je jich asi 50 milion\u016f. Syst\u00e9m shardovan\u00fd podle ID u\u017eivatele, rozlo\u017een\u00fd ve n\u011bkolika datov\u00fdch centrech s vazbou na Go-servisy. <br \/>\nD\u0159\u00edve byl l\u00eddrem podle RPS \u201ePromotayzer\u201c, dostal se a\u017e na 6000 po\u017eadavk\u016f. V ur\u010dit\u00e9m okam\u017eiku jsme m\u011bli 50-60 instanc\u00ed. Nyn\u00ed je l\u00eddrem podle RPS - profily u\u017eivatel\u016f, p\u0159ibli\u017en\u011b 12 tis\u00edc. V t\u00e9to slu\u017eb\u011b se pou\u017e\u00edv\u00e1 vlastn\u00ed shardov\u00e1n\u00ed s rozd\u011blen\u00edm podle rozsah\u016f u\u017eivatelsk\u00fdch ID. Slu\u017eba obsluhuje v\u00edce ne\u017e 20 stroj\u016f, ale to je p\u0159\u00edli\u0161 mnoho, pl\u00e1nujeme sn\u00ed\u017eit vyhrazen\u00e9 zdroje, proto\u017ee sta\u010d\u00ed kapacita 4-5 stroj\u016f.<\/p>\n<p>Slu\u017eba relac\u00ed je n\u00e1\u0161 prvn\u00ed servis na vshard a Cartridge. Nastaven\u00ed vshard a aktualizace Cartridge si vy\u017e\u00e1daly ur\u010dit\u00e9 pracovn\u00ed n\u00e1klady, ale nakonec to v\u0161echno vy\u0161lo.<\/p>\n<p>Slu\u017eba pro zobrazov\u00e1n\u00ed r\u016fzn\u00fdch banner\u016f na webu a v mobiln\u00ed aplikaci byla jednou z prvn\u00edch, kter\u00e1 byla ihned spu\u0161t\u011bna na Tarantoolu. Tato slu\u017eba je zaj\u00edmav\u00e1 t\u00edm, \u017ee je star\u00e1 asi 6-7 let, st\u00e1le funguje a nikdy nebyla restartov\u00e1na. Pou\u017e\u00edvala se replikace master-master. Nikdy se nic neporouchalo.<\/p>\n<p>Existuje p\u0159\u00edklad pou\u017eit\u00ed Tarantoolu pro funk\u010dnost rychl\u00fdch adres\u00e1\u0159\u016f ve skladov\u00e9m syst\u00e9mu, aby bylo mo\u017en\u00e9 rychle ov\u011b\u0159it informace v n\u011bkter\u00fdch p\u0159\u00edpadech. Zkou\u0161eli jsme na to pou\u017e\u00edt Redis, ale data v pam\u011bti zab\u00edrala v\u00edce m\u00edsta ne\u017e u Tarantoolu.<\/p>\n<p>Slu\u017eby \u010dekac\u00edch seznam\u016f, klientsk\u00fdch p\u0159edplatn\u00fdch, popul\u00e1rn\u00edch dnes p\u0159\u00edb\u011bh\u016f a odlo\u017een\u00fdch produkt\u016f tak\u00e9 funguj\u00ed s Tarantool. Posledn\u00ed slu\u017eba zab\u00edr\u00e1 v pam\u011bti p\u0159ibli\u017en\u011b 120 GB. To je nejobjemn\u011bj\u0161\u00ed slu\u017eba z v\u00fd\u0161e uveden\u00fdch. <\/p>\n<h3>Z\u00e1v\u011br<\/h3>\n<p>\nD\u00edky sekund\u00e1rn\u00edm index\u016fm v kombinaci s key-value a transak\u010dnost\u00ed je Tarantool skv\u011blou volbou pro architektury zalo\u017een\u00e9 na mikroslu\u017eb\u00e1ch. Nicm\u00e9n\u011b jsme narazili na pot\u00ed\u017ee, kdy\u017e jsme nasazovali zm\u011bny v servici\u00edch s velk\u00fdm mno\u017estv\u00edm logiky v Lua \u2014 slu\u017eby \u010dasto p\u0159est\u00e1valy fungovat. Tento probl\u00e9m se n\u00e1m nepoda\u0159ilo vy\u0159e\u0161it, a \u010dasem jsme p\u0159e\u0161li na r\u016fzn\u00e9 kombinace Lua a Go: v\u00edme, kde je dobr\u00e9 pou\u017e\u00edt jeden jazyk a kde jin\u00fd.<\/p>\n<p><b>Co dal\u0161\u00edho si p\u0159e\u010d\u00edst na toto t\u00e9ma<\/b><\/p>\n<ul>\n<li>Vytv\u00e1\u0159\u00edme od nuly vysoce zat\u00ed\u017eenou aplikaci na Tarantool <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/510440\/\">habr.com\/cz\/company\/mailru\/blog\/510440<\/a><\/noindex><\/li>\n<li>Spolehliv\u00e1 volba l\u00eddra v Tarantool Cartridge <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/513912\/\">habr.com\/cz\/company\/mailru\/blog\/513912<\/a><\/noindex><\/li>\n<li>Telegram kan\u00e1l Tarantool s novinkami o produktu <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/tarantool_news\">t.me\/tarantool_news<\/a><\/noindex><\/li>\n<li>Diskutovat o Tarantool v komunitn\u00edm chatu <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/tarantoolru\">t.me\/tarantoolru<\/a><\/noindex><\/li>\n<\/ul>\n<p>Zdroj: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/516932\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0435 \u043c\u044b \u043b\u044e\u0431\u0438\u043c \u0438\u0441\u0442\u043e\u0440\u0438\u0438. \u041d\u0430\u043c \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f, \u0441\u0438\u0434\u044f \u0443 \u043a\u043e\u0441\u0442\u0440\u0430, \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043e \u0441\u0432\u043e\u0438\u0445 \u0431\u044b\u043b\u044b\u0445 \u043f\u043e\u0431\u0435\u0434\u0430\u0445, \u0441\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u0445 \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043e \u0441\u0432\u043e\u0435\u043c \u043e\u043f\u044b\u0442\u0435 \u0440\u0430\u0431\u043e\u0442\u044b. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043a\u0430\u043a \u0440\u0430\u0437 \u0442\u0430\u043a\u043e\u0439 \u0434\u0435\u043d\u044c. \u0418 \u043f\u0443\u0441\u0442\u044c \u0432\u044b \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0435 \u0443 \u043a\u043e\u0441\u0442\u0440\u0430, \u043d\u043e \u0437\u0430\u0442\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0434\u043b\u044f \u0432\u0430\u0441. \u0418\u0441\u0442\u043e\u0440\u0438\u044f \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u044b \u043d\u0430\u0447\u0430\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435\u043c \u043d\u0430 Tarantool. \u041a\u043e\u0433\u0434\u0430-\u0442\u043e \u0434\u0430\u0432\u043d\u044b\u043c-\u0434\u0430\u0432\u043d\u043e \u0432 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":92807,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-92806","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.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0441\u0435 \u043c\u044b \u043b\u044e\u0431\u0438\u043c \u0438\u0441\u0442\u043e\u0440\u0438\u0438.\" \/>\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\/cs\/blog\/administrirovanie\/kak-perestat-bespokoitsya-i-nachat-zhit-bez-monolita\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"cs_CZ\" \/>\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\u041a\u0430\u043a \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0442\u044c \u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0438\u0442\u044c\u0441\u044f \u0438 \u043d\u0430\u0447\u0430\u0442\u044c \u0436\u0438\u0442\u044c \u0431\u0435\u0437 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u0430 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0435 \u043c\u044b \u043b\u044e\u0431\u0438\u043c \u0438\u0441\u0442\u043e\u0440\u0438\u0438.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/kak-perestat-bespokoitsya-i-nachat-zhit-bez-monolita\" \/>\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-08-31T05:42:03+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-08-31T05:42:03+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\udd47Jak p\u0159estat m\u00edt obavy a za\u010d\u00edt \u017e\u00edt bez monolitu | ProHoster","description":"V\u0161ichni m\u00e1me r\u00e1di p\u0159\u00edb\u011bhy.","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/kak-perestat-bespokoitsya-i-nachat-zhit-bez-monolita","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"cs_CZ","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\u041a\u0430\u043a \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0442\u044c \u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0438\u0442\u044c\u0441\u044f \u0438 \u043d\u0430\u0447\u0430\u0442\u044c \u0436\u0438\u0442\u044c \u0431\u0435\u0437 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u0430 | ProHoster","og:description":"\u0412\u0441\u0435 \u043c\u044b \u043b\u044e\u0431\u0438\u043c \u0438\u0441\u0442\u043e\u0440\u0438\u0438.","og:url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/kak-perestat-bespokoitsya-i-nachat-zhit-bez-monolita","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-08-31T05:42:03+00:00","article:modified_time":"2020-08-31T05:42:03+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"92806","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 12:01:23","updated":"2022-10-01 20:28:38","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/92806","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=92806"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/92806\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media\/92807"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=92806"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=92806"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=92806"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}