Sveiki, mani sauc JevgeÅijs. Es strÄdÄju Yandex.Market meklÄÅ”anas infrastruktÅ«rÄ. Es vÄlos pastÄstÄ«t Habr kopienai par tirgus iekÅ”Äjo virtuvi - un man ir daudz ko pastÄstÄ«t. PirmkÄrt, tirgus meklÄÅ”anas darbÄ«bas, procesi un arhitektÅ«ra. KÄ rÄ«koties ÄrkÄrtas situÄcijÄs: kas notiek, ja viens serveris nedarbojas? Ko darÄ«t, ja ir 100 Å”Ädu serveru?
JÅ«s arÄ« uzzinÄsit, kÄ mÄs vienlaikus ievieÅ”am jaunu funkcionalitÄti vairÄkos serveros. Un kÄ mÄs pÄrbaudÄm sarežģītus pakalpojumus tieÅ”i ražoÅ”anÄ, neradot neÄrtÄ«bas lietotÄjiem. VispÄr, kÄ Tirgus meklÄÅ”ana darbojas, lai visiem labi pavadÄ«tu laiku.
Mazliet par mums: kÄdu problÄmu mÄs risinÄm
Ievadot tekstu, meklÄjot preci pÄc parametriem vai salÄ«dzinot cenas dažÄdos veikalos, visi pieprasÄ«jumi tiek nosÅ«tÄ«ti uz meklÄÅ”anas servisu. MeklÄÅ”ana ir lielÄkais pakalpojums tirgÅ«.
MÄs apstrÄdÄjam visus meklÄÅ”anas pieprasÄ«jumus: no vietnÄm market.yandex.ru, beru.ru, pakalpojuma Supercheck, Yandex.Advisor, mobilajÄm lietojumprogrammÄm. MÄs arÄ« iekļaujam produktu piedÄvÄjumus meklÄÅ”anas rezultÄtos vietnÄ yandex.ru.
Ar meklÄÅ”anas pakalpojumu es domÄju ne tikai paÅ”u meklÄÅ”anu, bet arÄ« datubÄzi ar visiem piedÄvÄjumiem tirgÅ«. MÄrogs ir Å”Äds: dienÄ tiek apstrÄdÄts vairÄk nekÄ miljards meklÄÅ”anas pieprasÄ«jumu. Un visam vajadzÄtu darboties Ätri, bez pÄrtraukumiem un vienmÄr radÄ«t vÄlamo rezultÄtu.
Kas ir kas: tirgus arhitektūra
ÄŖsi aprakstÄ«Å”u paÅ”reizÄjo Tirgus arhitektÅ«ru. To var aptuveni aprakstÄ«t tÄlÄk redzamajÄ diagrammÄ:
PieÅemsim, ka pie mums ierodas partneru veikals. ViÅÅ” saka, ka gribu pÄrdot rotaļlietu: Å”o ļauno kaÄ·i ar ÄÄ«kstÄtÄju. Un vÄl viens dusmÄ«gs kaÄ·is bez ÄÄ«kstÄja. Un tikai kaÄ·is. Tad veikalam jÄsagatavo piedÄvÄjumi, kurus Tirgus meklÄ. Veikals Ä£enerÄ Ä«paÅ”u xml ar piedÄvÄjumiem un paziÅo ceļu uz Å”o xml, izmantojot filiÄles saskarni. PÄc tam indeksÄtÄjs periodiski lejupielÄdÄ Å”o xml, pÄrbauda kļūdas un saglabÄ visu informÄciju milzÄ«gÄ datu bÄzÄ.
Ir daudz Å”Ädu saglabÄtu xml. No Ŕīs datu bÄzes tiek izveidots meklÄÅ”anas rÄdÄ«tÄjs. Indekss tiek saglabÄts iekÅ”ÄjÄ formÄtÄ. PÄc indeksa izveides pakalpojums Layout to augÅ”upielÄdÄ meklÄÅ”anas serveros.
RezultÄtÄ datubÄzÄ parÄdÄs dusmÄ«gs kaÄ·is ar ÄÄ«kstÄtÄju, un serverÄ« parÄdÄs kaÄ·a indekss.
Es jums pastÄstÄ«Å”u, kÄ mÄs meklÄjam kaÄ·i sadaÄ¼Ä par meklÄÅ”anas arhitektÅ«ru.
Tirgus meklÄÅ”anas arhitektÅ«ra
MÄs dzÄ«vojam mikropakalpojumu pasaulÄ: katrs ienÄkoÅ”ais pieprasÄ«jums
VienkÄrÅ”ota pieprasÄ«jumu apstrÄdes shÄma
Katram pakalpojumam ir kÄda brÄ«niŔķīga lieta ā savs balansÄtÄjs ar unikÄlu nosaukumu:
BalansÄtÄjs sniedz mums lielÄku elastÄ«bu pakalpojuma pÄrvaldÄ«bÄ: varat, piemÄram, izslÄgt serverus, kas bieži vien ir nepiecieÅ”ams atjauninÄjumiem. BalsotÄjs redz, ka serveris nav pieejams, un automÄtiski novirza pieprasÄ«jumus uz citiem serveriem vai datu centriem. Pievienojot vai noÅemot serveri, slodze tiek automÄtiski pÄrdalÄ«ta starp serveriem.
BalsotÄja unikÄlais nosaukums nav atkarÄ«gs no datu centra. Kad pakalpojums A iesniedz pieprasÄ«jumu B, pÄc noklusÄjuma balansÄtÄjs B novirza pieprasÄ«jumu uz paÅ”reizÄjo datu centru. Ja pakalpojums nav pieejams vai nepastÄv paÅ”reizÄjÄ datu centrÄ, pieprasÄ«jums tiek novirzÄ«ts uz citiem datu centriem.
Viens FQDN visiem datu centriem ļauj pakalpojumam A pilnÄ«bÄ abstrahÄties no atraÅ”anÄs vietÄm. ViÅa pieprasÄ«jums pakalpojumam B vienmÄr tiks apstrÄdÄts. IzÅÄmums ir gadÄ«jums, kad pakalpojums atrodas visos datu centros.
Bet ne viss ir tik rožaini ar Å”o balansieri: mums ir papildu starpkomponents. BalsotÄjs var bÅ«t nestabils, un Å”o problÄmu atrisina lieki serveri. PastÄv arÄ« papildu aizkave starp pakalpojumiem A un B. Bet praksÄ tas ir mazÄks par 1 ms, un lielÄkajai daļai pakalpojumu tas nav kritisks.
NegaidÄ«tÄ situÄcija: meklÄÅ”anas pakalpojumu lÄ«dzsvaroÅ”ana un noturÄ«ba
IedomÄjieties, ka ir sabrukums: jums jÄatrod kaÄ·is ar ÄÄ«kstÄtÄju, bet serveris avarÄ. Vai 100 serveri. KÄ tikt ÄrÄ? Vai tieÅ”Äm atstÄsim lietotÄju bez kaÄ·a?
SituÄcija ir biedÄjoÅ”a, bet mÄs esam tai gatavi. Es jums pateikÅ”u secÄ«bÄ.
MeklÄÅ”anas infrastruktÅ«ra atrodas vairÄkos datu centros:
ProjektÄjot iekļaujam iespÄju slÄgt vienu datu centru. DzÄ«ve ir pÄrsteigumu pilna ā piemÄram, ekskavators var pÄrgriezt pazemes kabeli (jÄ, tas notika). AtlikuÅ”o datu centru jaudai jÄbÅ«t pietiekamai, lai izturÄtu maksimÄlo slodzi.
ApskatÄ«sim vienu datu centru. Katram datu centram ir viena un tÄ pati balansiera darbÄ«bas shÄma:
Viens balansÄtÄjs ir vismaz trÄ«s fiziski serveri. Å Ä« atlaiÅ”ana ir paredzÄta uzticamÄ«bai. Balansieri darbojas ar HAProx.
MÄs izvÄlÄjÄmies HAProx tÄ augstÄs veiktspÄjas, zemo resursu prasÄ«bu un plaÅ”Äs funkcionalitÄtes dÄļ. MÅ«su meklÄÅ”anas programmatÅ«ra darbojas katrÄ serverÄ«.
Viena servera kļūmes iespÄjamÄ«ba ir zema. Bet, ja jums ir daudz serveru, palielinÄs iespÄja, ka vismaz viens nedarbosies.
Tas notiek patiesÄ«bÄ: serveri avarÄ. TÄpÄc ir nepiecieÅ”ams pastÄvÄ«gi uzraudzÄ«t visu serveru statusu. Ja serveris pÄrstÄj reaÄ£Ät, tas tiek automÄtiski atvienots no trafika. Å im nolÅ«kam HAProxy ir iebÅ«vÄta veselÄ«bas pÄrbaude. Tas tiek nosÅ«tÄ«ts uz visiem serveriem reizi sekundÄ ar HTTP pieprasÄ«jumu ā/pingā.
VÄl viena HAProxy funkcija: aÄ£enta pÄrbaude ļauj vienmÄrÄ«gi ielÄdÄt visus serverus. Lai to izdarÄ«tu, HAProxy izveido savienojumu ar visiem serveriem, un tie atgriež savu svaru atkarÄ«bÄ no paÅ”reizÄjÄs slodzes no 1 lÄ«dz 100. Svars tiek aprÄÄ·inÄts, pamatojoties uz pieprasÄ«jumu skaitu apstrÄdes rindÄ un procesora slodzi.
Tagad par kaÄ·a atraÅ”anu. MeklÄÅ”anas rezultÄti tÄdiem pieprasÄ«jumiem kÄ: /search?text=dusmÄ«gs+kaÄ·is. Lai meklÄÅ”ana noritÄtu Ätri, visam kaÄ·u indeksam jÄietilpst RAM. Pat lasÄ«Å”ana no SSD nav pietiekami Ätra.
KÄdreiz piedÄvÄjumu datu bÄze bija maza, un tai pietika ar viena servera operatÄ«vo atmiÅu. Pieaugot piedÄvÄjuma bÄzei, viss vairs neietilpa Å”ajÄ RAM, un dati tika sadalÄ«ti divÄs daļÄs: shard 1 un shard 2.
Bet tÄ notiek vienmÄr: jebkurÅ” risinÄjums, pat labs, rada citas problÄmas.
BalansÄtÄjs tomÄr aizgÄja uz jebkuru serveri. Bet iekÄrtÄ, kurÄ tika saÅemts pieprasÄ«jums, bija tikai puse no rÄdÄ«tÄja. PÄrÄjais bija citos serveros. TÄpÄc serverim bija jÄdodas uz kÄdu kaimiÅu maŔīnu. PÄc datu saÅemÅ”anas no abiem serveriem rezultÄti tika apvienoti un pÄrkÄrtoti.
TÄ kÄ balansÄtÄjs vienmÄrÄ«gi sadala pieprasÄ«jumus, visi serveri bija iesaistÄ«ti pÄrkÄrtoÅ”anÄ, nevis tikai datu nosÅ«tÄ«Å”anÄ.
ProblÄma radÄs, ja blakus serveris nebija pieejams. RisinÄjums bija norÄdÄ«t vairÄkus serverus ar dažÄdÄm prioritÄtÄm kÄ ākaimiÅuā serveri. PirmkÄrt, pieprasÄ«jums tika nosÅ«tÄ«ts paÅ”reizÄjÄ plaukta serveriem. Ja atbilde netika saÅemta, pieprasÄ«jums tika nosÅ«tÄ«ts uz visiem serveriem Å”ajÄ datu centrÄ. Visbeidzot, pieprasÄ«jums tika nosÅ«tÄ«ts uz citiem datu centriem.
Pieaugot priekÅ”likumu skaitam, dati tika sadalÄ«ti ÄetrÄs daļÄs. Bet tas nebija ierobežojums.
PaÅ”laik tiek izmantota astoÅu shardu konfigurÄcija. TurklÄt, lai saglabÄtu vÄl vairÄk atmiÅas, indekss tika sadalÄ«ts meklÄÅ”anas daÄ¼Ä (kas tiek izmantota meklÄÅ”anai) un fragmenta daÄ¼Ä (kas nav iesaistÄ«ta meklÄÅ”anÄ).
Viens serveris satur informÄciju tikai par vienu fragmentu. TÄpÄc, lai meklÄtu pilnu indeksu, jums ir jÄmeklÄ astoÅos serveros, kas satur dažÄdas shards.
Serveri ir sagrupÄti klasteros. KatrÄ klasterÄ« ir astoÅas meklÄtÄjprogrammas un viens fragmentu serveris.
Fragmentu serveris palaiž atslÄgu vÄrtÄ«bu datu bÄzi ar statiskiem datiem. Tie nepiecieÅ”ami, lai izsniegtu dokumentus, piemÄram, aprakstu par kaÄ·i ar ÄÄ«kstÄtÄju. Dati tiek speciÄli pÄrsÅ«tÄ«ti uz atseviŔķu serveri, lai nenoslogotu meklÄÅ”anas serveru atmiÅu.
TÄ kÄ dokumentu ID ir unikÄli tikai vienÄ rÄdÄ«tÄjÄ, var rasties situÄcija, ka fragmentos nav dokumentu. Nu vai ka vienam ID bÅ«s cits saturs. TÄpÄc, lai meklÄÅ”ana darbotos un rezultÄti tiktu atgriezti, bija nepiecieÅ”ama konsekvence visÄ klasterÄ«. TÄlÄk es jums pastÄstÄ«Å”u, kÄ mÄs uzraugÄm konsekvenci.
Pati meklÄÅ”ana ir strukturÄta Å”Ädi: meklÄÅ”anas pieprasÄ«jums var nonÄkt jebkurÄ no astoÅiem serveriem. PieÅemsim, ka viÅÅ” ieradÄs serverÄ« 1. Å is serveris apstrÄdÄ visus argumentus un saprot, ko un kÄ meklÄt. AtkarÄ«bÄ no ienÄkoÅ”Ä pieprasÄ«juma serveris var veikt papildu pieprasÄ«jumus ÄrÄjiem dienestiem pÄc nepiecieÅ”amÄs informÄcijas. Vienam pieprasÄ«jumam var sekot lÄ«dz desmit pieprasÄ«jumiem ÄrÄjiem pakalpojumiem.
PÄc nepiecieÅ”amÄs informÄcijas apkopoÅ”anas sÄkas meklÄÅ”ana piedÄvÄjumu datu bÄzÄ. Lai to izdarÄ«tu, visiem astoÅiem klastera serveriem tiek veikti apakÅ”vaicÄjumi.
Kad atbildes ir saÅemtas, rezultÄti tiek apvienoti. Galu galÄ, lai Ä£enerÄtu rezultÄtus, fragmentu serverim var bÅ«t nepiecieÅ”ami vÄl vairÄki apakÅ”vaicÄjumi.
MeklÄÅ”anas vaicÄjumi klasterÄ« izskatÄs Å”Ädi: /shard1?text=dusmÄ«gs+kaÄ·is. TurklÄt veidlapas apakÅ”vaicÄjumi tiek pastÄvÄ«gi veikti starp visiem klastera serveriem reizi sekundÄ: /statuss.
Pretenzija /statuss konstatÄ situÄciju, kad serveris nav pieejams.
Tas arÄ« kontrolÄ, lai meklÄtÄjprogrammas versija un indeksa versija bÅ«tu vienÄda visos serveros, pretÄjÄ gadÄ«jumÄ klasterÄ« bÅ«s nekonsekventi dati.
Neskatoties uz to, ka viens fragmentu serveris apstrÄdÄ pieprasÄ«jumus no astoÅÄm meklÄtÄjprogrammÄm, tÄ procesors ir ļoti maz noslogots. TÄpÄc mÄs tagad pÄrsÅ«tÄm fragmenta datus uz atseviŔķu pakalpojumu.
Lai pÄrsÅ«tÄ«tu datus, mÄs ieviesÄm universÄlÄs atslÄgas dokumentiem. Tagad nav iespÄjama situÄcija, kad saturs no cita dokumenta tiek atgriezts, izmantojot vienu atslÄgu.
TaÄu pÄreja uz citu arhitektÅ«ru vÄl nav pabeigta. Tagad mÄs vÄlamies atbrÄ«voties no speciÄlÄ fragmentu servera. Un pÄc tam vispÄr attÄlinieties no klastera struktÅ«ras. Tas ļaus mums turpinÄt viegli mÄrogot. Papildu bonuss ir ievÄrojams dzelzs ietaupÄ«jums.
Un tagad pie baisiem stÄstiem ar laimÄ«gÄm beigÄm. ApskatÄ«sim vairÄkus servera nepieejamÄ«bas gadÄ«jumus.
Notika kaut kas Ŕausmīgs: viens serveris nav pieejams
PieÅemsim, ka viens serveris nav pieejams. PÄc tam atlikuÅ”ie klastera serveri var turpinÄt atbildÄt, taÄu meklÄÅ”anas rezultÄti bÅ«s nepilnÄ«gi.
Izmantojot statusa pÄrbaudi /statuss blakus esoÅ”ie serveri saprot, ka viens nav pieejams. TÄpÄc, lai saglabÄtu pilnÄ«gumu, visi klastera serveri pÄc pieprasÄ«juma /ping viÅi sÄk atbildÄt balansÄtÄjam, ka arÄ« viÅi nav pieejami. IzrÄdÄs, ka visi klastera serveri nomira (kas nav taisnÄ«ba). Tas ir mÅ«su klasteru shÄmas galvenais trÅ«kums ā tÄpÄc mÄs vÄlamies no tÄ atbrÄ«voties.
PieprasÄ«jumus, kas neizdodas ar kļūdu, balansÄtÄjs atkÄrtoti nosÅ«ta uz citiem serveriem.
BalsotÄjs arÄ« pÄrtrauc lietotÄju trafika sÅ«tÄ«Å”anu uz miruÅ”iem serveriem, bet turpina pÄrbaudÄ«t to statusu.
Kad serveris kļūst pieejams, tas sÄk reaÄ£Ät uz /ping. TiklÄ«dz sÄk saÅemt parastÄs atbildes uz ping no miruÅ”iem serveriem, balansÄtÄji sÄk sÅ«tÄ«t lietotÄju trafiku uz turieni. Klastera darbÄ«ba ir atjaunota, urrÄ.
VÄl sliktÄk: daudzi serveri nav pieejami
IevÄrojama daļa serveru datu centrÄ tiek izcirsti. Ko darÄ«t, kur skriet? BalsotÄjs atkal nÄk palÄ«gÄ. Katrs balansÄtÄjs pastÄvÄ«gi saglabÄ atmiÅÄ paÅ”reizÄjo reÄllaika serveru skaitu. Tas pastÄvÄ«gi aprÄÄ·ina maksimÄlo trafika apjomu, ko paÅ”reizÄjais datu centrs var apstrÄdÄt.
Kad daudzi datu centra serveri pazÅ«d, balansÄtÄjs saprot, ka Å”is datu centrs nevar apstrÄdÄt visu trafiku.
Tad lieko trafiku sÄk nejauÅ”i sadalÄ«t uz citiem datu centriem. Viss darbojas, visi ir apmierinÄti.
KÄ mÄs to darÄm: izlaidumu publicÄÅ”ana
Tagad parunÄsim par to, kÄ mÄs publicÄjam pakalpojumÄ veiktÄs izmaiÅas. Å eit mÄs esam izvÄlÄjuÅ”ies procesu vienkÄrÅ”oÅ”anas ceļu: jauna laidiena izlaiÅ”ana ir gandrÄ«z pilnÄ«bÄ automatizÄta.
Kad projektÄ tiek uzkrÄts noteikts skaits izmaiÅu, automÄtiski tiek izveidots jauns laidiens un sÄkas tÄ bÅ«vÄÅ”ana.
PÄc tam pakalpojums tiek izvÄrsts uz testÄÅ”anu, kurÄ tiek pÄrbaudÄ«ta darbÄ«bas stabilitÄte.
TajÄ paÅ”Ä laikÄ tiek uzsÄkta automÄtiskÄ veiktspÄjas pÄrbaude. To veic Ä«paÅ”s dienests. Es par to tagad nerunÄÅ”u - tÄ apraksts ir atseviŔķa raksta vÄrts.
Ja publicÄÅ”ana testÄÅ”anÄ ir veiksmÄ«ga, tiek automÄtiski sÄkta laidiena publicÄÅ”ana prestabilÄ. Prestable ir Ä«paÅ”s klasteris, kurÄ tiek novirzÄ«ta parasta lietotÄju trafika. Ja tas atgriež kļūdu, balansÄtÄjs atkÄrtoti pieprasa ražoÅ”anu.
PrestabilÄ tiek mÄrÄ«ts reakcijas laiks un salÄ«dzinÄts ar iepriekÅ”Äjo sÄrijveida versiju. Ja viss ir kÄrtÄ«bÄ, tad cilvÄks pieslÄdzas: pÄrbauda grafikus un slodzes pÄrbaudes rezultÄtus un tad sÄk izrullÄt uz ražoÅ”anu.
LietotÄjam tiek sniegts viss labÄkais: A/B testÄÅ”ana
Ne vienmÄr ir skaidrs, vai pakalpojuma izmaiÅas dos reÄlus ieguvumus. Lai novÄrtÄtu izmaiÅu lietderÄ«bu, cilvÄki nÄca klajÄ ar A/B testÄÅ”anu. Es jums nedaudz pastÄstÄ«Å”u par to, kÄ tas darbojas Yandex.Market meklÄÅ”anÄ.
Viss sÄkas ar jauna CGI parametra pievienoÅ”anu, kas nodroÅ”ina jaunu funkcionalitÄti. Ä»aujiet mÅ«su parametram bÅ«t: market_new_functionality=1. PÄc tam kodÄ mÄs iespÄjojam Å”o funkcionalitÄti, ja ir karogs:
If (cgi.experiments.market_new_functionality) {
// enable new functionality
}
Jauna funkcionalitÄte tiek ieviesta ražoÅ”anÄ.
Lai automatizÄtu A/B testÄÅ”anu, ir Ä«paÅ”s pakalpojums, kas sniedz detalizÄtu informÄciju
Var veikt vairÄkus eksperimentus vienlaikus. IestatÄ«jumos varat norÄdÄ«t, vai ir iespÄjama krustoÅ”anÄs ar citiem eksperimentiem.
RezultÄtÄ pakalpojums automÄtiski pievieno argumentu market_new_functionality=1 lÄ«dz 15% lietotÄju. Tas arÄ« automÄtiski aprÄÄ·ina atlasÄ«tos rÄdÄ«tÄjus. PÄc eksperimenta pabeigÅ”anas analÄ«tiÄ·i aplÅ«ko rezultÄtus un izdara secinÄjumus. Pamatojoties uz konstatÄjumiem, tiek pieÅemts lÄmums ieviest ražoÅ”anu vai pilnveidoÅ”anu.
Tirgus veiklÄ roka: testÄÅ”ana ražoÅ”anÄ
Bieži gadÄs, ka jums ir jÄpÄrbauda jaunas funkcionalitÄtes darbÄ«ba ražoÅ”anÄ, taÄu neesat pÄrliecinÄts, kÄ tÄ uzvedÄ«sies ākaujasā apstÄkļos pie lielas slodzes.
Ir risinÄjums: karogus CGI parametros var izmantot ne tikai A/B testÄÅ”anai, bet arÄ« jaunas funkcionalitÄtes testÄÅ”anai.
MÄs izveidojÄm rÄ«ku, kas ļauj nekavÄjoties mainÄ«t konfigurÄciju tÅ«kstoÅ”iem serveru, nepakļaujot pakalpojumu riskam. To sauc Stop Tap. SÄkotnÄjÄ ideja bija Ätri atspÄjot kÄdu funkcionalitÄti bez izkÄrtojuma. PÄc tam rÄ«ks paplaÅ”inÄjÄs un kļuva sarežģītÄks.
Pakalpojuma plÅ«smas diagramma ir parÄdÄ«ta zemÄk:
Karoga vÄrtÄ«bas tiek iestatÄ«tas, izmantojot API. PÄrvaldÄ«bas pakalpojums saglabÄ Å”Ä«s vÄrtÄ«bas datu bÄzÄ. Visi serveri dodas uz datu bÄzi reizi desmit sekundÄs, izsÅ«knÄ karoga vÄrtÄ«bas un piemÄro Ŕīs vÄrtÄ«bas katram pieprasÄ«jumam.
ApturÄÅ”anas pieskÄrienÄ varat iestatÄ«t divu veidu vÄrtÄ«bas:
1) NosacÄ«juma izteiksmes. Lietot, ja viena no vÄrtÄ«bÄm ir patiesa. PiemÄram:
{
"condition":"IS_DC1",
"value":"3",
},
{
"condition": "CLUSTER==2 and IS_BERU",
"value": "4!"
}
VÄrtÄ«ba "3" tiks piemÄrota, kad pieprasÄ«jums tiks apstrÄdÄts vietÄ DC1. Un vÄrtÄ«ba ir ā4ā, kad pieprasÄ«jums tiek apstrÄdÄts otrajÄ vietnes beru.ru klasterÄ«.
2) BeznosacÄ«juma vÄrtÄ«bas. Lietot pÄc noklusÄjuma, ja nav izpildÄ«ts neviens no nosacÄ«jumiem. PiemÄram:
vÄrtÄ«ba, vÄrtÄ«ba!
Ja vÄrtÄ«ba beidzas ar izsaukuma zÄ«mi, tai tiek pieŔķirta augstÄka prioritÄte.
CGI parametru parsÄtÄjs parsÄ URL. PÄc tam tiek lietotas vÄrtÄ«bas no Stop Tap.
Tiek piemÄrotas vÄrtÄ«bas ar Å”ÄdÄm prioritÄtÄm:
- Ar paaugstinÄtu prioritÄti no Stop Tap (izsaukuma zÄ«me).
- PieprasÄ«juma vÄrtÄ«ba.
- NoklusÄjuma vÄrtÄ«ba no ApturÄt pieskÄrienu.
- NoklusÄjuma vÄrtÄ«ba kodÄ.
Ir daudz karogu, kas norÄdÄ«ti nosacÄ«tÄs vÄrtÄ«bÄs - ar tiem pietiek visiem mums zinÄmajiem scenÄrijiem:
- Datu centrs.
- Vide: ražoÅ”ana, testÄÅ”ana, Äna.
- Norises vieta: tirgus, beru.
- Klastera numurs.
Izmantojot Å”o rÄ«ku, jÅ«s varat iespÄjot jaunu funkcionalitÄti noteiktÄ serveru grupÄ (piemÄram, tikai vienÄ datu centrÄ) un pÄrbaudÄ«t Ŕīs funkcionalitÄtes darbÄ«bu bez Ä«paÅ”a riska visam pakalpojumam. Pat ja kaut kur pieļÄvÄt nopietnu kļūdu, viss sÄka krist un nogÄzÄs viss datu centrs, balansÄtÄji pÄradresÄs pieprasÄ«jumus uz citiem datu centriem. GalalietotÄji neko nepamanÄ«s.
Ja pamanÄt problÄmu, varat nekavÄjoties atgriezt karoga iepriekÅ”Äjo vÄrtÄ«bu, un izmaiÅas tiks atceltas.
Å im pakalpojumam ir arÄ« savi mÄ«nusi: izstrÄdÄtÄji to ļoti mÄ«l un bieži cenÅ”as visas izmaiÅas iespiest Stop Tap. MÄs cenÅ”amies cÄ«nÄ«ties pret ļaunprÄtÄ«gu izmantoÅ”anu.
Stop Tap pieeja darbojas labi, ja jums jau ir stabils kods, kas ir gatavs ievieÅ”anai ražoÅ”anÄ. TajÄ paÅ”Ä laikÄ jums joprojÄm ir Å”aubas, un jÅ«s vÄlaties pÄrbaudÄ«t kodu ākaujasā apstÄkļos.
TomÄr Stop Tap nav piemÄrots testÄÅ”anai izstrÄdes laikÄ. IzstrÄdÄtÄjiem ir atseviŔķs klasteris, ko sauc par āÄnu kopuā.
SlepenÄ pÄrbaude: Änu kopa
PieprasÄ«jumi no vienas no kopÄm tiek dublÄti Änu klasterÄ«. Bet lÄ«dzsvarotÄjs pilnÄ«bÄ ignorÄ atbildes no Ŕī klastera. TÄs darbÄ«bas shÄma ir parÄdÄ«ta zemÄk.
MÄs iegÅ«stam testa kopu, kas atrodas reÄlos ākaujasā apstÄkļos. Tur iet parasta lietotÄju trafika. AparatÅ«ra abos klasteros ir vienÄda, tÄpÄc veiktspÄju un kļūdas var salÄ«dzinÄt.
TÄ kÄ balansÄtÄjs pilnÄ«bÄ ignorÄ atbildes, galalietotÄji neredzÄs atbildes no Änu kopas. TÄpÄc nav biedÄjoÅ”i kļūdÄ«ties.
Atzinumi
TÄtad, kÄ mÄs izveidojÄm tirgus meklÄÅ”anu?
Lai viss noritÄtu gludi, funkcionalitÄti sadalÄm atseviŔķos pakalpojumos. TÄdÄ veidÄ mÄs varam mÄrogot tikai tos komponentus, kas mums ir nepiecieÅ”ami, un padarÄ«t komponentus vienkÄrÅ”Äkus. AtseviŔķu komponentu ir viegli pieŔķirt citai komandai un dalÄ«t atbildÄ«bu par darbu pie tÄ. Un ievÄrojams dzelzs ietaupÄ«jums ar Å”o pieeju ir acÄ«mredzams plus.
Mums palÄ«dz arÄ« Änu klasteris: varam izstrÄdÄt pakalpojumus, testÄt tos procesÄ un netraucÄt lietotÄjam.
Nu, protams, testÄÅ”ana ražoÅ”anÄ. Vai ir jÄmaina konfigurÄcija tÅ«kstoÅ”iem serveru? VienkÄrÅ”i izmantojiet Stop Tap. TÄdÄ veidÄ jÅ«s varat nekavÄjoties ieviest gatavu komplekso risinÄjumu un atgriezties pie stabilas versijas, ja rodas problÄmas.
Es ceru, ka man izdevÄs parÄdÄ«t, kÄ mÄs padarÄm tirgu Ätru un stabilu, izmantojot arvien pieaugoÅ”o piedÄvÄjumu bÄzi. KÄ mÄs risinÄm servera problÄmas, tiekam galÄ ar milzÄ«gu pieprasÄ«jumu skaitu, uzlabojam servisa elastÄ«bu un to darÄm, nepÄrtraucot darba procesus.
Avots: www.habr.com