Kā darbojas Yandex.Market meklÄ“Å”ana un kas notiek, ja kāds no serveriem neizdodas

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.

Kā darbojas Yandex.Market meklÄ“Å”ana un kas notiek, ja kāds no serveriem neizdodas

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.

Kā darbojas Yandex.Market meklÄ“Å”ana un kas notiek, ja kāds no serveriem neizdodas

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ā:
Kā darbojas Yandex.Market meklÄ“Å”ana un kas notiek, ja kāds no serveriem neizdodas
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 market.yandex.ru izraisa daudz apakÅ”vaicājumu, un to apstrādē ir iesaistÄ«ti desmitiem pakalpojumu. Diagrammā parādÄ«ti tikai daži:

Kā darbojas Yandex.Market meklÄ“Å”ana un kas notiek, ja kāds no serveriem neizdodas
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:

Kā darbojas Yandex.Market meklÄ“Å”ana un kas notiek, ja kāds no serveriem neizdodas

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:

Kā darbojas Yandex.Market meklÄ“Å”ana un kas notiek, ja kāds no serveriem neizdodas

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:

Kā darbojas Yandex.Market meklÄ“Å”ana un kas notiek, ja kāds no serveriem neizdodas
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.

Kā darbojas Yandex.Market meklÄ“Å”ana un kas notiek, ja kāds no serveriem neizdodas
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.

Kā darbojas Yandex.Market meklÄ“Å”ana un kas notiek, ja kāds no serveriem neizdodas
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.

Kā darbojas Yandex.Market meklÄ“Å”ana un kas notiek, ja kāds no serveriem neizdodas

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.

Kā darbojas Yandex.Market meklÄ“Å”ana un kas notiek, ja kāds no serveriem neizdodas

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ā darbojas Yandex.Market meklÄ“Å”ana un kas notiek, ja kāds no serveriem neizdodas

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.

Kā darbojas Yandex.Market meklÄ“Å”ana un kas notiek, ja kāds no serveriem neizdodas

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 Å”eit aprakstÄ«ts. Pakalpojumā tiek izveidots eksperiments. Trafika daļa ir iestatÄ«ta, piemēram, 15%. Procenti tiek iestatÄ«ti nevis vaicājumiem, bet lietotājiem. Tiek norādÄ«ts arÄ« eksperimenta ilgums, piemēram, nedēļa.

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:

Kā darbojas Yandex.Market meklÄ“Å”ana un kas notiek, ja kāds no serveriem neizdodas

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:

  1. Ar paaugstinātu prioritāti no Stop Tap (izsaukuma zīme).
  2. Pieprasījuma vērtība.
  3. Noklusējuma vērtība no Apturēt pieskārienu.
  4. 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.

Kā darbojas Yandex.Market meklÄ“Å”ana un kas notiek, ja kāds no serveriem neizdodas

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

Pievieno komentāru