Sveiki! Mani sauc Aleksejs Pjankovs, es esmu izstrÄdÄtÄjs uzÅÄmumÄ Sportmaster. TajÄ
Å odien vÄlos padalÄ«ties pÄrdomÄs, kas seko citai tÄmai ā java aizmugursistÄmas keÅ”atmiÅas sistÄmas izvÄle vietnes admin panelÄ«. Å im sižetam man ir Ä«paÅ”a nozÄ«me - lai gan stÄsts risinÄjÄs tikai 2 mÄneÅ”us, Å”ajÄs 60 dienÄs mÄs strÄdÄjÄm 12-16 stundas un bez nevienas brÄ«vas dienas. Nekad nebiju domÄjusi vai iedomÄjusies, ka var tik smagi strÄdÄt.
TÄpÄc es tekstu sadalÄ«ju 2 daļÄs, lai neielÄdÄtos pilnÄ«bÄ. TieÅ”i otrÄdi, pirmÄ daļa bÅ«s ļoti viegla ā sagatavoÅ”ana, ievads, daži apsvÄrumi par to, kas ir caching. Ja esat jau pieredzÄjis izstrÄdÄtÄjs vai strÄdÄjis ar keÅ”atmiÅÄm, no tehniskÄs puses, visticamÄk, Å”ajÄ rakstÄ nekas jauns nebÅ«s. Bet junioram tik mazs apskats var pateikt, kurÄ virzienÄ jÄskatÄs, ja viÅÅ” nonÄk Å”ÄdÄ krustcelÄs.
Kad Sportmaster mÄjaslapas jaunÄ versija tika nodota ražoÅ”anÄ, dati tika saÅemti tÄ, kÄ, maigi izsakoties, ne pÄrÄk Ärti. Par pamatu tika Åemtas vietnes iepriekÅ”Äjai versijai (Bitrix) sagatavotas tabulas, kuras bija jÄievelk ETL, jÄpÄrnes jaunÄ formÄ un jÄpapildina ar dažÄdiem sÄ«kumiem no vÄl duci sistÄmu. Lai vietnÄ parÄdÄ«tos jauna bilde vai preces apraksts, bija jÄgaida lÄ«dz nÄkamajai dienai - atjauninÄjumi tikai naktÄ«, reizi dienÄ.
SÄkumÄ jau no pirmajÄm ražoÅ”anas nedÄļÄm bija tik daudz raižu, ka Å”Ädas neÄrtÄ«bas satura pÄrvaldniekiem bija sÄ«kums. Bet, tiklÄ«dz viss sakÄrtojÄs, projekta attÄ«stÄ«ba turpinÄjÄs ā dažus mÄneÅ”us vÄlÄk, 2015. gada sÄkumÄ, sÄkÄm aktÄ«vi attÄ«stÄ«t admin paneli. 2015. un 2016. gadÄ viss norit labi, izlaižam regulÄri, admin panelis aptver arvien vairÄk datu sagatavoÅ”anas un gatavojamies tam, ka drÄ«zumÄ mÅ«su komandai tiks uzticÄts pats svarÄ«gÄkais un sarežģītÄkais - produkts Ä·Äde (pilnÄ«ga datu sagatavoÅ”ana un uzturÄÅ”ana par visiem produktiem). TaÄu 2017. gada vasarÄ, tieÅ”i pirms preÄu Ä·Ädes palaiÅ”anas, projekts nonÄks ļoti sarežģītÄ situÄcijÄ ā tieÅ”i keÅ”atmiÅas problÄmu dÄļ. Par Å”o epizodi vÄlos runÄt Ŕīs divdaļīgÄs publikÄcijas otrajÄ daļÄ.
Bet Å”ajÄ ierakstÄ sÄkÅ”u no tÄlienes, izklÄstÄ«Å”u dažas pÄrdomas - idejas par caching, kas bÅ«tu labs solis, lai ritinÄtu pirms liela projekta.
Kad notiek keÅ”atmiÅas uzdevums
KeÅ”atmiÅas uzdevums ne tikai parÄdÄs. MÄs esam izstrÄdÄtÄji, rakstÄm programmatÅ«ras produktu un vÄlamies, lai tas bÅ«tu pieprasÄ«ts. Ja produkts ir pieprasÄ«ts un veiksmÄ«gs, lietotÄji nÄks. Un nÄk arvien vairÄk. Un tad ir daudz lietotÄju, un tad produkts kļūst ļoti noslogots.
Pirmajos posmos mÄs nedomÄjam par optimizÄciju un koda veiktspÄju. Galvenais ir funkcionalitÄte, Ätra pilota izvÄrÅ”ana un hipotÄžu pÄrbaude. Un, ja slodze palielinÄs, mÄs sÅ«knÄjam dzelzi. MÄs to palielinÄm divas vai trÄ«s reizes, piecas reizes, varbÅ«t 10 reizes. Kaut kur Å”eit ā finanses vairs neļaus. Cik reizes palielinÄsies lietotÄju skaits? Tas nebÅ«s kÄ 2-5-10, bet veiksmes gadÄ«jumÄ tas bÅ«s no 100-1000 lÄ«dz 100 tÅ«kstoÅ”iem reižu. Tas ir, agrÄk vai vÄlÄk jums bÅ«s jÄveic optimizÄcija.
PieÅemsim, ka kÄda koda daļa (sauksim Å”o daļu par funkciju) aizÅem nepieklÄjÄ«gi ilgu laiku, un mÄs vÄlamies samazinÄt izpildes laiku. Funkcija var bÅ«t piekļuve datu bÄzei vai arÄ« kÄdas sarežģītas loÄ£ikas izpilde ā galvenais, lai tÄs izpilde prasa ilgu laiku. Cik daudz jÅ«s varat samazinÄt izpildes laiku? IerobežojumÄ varat to samazinÄt lÄ«dz nullei, ne tÄlÄk. KÄ jÅ«s varat samazinÄt izpildes laiku lÄ«dz nullei? Atbilde: pilnÄ«bÄ likvidÄt izpildi. TÄ vietÄ nekavÄjoties atgrieziet rezultÄtu. KÄ jÅ«s varat uzzinÄt rezultÄtu? Atbilde: vai nu parÄÄ·iniet, vai kaut kur paskatieties. Lai aprÄÄ·inÄtu, ir nepiecieÅ”ams ilgs laiks. Un izspiegot nozÄ«mÄ, piemÄram, atcerÄties rezultÄtu, ko funkcija radÄ«ja pÄdÄjo reizi, kad tÄ tika izsaukta ar tÄdiem paÅ”iem parametriem.
Tas ir, funkcijas Ä«stenoÅ”ana mums nav svarÄ«ga. Pietiek tikai zinÄt, no kÄdiem parametriem atkarÄ«gs rezultÄts. PÄc tam, ja parametru vÄrtÄ«bas ir attÄlotas objekta veidÄ, ko var izmantot kÄ atslÄgu kÄdÄ krÄtuvÄ, tad aprÄÄ·ina rezultÄtu var saglabÄt un nolasÄ«t nÄkamreiz, kad tam piekļūst. Ja Ŕī rezultÄta rakstÄ«Å”ana un nolasÄ«Å”ana ir ÄtrÄka nekÄ funkcijas izpilde, mums ir peļÅa Ätruma ziÅÄ. PeļÅas apjoms var sasniegt 100, 1000 un 100 tÅ«kstoÅ”us reižu (10^5 drÄ«zÄk ir izÅÄmums, bet diezgan atpaliekoÅ”as bÄzes gadÄ«jumÄ tas ir pilnÄ«gi iespÄjams).
PamatprasÄ«bas keÅ”atmiÅas sistÄmai
PirmÄ lieta, kas var kļūt par prasÄ«bu keÅ”atmiÅas sistÄmai, ir Ätrs lasÄ«Å”anas Ätrums un, nedaudz mazÄkÄ mÄrÄ, rakstÄ«Å”anas Ätrums. TÄ ir taisnÄ«ba, bet tikai lÄ«dz brÄ«dim, kad sistÄma tiks ieviesta ražoÅ”anÄ.
IzspÄlÄsim Å”o lietu.
PieÅemsim, ka esam nodroÅ”inÄjuÅ”i paÅ”reizÄjo slodzi ar aparatÅ«ru un tagad pakÄpeniski ievieÅ”am keÅ”atmiÅu. LietotÄju skaits nedaudz aug, slodze aug - pievienojam nedaudz keÅ”atmiÅas, ieskrÅ«vÄjam Å”ur tur. Tas turpinÄs kÄdu laiku, un tagad smagÄs funkcijas praktiski vairs netiek izsauktas - visa galvenÄ slodze krÄ«t uz keÅ”atmiÅu. LietotÄju skaits Å”ajÄ laikÄ ir pieaudzis N reizes.
Un, ja sÄkotnÄjÄ aparatÅ«ras piegÄde varÄtu bÅ«t 2-5 reizes, tad ar keÅ”atmiÅas palÄ«dzÄ«bu mÄs varÄtu uzlabot veiktspÄju 10 vai, labÄ gadÄ«jumÄ, 100, dažviet varbÅ«t arÄ« koeficientu. no 1000. Tas ir, uz vienas aparatÅ«ras ā mÄs apstrÄdÄjam 100 reizes vairÄk pieprasÄ«jumu. Lieliski, jÅ«s esat pelnÄ«juÅ”i piparkÅ«kas!
Bet tagad vienÄ jaukÄ brÄ«dÄ« nejauÅ”i sistÄma avarÄja un keÅ”atmiÅa sabruka. Nekas Ä«paÅ”s - galu galÄ keÅ”atmiÅa tika izvÄlÄta, pamatojoties uz prasÄ«bu āliels lasÄ«Å”anas un rakstÄ«Å”anas Ätrums, pÄrÄjam nav nozÄ«mesā.
SalÄ«dzinot ar starta slodzi, mÅ«su dzelzs rezerves bija 2-5 reizes, un slodze Å”ajÄ laikÄ palielinÄjÄs 10-100 reizes. Izmantojot keÅ”atmiÅu, mÄs novÄrsÄm smagas funkcijas, un tÄpÄc viss darbojÄs. Un tagad, bez keÅ”atmiÅas, cik reizes mÅ«su sistÄma palÄninÄsies? Kas ar mums notiks? SistÄma kritÄ«s.
Pat ja mÅ«su keÅ”atmiÅa neavarÄja, bet tika notÄ«rÄ«ta tikai uz brÄ«di, tÄ bÅ«s jÄiesilda, un tas prasÄ«s kÄdu laiku. Un Å”ajÄ laikÄ galvenais slogs gulsies uz funkcionalitÄti.
SecinÄjums: ļoti noslogotiem ražoÅ”anas projektiem ir nepiecieÅ”ama keÅ”atmiÅas sistÄma ne tikai ar augstu lasÄ«Å”anas un rakstÄ«Å”anas Ätrumu, bet arÄ« lai nodroÅ”inÄtu datu droŔību un izturÄ«bu pret kļūmÄm.
IzvÄlÄtie milti
ProjektÄ ar admin paneli izvÄle notika Å”Ädi: vispirms uzstÄdÄ«jÄm Hazelcast, jo MÄs jau bijÄm pazÄ«stami ar Å”o produktu no galvenÄs vietnes pieredzes. Bet Å”eit Ŕī izvÄle izrÄdÄ«jÄs neveiksmÄ«ga - zem mÅ«su slodzes profila Hazelcast ir ne tikai lÄns, bet gan Å”ausmÄ«gi lÄns. Un tajÄ laikÄ mÄs jau bijÄm pierakstÄ«juÅ”ies uz izlaiÅ”anas datumu.
Spoileris: kÄ tieÅ”i attÄ«stÄ«jÄs apstÄkļi, ka mÄs palaidÄm garÄm tik lielu darÄ«jumu un nonÄcÄm pie akÅ«tu un saspringtu situÄciju - pastÄstÄ«Å”u otrajÄ daÄ¼Ä - un kÄ mÄs nonÄcÄm un kÄ tikÄm ÄrÄ. Bet tagad - es tikai teikÅ”u, ka tas bija liels stress, un "domÄt - es kaut kÄ nevaru domÄt, mÄs kratÄm pudeli." āPudeles kratÄ«Å”anaā ir arÄ« spoileris, vairÄk par to vÄlÄk.
Ko mÄs darÄ«jÄm:
- MÄs izveidojam visu Google un StackOverflow ieteikto sistÄmu sarakstu. Nedaudz virs 30
- RakstÄm testus ar ražoÅ”anai raksturÄ«gu slodzi. Lai to izdarÄ«tu, mÄs ierakstÄ«jÄm datus, kas iet cauri sistÄmai ražoÅ”anas vidÄ - sava veida sniffer par datiem nevis tÄ«klÄ, bet gan sistÄmas iekÅ”ienÄ. TieÅ”i Å”ie dati tika izmantoti testos.
- Ar visu komandu katrs no saraksta izvÄlas nÄkamo sistÄmu, konfigurÄ to un veic testus. Tas neiztur pÄrbaudi, nenes slodzi - mÄs to izmetam un pÄrejam pie nÄkamÄs rindÄ.
- 17. sistÄmÄ kļuva skaidrs, ka viss ir bezcerÄ«gi. Beidz kratÄ«t pudeli, laiks nopietni padomÄt.
Bet Ŕī ir iespÄja, ja jums ir jÄizvÄlas sistÄma, kas "pÄrvarÄs" iepriekÅ” sagatavotos testos. Ko darÄ«t, ja Å”Ädu testu vÄl nav un vÄlaties Ätri izvÄlÄties?
ModelÄsim Å”o variantu (grÅ«ti iedomÄties, ka vidÄjais+ izstrÄdÄtÄjs dzÄ«vo vakuumÄ un atlases brÄ«dÄ« vÄl nav formalizÄjis savu izvÄli par to, kuru produktu izmÄÄ£inÄt vispirms - tÄpÄc tÄlÄkÄ sprieÅ”ana ir vairÄk teorÄtiÄ·is/filozofija/ par junioru).
IzlÄmuÅ”i par prasÄ«bÄm, mÄs sÄksim izvÄlÄties risinÄjumu. KÄpÄc no jauna izgudrot riteni: mÄs iesim un paÅemsim gatavu keÅ”atmiÅas sistÄmu.
Ja vÄl tikai iesÄc un googlÄ, tad dod vai pieÅem pasÅ«tÄ«jumu, bet kopumÄ vadlÄ«nijas bÅ«s Å”Ädas. PirmkÄrt, jÅ«s sastapsiet ar Redisu, tas ir dzirdams visur. Tad jÅ«s uzzinÄsit, ka EhCache ir vecÄkÄ un pÄrbaudÄ«tÄkÄ sistÄma. TÄlÄk mÄs rakstÄ«sim par Tarantool ā vietÄjo izstrÄdi, kurai ir unikÄls risinÄjuma aspekts. Un arÄ« Ignite, jo tas tagad ir populÄrs un bauda SberTech atbalstu. BeigÄs ir arÄ« Hazelcast, jo uzÅÄmumu pasaulÄ tas bieži parÄdÄs lielo uzÅÄmumu vidÅ«.
Saraksts nav pilnÄ«gs, ir vairÄki desmiti sistÄmu. Un mÄs izjauksim tikai vienu lietu. Å emsim āskaistuma konkursamā atlasÄ«tÄs 5 sistÄmas un veiksim atlasi. KurÅ” bÅ«s uzvarÄtÄjs?
Redis
MÄs lasÄm, ko viÅi raksta oficiÄlajÄ vietnÄ.
Å Ä·iet, ka viss ir kÄrtÄ«bÄ, var Åemt un pieskrÅ«vÄt - visu, ko vajag, dara. Bet prieka pÄc apskatÄ«sim citus kandidÄtus.
EhCache
Redis ir aizmirsts, esmu gatavs izvÄlÄties EhCache.
Bet patriotisma izjÅ«ta liek man redzÄt, kas ir labs TarantoolÄ.
Tarantool
ApskatÄ«sim ievieÅ”anas veidus: Mail.ru korporatÄ«vÄ Å”oseja, Avito, Beeline, Megafon, Alfa-Bank, Gazprom...
Ja joprojÄm bija kÄdas Å”aubas par Tarantool, tad Mastercard ievieÅ”anas gadÄ«jums mani piebeidz. Es lietoju Tarantool.
Bet vienalgaā¦
AizdedzinÄt
ā¦ vai ir vÄl daži
ÄŖstenojumi: Sberbank, American Airlines, Yahoo! JapÄna. Un tad es uzzinu, ka Ignite nav tikai ieviests SberbankÄ, bet SberTech komanda sÅ«ta savus cilvÄkus uz Ignite komandu, lai uzlabotu produktu. Tas ir pilnÄ«bÄ valdzinoÅ”s, un es esmu gatavs uzÅemties Ignite.
PilnÄ«gi nav skaidrs, kÄpÄc, es skatos uz piekto punktu.
lazdu lÄjums
Es dodos uz vietni
Tas ir viss, esmu gatavs uzÅemt Hazelcast.
SalÄ«dzinÄjums
Bet, ja paskatÄs, visi pieci kandidÄti ir aprakstÄ«ti tÄ, ka katrs no viÅiem ir labÄkais. KÄ izvÄlÄties? MÄs varam redzÄt, kurÅ” no tiem ir populÄrÄkais, meklÄt salÄ«dzinÄjumus, un galvassÄpes pÄries.
MÄs atrodam vienu Å”Ädu
Å eit tie ir sakÄrtoti: Redis ir augÅ”pusÄ, Hazelcast ir otrajÄ vietÄ, Tarantool un Ignite gÅ«st popularitÄti, EhCache ir bijis un paliek nemainÄ«gs.
Bet paskatīsimies
Visas Ŕīs sistÄmas nav tikai keÅ”atmiÅas sistÄmas. Tiem ir arÄ« daudz funkcionalitÄtes, tostarp, ja dati netiek sÅ«knÄti klientam apstrÄdei, bet otrÄdi: kods, kas jÄizpilda uz datiem, pÄrvietojas uz serveri, tiek izpildÄ«ts tur, un rezultÄts tiek atgriezts. Un tos tik bieži neuzskata par atseviŔķu keÅ”atmiÅas sistÄmu.
Labi, nepadosimies, atradÄ«sim tieÅ”u sistÄmu salÄ«dzinÄjumu. Å emsim divas galvenÄs iespÄjas - Redis un Hazelcast. MÅ«s interesÄ Ätrums, un mÄs tos salÄ«dzinÄsim, pamatojoties uz Å”o parametru.
Hz vs Redis
MÄs atrodam Å”o
Zils ir Redis, sarkans ir Hazelcast. Hazelcast uzvar visur, un tam ir pamatojums: tas ir daudzpavedienu, ļoti optimizÄts, katrs pavediens darbojas ar savu nodalÄ«jumu, tÄpÄc nav bloÄ·ÄÅ”anas. Un Redis ir viena vÄ«tne; tas negÅ«st labumu no mÅ«sdienu daudzkodolu centrÄlajiem procesoriem. Hazelcast ir asinhronÄ I/O, Redis-Jedis ir bloÄ·ÄÅ”anas ligzdas. Galu galÄ Hazelcast izmanto binÄro protokolu, un Redis ir orientÄts uz tekstu, kas nozÄ«mÄ, ka tas ir neefektÄ«vs.
Katram gadÄ«jumam pievÄrsÄ«simies citam salÄ«dzinÄÅ”anas avotam. Ko viÅÅ” mums parÄdÄ«s?
Redis pret Hz
VÄl vienu
Å eit, gluži pretÄji, sarkans ir Redis. Tas nozÄ«mÄ, ka Redis veiktspÄjas ziÅÄ pÄrspÄj Hazelcast. PirmajÄ salÄ«dzinÄÅ”anÄ uzvarÄja Hezelkass, otrajÄ ā Redis.
IzrÄdÄs, ka pirmÄ rezultÄts faktiski tika viltots: Redis tika uzÅemts bÄzes kastÄ, un Hazelcast tika pielÄgots testa gadÄ«jumam. Tad izrÄdÄs: pirmkÄrt, mÄs nevaram nevienam uzticÄties, un, otrkÄrt, beidzot izvÄloties sistÄmu, mums tÄ joprojÄm ir pareizi jÄkonfigurÄ. Å ie iestatÄ«jumi ietver desmitiem, gandrÄ«z simtiem parametru.
Kratot pudeli
Un es varu izskaidrot visu procesu, ko mÄs tagad esam paveikuÅ”i, izmantojot Å”Ädu metaforu: āPudeles kratÄ«Å”anaā. Tas ir, tagad jums nav jÄprogrammÄ, tagad galvenais ir prast nolasÄ«t stackoverflow. Un manÄ komandÄ ir cilvÄks, profesionÄlis, kurÅ” kritiskos brīžos strÄdÄ tieÅ”i Å”Ädi.
Ko viÅÅ” dara? ViÅÅ” redz saplÄ«suÅ”u lietu, redz steka pÄdas, paÅem no tÄs dažus vÄrdus (kuriem ir viÅa zinÄÅ”anas programmÄ), meklÄ Google, starp atbildÄm atrod stackoverflow. Nelasot, nedomÄjot, viÅÅ” starp jautÄjuma atbildÄm izvÄlas kaut ko lÄ«dzÄ«gÄku teikumam ādari to un toā (izvÄlÄties Å”Ädu atbildi ir viÅa talants, jo ne vienmÄr atbilde saÅÄma visvairÄk atzÄ«mju), attiecas , izskatÄs: ja kaut kas ir mainÄ«jies, tad lieliski. Ja tas nav mainÄ«jies, atgrieziet to atpakaļ. Un atkÄrtojiet palaiÅ”anu-pÄrbaudi-meklÄÅ”anu. Un Å”ÄdÄ intuitÄ«vÄ veidÄ viÅÅ” nodroÅ”ina, ka kods darbosies pÄc kÄda laika. ViÅÅ” nezina, kÄpÄc, viÅÅ” nezina, ko viÅÅ” izdarÄ«ja, viÅÅ” nevar izskaidrot. Bet! Å Ä« infekcija darbojas. Un "uguns ir nodzÄsta". Tagad izdomÄsim, ko mÄs izdarÄ«jÄm. Kad programma darbojas, tas ir daudz vieglÄk. Un tas ietaupa daudz laika.
Å Ä« metode ir ļoti labi izskaidrota ar Å”o piemÄru.
KÄdreiz bija ļoti populÄri savÄkt buru laivu pudelÄ. TajÄ paÅ”Ä laikÄ buru laiva ir liela un trausla, un pudeles kakls ir ļoti Å”aurs, to nav iespÄjams iestumt iekÅ”Ä. KÄ to salikt?
Ir tÄda metode, ļoti Ätra un ļoti efektÄ«va.
KuÄ£is sastÄv no sÄ«kumiem: nÅ«jÄm, virvÄm, burÄm, lÄ«mes. To visu liekam pudelÄ.
PaÅemam pudeli ar abÄm rokÄm un sÄkam kratÄ«t. MÄs viÅu kratÄm un kratÄm. Un parasti tas, protams, izrÄdÄs pilnÄ«gs atkritums. Bet dažreiz. Dažreiz izrÄdÄs, ka tas ir kuÄ£is! PrecÄ«zÄk, kaut kas lÄ«dzÄ«gs kuÄ£im.
MÄs kÄdam parÄdÄm Å”o: "Seryoga, vai redzi!?" Un tieÅ”Äm, no tÄlienes tas izskatÄs pÄc kuÄ£a. TaÄu tÄ nevar turpinÄties.
Ir arÄ« cits veids. Tos izmanto pieredzÄjuÅ”Äki puiÅ”i, piemÄram, hakeri.
Iedevu Å”im puisim uzdevumu, viÅÅ” visu izdarÄ«ja un aizgÄja. Un jÅ«s skatÄties - izskatÄs, ka tas ir izdarÄ«ts. Un pÄc kÄda laika, kad kods jÄnoformÄ, tas sÄkas viÅa dÄļ... Labi, ka viÅÅ” jau paguvis aizbÄgt tÄlu prom. Tie ir puiÅ”i, kuri, izmantojot pudeles piemÄru, darÄ«s tÄ: redz, kur ir dibens, stikls liecas. Un nav lÄ«dz galam skaidrs, vai tas ir caurspÄ«dÄ«gs vai nÄ. Tad āhakeriā nogriež Å”o dibenu, ievieto tur kuÄ£i, pÄc tam atkal pielÄ«mÄ dibenu, un Ŕķiet, ka tÄ tam ir jÄbÅ«t.
No problÄmas noteikÅ”anas viedokļa viss Ŕķiet pareizi. Bet izmantojot kuÄ£us kÄ piemÄru: kÄpÄc vispÄr taisÄ«t Å”o kuÄ£i, kam tas vispÄr vajadzÄ«gs? Tas nenodroÅ”ina nekÄdu funkcionalitÄti. Parasti Å”Ädi kuÄ£i ir dÄvanas ļoti augsta ranga cilvÄkiem, kuri to noliek uz plaukta virs sevis, kÄ kaut kÄdu simbolu, kÄ zÄ«mi. Un, ja Å”Äds cilvÄks, liela uzÅÄmuma vadÄ«tÄjs vai augsta amatpersona, kÄ karodziÅÅ” stÄvÄs uz tÄdu kapÄÅ”anu, kam nogriezts kakls? BÅ«tu labÄk, ja viÅÅ” par to nekad nezinÄtu. TÄtad, kÄ viÅi galu galÄ izgatavo Å”os kuÄ£us, kurus var uzdÄvinÄt svarÄ«gai personai?
VienÄ«gÄ galvenÄ vieta, kur jÅ«s tieÅ”Äm neko nevarat darÄ«t, ir Ä·ermenis. Un kuÄ£a korpuss iekļaujas tieÅ”i kaklÄ. TÄ kÄ kuÄ£is ir samontÄts Ärpus pudeles. TaÄu tÄ nav tikai kuÄ£a salikÅ”ana, tÄ ir Ä«sta juvelierizstrÄdÄjumu amatniecÄ«ba. DetaļÄm tiek pievienotas Ä«paÅ”as sviras, kas pÄc tam ļauj tÄs pacelt. PiemÄram, buras tiek salocÄ«tas, rÅ«pÄ«gi ienestas iekÅ”Ä un pÄc tam ar pincetes palÄ«dzÄ«bu ļoti precÄ«zi, ar precizitÄti tiek vilktas un paceltas. RezultÄts ir mÄkslas darbs, ko var apdÄvinÄt ar tÄ«ru sirdsapziÅu un lepnumu.
Un, ja mÄs vÄlamies, lai projekts bÅ«tu veiksmÄ«gs, komandÄ jÄbÅ«t vismaz vienam juvelierim. TÄds, kuram rÅ«p preces kvalitÄte un Åem vÄrÄ visus aspektus, neko neupurÄjot, pat stresa brīžos, kad apstÄkļi liek darÄ«t steidzamo uz svarÄ«gÄ rÄÄ·ina. Visi veiksmÄ«gie projekti, kas ir ilgtspÄjÄ«gi, kas ir izturÄjuÅ”i laika pÄrbaudi, ir veidoti uz Ŕī principa. Tajos ir kaut kas ļoti precÄ«zs un unikÄls, kaut kas tÄds, kas izmanto visas pieejamÄs iespÄjas. PiemÄrÄ ar kuÄ£i pudelÄ tiek apspÄlÄts fakts, ka kuÄ£a korpuss iet caur kaklu.
Atgriežoties pie uzdevuma izvÄlÄties mÅ«su keÅ”atmiÅas serveri, kÄ varÄtu izmantot Å”o metodi? PiedÄvÄju Å”o iespÄju izvÄlÄties no visÄm esoÅ”ajÄm sistÄmÄm - nekratiet pudeli, neizvÄlaties, bet paskatieties, kas tÄm principÄ ir, ko meklÄt, izvÄloties sistÄmu.
Kur meklÄt pudeles kaklu
MÄÄ£inÄsim nekratÄ«t pudeli, neiziet cauri visam, kas tur ir pa vienam, bet paskatÄ«simies, kÄdas problÄmas radÄ«sies, ja pÄkÅ”Åi savam uzdevumam paÅ”i konstruÄsim Å”Ädu sistÄmu. Protams, mÄs velosipÄdu nesaliksim, taÄu izmantosim Å”o diagrammu, lai saprastu, kuriem punktiem jÄpievÄrÅ” uzmanÄ«ba produktu aprakstos. IeskicÄsim Å”Ädu diagrammu.
Ja sistÄma ir izplatÄ«ta, tad mums bÅ«s vairÄki serveri (6). PieÅemsim, ka ir Äetri (ir Ärti tos ievietot attÄlÄ, bet, protams, to var bÅ«t tik daudz, cik vÄlaties). Ja serveri atrodas dažÄdos mezglos, tas nozÄ«mÄ, ka tie visi palaiž kÄdu kodu, kas ir atbildÄ«gs par to, lai Å”ie mezgli izveidotu kopu un pÄrtraukuma gadÄ«jumÄ izveidotu savienojumu un atpazÄ«tu viens otru.
Mums ir nepiecieÅ”ama arÄ« koda loÄ£ika (2), kas faktiski ir saistÄ«ta ar keÅ”atmiÅu. Klienti mijiedarbojas ar Å”o kodu, izmantojot kÄdu API. Klienta kods (1) var atrasties tajÄ paÅ”Ä JVM vai piekļūt tam tÄ«klÄ. IekÅ”pusÄ Ä«stenotÄ loÄ£ika ir lÄmums par to, kurus objektus atstÄt keÅ”atmiÅÄ un kurus izmest. MÄs izmantojam atmiÅu (3), lai saglabÄtu keÅ”atmiÅu, bet, ja nepiecieÅ”ams, mÄs varam saglabÄt daļu datu diskÄ (4).
ApskatÄ«sim, kurÄs daļÄs notiks slodze. Faktiski tiks ielÄdÄta katra bultiÅa un katrs mezgls. PirmkÄrt, starp klienta kodu un api, ja tÄ ir tÄ«kla komunikÄcija, kritums var bÅ«t diezgan pamanÄms. OtrkÄrt, paÅ”a api ietvaros - ja mÄs pÄrspÄ«lÄjam ar sarežģītu loÄ£iku, mÄs varam saskarties ar problÄmÄm ar centrÄlo procesoru. Un bÅ«tu jauki, ja loÄ£ika netÄrÄtu laiku atmiÅai. Un paliek mijiedarbÄ«ba ar failu sistÄmu - parastajÄ versijÄ tas ir serializÄÅ”ana / atjaunoÅ”ana un rakstÄ«Å”ana / lasÄ«Å”ana.
NÄkamÄ ir mijiedarbÄ«ba ar kopu. VisticamÄk, tas bÅ«s tajÄ paÅ”Ä sistÄmÄ, bet tas varÄtu bÅ«t atseviŔķi. Å eit jÄÅem vÄrÄ arÄ« datu pÄrsÅ«tÄ«Å”ana uz to, datu serializÄcijas Ätrums un mijiedarbÄ«ba starp klasteru.
Tagad, no vienas puses, mÄs varam iedomÄties, "kÄdi zobrati griezÄ«sies" keÅ”atmiÅas sistÄmÄ, apstrÄdÄjot pieprasÄ«jumus no mÅ«su koda, un, no otras puses, mÄs varam novÄrtÄt, kÄdus un cik pieprasÄ«jumus mÅ«su kods Ä£enerÄs Å”ai sistÄmai. Tas ir pietiekami, lai izdarÄ«tu vairÄk vai mazÄk prÄtÄ«gu izvÄli - lai izvÄlÄtos sistÄmu mÅ«su lietoÅ”anas gadÄ«jumam.
lazdu lÄjums
ApskatÄ«sim, kÄ piemÄrot Å”o sadalÄ«jumu mÅ«su sarakstam. PiemÄram, Hazelcast.
Lai ievietotu/paÅemtu datus no Hazelcast, klienta kods piekļūst (1) API. Hz ļauj palaist serveri kÄ iegultu, un Å”ajÄ gadÄ«jumÄ piekļuve api ir metodes izsaukums JVM iekÅ”ienÄ, ko var uzskatÄ«t par bezmaksas.
Lai (2) loÄ£ika darbotos, Hz paļaujas uz serializÄtÄs atslÄgas baitu masÄ«va jaukÅ”anu - tas ir, atslÄga tiks serializÄta jebkurÄ gadÄ«jumÄ. Tas ir neizbÄgami pieskaitÄmi Hz.
IzlikÅ”anas stratÄÄ£ijas tiek Ä«stenotas labi, bet Ä«paÅ”iem gadÄ«jumiem varat pievienot savu. Jums nav jÄuztraucas par Å”o daļu.
Var pievienot krÄtuvi (4). Lieliski. MijiedarbÄ«ba (5) iegultai var tikt uzskatÄ«ta par tÅ«lÄ«tÄju. Datu apmaiÅa starp mezgliem klasterÄ« (6) - jÄ, tÄ pastÄv. Tas ir ieguldÄ«jums kļūdu tolerancÄ uz Ätruma rÄÄ·ina. Hz funkcija Near-cache ļauj samazinÄt cenu ā dati, kas saÅemti no citiem klastera mezgliem, tiks saglabÄti keÅ”atmiÅÄ.
Ko Å”Ädos apstÄkļos var darÄ«t, lai palielinÄtu Ätrumu?
PiemÄram, lai izvairÄ«tos no (2) atslÄgas serializÄcijas, pievienojiet citu keÅ”atmiÅu Hazelcast augÅ”pusÄ, lai iegÅ«tu karstÄkos datus. Å im nolÅ«kam Sportmaster izvÄlÄjÄs Caffeine.
Lai pagrieztu 6. lÄ«menÄ«, Hz piedÄvÄ divu veidu krÄtuves: IMap un ReplicatedMap.
Ir vÄrts pieminÄt, kÄ Hazelcast nokļuva Sportmaster tehnoloÄ£iju kaudzÄ.
2012. gadÄ, kad strÄdÄjÄm pie paÅ”a pirmÄ topoÅ”Äs vietnes izmÄÄ£inÄjuma versijas, tieÅ”i Hazelcast izrÄdÄ«jÄs pirmÄ saite, ko meklÄtÄjprogramma atgrieza. IepazÄ«Å”anÄs sÄkÄs āpirmo reiziā ā mÅ«s aizrÄva fakts, ka tikai pÄc divÄm stundÄm, kad sistÄmÄ ieskrÅ«vÄjÄm Hz, tÄ nostrÄdÄja. Un tas darbojÄs labi. LÄ«dz dienas beigÄm mÄs bijÄm pabeiguÅ”i vairÄkus testus un bijÄm apmierinÄti. Un ar Å”o spara rezervi pietika, lai pÄrvarÄtu pÄrsteigumus, ko laika gaitÄ sagÄdÄja Hz. Tagad Sportmaster komandai nav pamata pamest Hezelkastu.
Bet tÄdi argumenti kÄ āpirmÄ saite meklÄtÄjÄā un āHelloWorld tika Ätri samontÄtiā, protams, ir izÅÄmums un izvÄles brīža iezÄ«me. ReÄlie izvÄlÄtÄs sistÄmas testi sÄkas ar izlaiÅ”anu ražoÅ”anÄ, un tieÅ”i Å”ajÄ posmÄ jums jÄpievÄrÅ” uzmanÄ«ba, izvÄloties jebkuru sistÄmu, ieskaitot keÅ”atmiÅu. PatiesÄ«bÄ mÅ«su gadÄ«jumÄ varam teikt, ka Hazelcast izvÄlÄjÄmies nejauÅ”i, bet tad izrÄdÄ«jÄs, ka izvÄlÄjÄmies pareizi.
RažoÅ”anai daudz svarÄ«gÄk: uzraudzÄ«ba, atseviŔķu mezglu kļūdu apstrÄde, datu replikÄcija, mÄrogoÅ”anas izmaksas. Tas ir, ir vÄrts pievÄrst uzmanÄ«bu uzdevumiem, kas radÄ«sies sistÄmas uzturÄÅ”anas laikÄ - kad slodze ir desmitiem reižu lielÄka nekÄ plÄnots, kad mÄs nejauÅ”i augÅ”upielÄdÄjam kaut ko nepareizÄ vietÄ, kad mums ir nepiecieÅ”ams izrullÄt jaunu versiju kodu, nomainiet datus un dariet to klientiem nepamanÄ«ti.
VisÄm Ŕīm prasÄ«bÄm Hazelcast noteikti atbilst rÄÄ·inam.
TurpinÄjums sekos
Bet Hazelcast nav panaceja. 2017. gadÄ mÄs izvÄlÄjÄmies Hazelcast administratora keÅ”atmiÅai, vienkÄrÅ”i pamatojoties uz labiem iespaidiem no iepriekÅ”ÄjÄs pieredzes. Tam bija galvenÄ loma ļoti nežÄlÄ«gÄ jokÄ, kura dÄļ mÄs nonÄcÄm sarežģītÄ situÄcijÄ un āvaronÄ«giā no tÄs izgÄjÄm uz 60 dienÄm. Bet vairÄk par to nÄkamajÄ daļÄ.
TikmÄr... LaimÄ«gu jauno kodeksu!
Avots: www.habr.com