Kif aħna fis-CIAN tajna terabytes ta’ zkuk

Kif aħna fis-CIAN tajna terabytes ta’ zkuk

Hello kulħadd, jien jisimni Alexander, naħdem f'CIAN bħala inġinier u jien involut fl-amministrazzjoni tas-sistema u l-awtomazzjoni tal-proċessi tal-infrastruttura. Fil-kummenti għal wieħed mill-artikoli preċedenti, ġejna mitluba ngħidu minn fejn nikbru 4 TB ta 'zkuk kuljum u x'nagħmlu magħhom. Iva, għandna ħafna zkuk, u nħoloq raggruppament separat tal-infrastruttura biex jipproċessahom, li jippermettilna nsolvu l-problemi malajr. F'dan l-artikolu ser nitkellem dwar kif adattajna tul sena biex naħdmu bi fluss ta' dejta li dejjem jikber.

Minn fejn bdejna?

Kif aħna fis-CIAN tajna terabytes ta’ zkuk

Matul l-aħħar ftit snin, it-tagħbija fuq cian.ru kibret malajr ħafna, u sat-tielet kwart tal-2018, it-traffiku tar-riżorsi laħaq 11.2 miljun utent uniku kull xahar. Dak iż-żmien, f'mumenti kritiċi tlifna sa 40% tar-zkuk, u għalhekk ma stajniex nittrattaw malajr l-inċidenti u qattajna ħafna ħin u sforz biex insolvuhom. Aħna wkoll ħafna drabi ma stajniex insibu l-kawża tal-problema, u din terġa 'tiġri wara xi żmien. Kien infern u xi ħaġa kellha ssir dwar dan.

F'dak iż-żmien, użajna raggruppament ta '10 nodi tad-dejta b'ElasticSearch verżjoni 5.5.2 b'settings ta' indiċi standard biex naħżnu zkuk. Ġie introdott aktar minn sena ilu bħala soluzzjoni popolari u affordabbli: allura l-fluss ta 'zkuk ma kienx daqshekk kbir, ma kien hemm ebda skop li toħroġ b'konfigurazzjonijiet mhux standard. 

L-ipproċessar ta’ zkuk li deħlin ġie pprovdut minn Logstash fuq portijiet differenti fuq ħames koordinaturi ElasticSearch. Indiċi wieħed, irrispettivament mid-daqs, kien jikkonsisti f'ħames shards. Ġiet organizzata rotazzjoni kull siegħa u kuljum, bħala riżultat, madwar 100 shards ġodda dehru fil-cluster kull siegħa. Filwaqt li ma kienx hemm ħafna zkuk, ir-raggruppament laħaq tajjeb u ħadd ma ta kas lis-settings tiegħu. 

L-isfidi tat-tkabbir mgħaġġel

Il-volum ta' zkuk iġġenerati kiber malajr ħafna, hekk kif żewġ proċessi ikkoinċidew lil xulxin. Min-naħa waħda, in-numru ta’ utenti tas-servizz kiber. Min-naħa l-oħra, bdejna naqilbu b'mod attiv għal arkitettura ta 'mikroservizz, billi nsiru l-monoliti qodma tagħna f'C# u Python. Diversi għexieren ta' mikroservizzi ġodda li ħadu post partijiet tal-monolith iġġeneraw b'mod sinifikanti aktar zkuk għall-cluster infrastrutturali. 

Kien l-iskala li wasslitna sal-punt fejn il-cluster sar prattikament mhux maniġġabbli. Meta z-zkuk bdew jaslu b'rata ta '20 elf messaġġ kull sekonda, rotazzjoni frekwenti inutli żiedet in-numru ta' shards għal 6 elf, u kien hemm aktar minn 600 shards għal kull node. 

Dan wassal għal problemi bl-allokazzjoni ta 'RAM, u meta node ġġarraf, il-frak kollha bdew jiċċaqilqu simultanjament, immultiplika t-traffiku u tagħbija nodi oħra, li għamilha kważi impossibbli li tikteb id-dejta fil-cluster. U matul dan il-perjodu konna tħallew mingħajr zkuk. U jekk kien hemm problema bis-server, bażikament tlifna 1/10 tal-cluster. Numru kbir ta 'indiċi żgħar żiedu l-kumplessità.

Mingħajr zkuk, aħna ma fhimniex ir-raġunijiet għall-inċident u llum jew għada stajna nerġgħu ngħaddu fuq l-istess rake, u fl-ideoloġija tat-tim tagħna dan kien inaċċettabbli, peress li l-mekkaniżmi kollha tax-xogħol tagħna huma mfassla biex jagħmlu l-oppost - qatt ma tirrepeti l-istess problemi. Biex nagħmlu dan, kellna bżonn il-volum sħiħ ta 'zkuk u l-kunsinna tagħhom kważi f'ħin reali, peress li tim ta' inġiniera fuq ix-xogħol immonitorja t-twissijiet mhux biss minn metriċi, iżda wkoll minn zkuk. Biex tifhem l-iskala tal-problema, dak iż-żmien il-volum totali ta 'zkuk kien ta' madwar 2 TB kuljum. 

Aħna stabbilixxew mira li neliminaw kompletament it-telf ta 'zkuk u nnaqqsu l-ħin tal-kunsinna tagħhom lill-cluster ELK għal massimu ta' 15-il minuta waqt forza maġġuri (aktar tard bbażajna fuq din iċ-ċifra bħala KPI intern).

Mekkaniżmu ġdid ta 'rotazzjoni u nodi sħun-sħan

Kif aħna fis-CIAN tajna terabytes ta’ zkuk

Bdejna l-konverżjoni tal-cluster billi aġġornaw il-verżjoni ElasticSearch minn 5.5.2 għal 6.4.3. Għal darb'oħra l-cluster tal-verżjoni 5 tagħna miet, u ddeċidejna li titfiha u naġġornaha kompletament - għad m'hemmx zkuk. Allura għamilna din it-tranżizzjoni fi ftit sigħat biss.

L-aktar trasformazzjoni fuq skala kbira f'dan l-istadju kienet l-implimentazzjoni ta 'Apache Kafka fuq tliet nodi b'koordinatur bħala buffer intermedju. Is-sensar tal-messaġġi salvana milli nitilfu zkuk waqt problemi b'ElasticSearch. Fl-istess ħin, żidna 2 nodi mal-cluster u qalbu għal arkitettura sħuna bi tliet nodi "sħan" li jinsabu fi xtillieri differenti fiċ-ċentru tad-dejta. Aħna dderieġajna zkuk lejhom billi tuża maskra li m'għandha tintilef taħt l-ebda ċirkostanza - nginx, kif ukoll zkuk ta 'żbalji ta' applikazzjoni. Zkuk minuri ntbagħtu lin-nodi li kien fadal - debug, twissija, eċċ., U wara 24 siegħa, ġew trasferiti zkuk "importanti" minn nodi "sħan".

Sabiex ma nżidux in-numru ta 'indiċi żgħar, aħna qalbu minn rotazzjoni tal-ħin għall-mekkaniżmu ta' qlib. Kien hemm ħafna informazzjoni fuq il-fora li r-rotazzjoni skont id-daqs tal-indiċi hija inaffidabbli ħafna, għalhekk iddeċidejna li nużaw rotazzjoni bin-numru ta 'dokumenti fl-indiċi. Aħna analizzajna kull indiċi u rreġistrajna n-numru ta 'dokumenti li warajhom ir-rotazzjoni għandha taħdem. Għalhekk, ilħaqna l-aħjar daqs ta 'shard - mhux aktar minn 50 GB. 

Ottimizzazzjoni tal-cluster

Kif aħna fis-CIAN tajna terabytes ta’ zkuk

Madankollu, aħna ma ltqajna kompletament mill-problemi. Sfortunatament, indiċijiet żgħar xorta dehru: ma laħqux il-volum speċifikat, ma ġewx imdawra, u tħassru permezz ta 'tindif globali ta' indiċijiet eqdem minn tlett ijiem, peress li neħħejna r-rotazzjoni skond id-data. Dan wassal għal telf ta 'dejta minħabba l-fatt li l-indiċi mill-cluster sparixxa għal kollox, u tentattiv biex tikteb fuq indiċi ineżistenti kisser il-loġika tal-kuratur li użajna għall-ġestjoni. Alias ​​​​għall-kitba ġie kkonvertit f'indiċi u kiser il-loġika tal-qlib, u kkawża tkabbir mhux ikkontrollat ​​ta 'xi indiċi sa 600 GB. 

Pereżempju, għall-konfigurazzjoni tar-rotazzjoni:

сurator-elk-rollover.yaml

---
actions:
  1:
    action: rollover
    options:
      name: "nginx_write"
      conditions:
        max_docs: 100000000
  2:
    action: rollover
    options:
      name: "python_error_write"
      conditions:
        max_docs: 10000000

Jekk ma kien hemm l-ebda alias tal-qlib, seħħ żball:

ERROR     alias "nginx_write" not found.
ERROR     Failed to complete action: rollover.  <type 'exceptions.ValueError'>: Unable to perform index rollover with alias "nginx_write".

Ħallna s-soluzzjoni għal din il-problema għall-iterazzjoni li jmiss u ħadna kwistjoni oħra: aħna qalbu għal-loġika tal-ġibda ta 'Logstash, li tipproċessa zkuk deħlin (tneħħi informazzjoni mhux meħtieġa u tarrikkixxi). Poġġejna f'docker, li nniedu permezz ta 'docker-compose, u poġġiejna wkoll logstash-exporter hemmhekk, li jibgħat metriċi lil Prometheus għall-monitoraġġ operattiv tal-fluss ta' log. B'dan il-mod tajna lilna nfusna l-opportunità li nbiddlu bla xkiel in-numru ta' każijiet ta' logstash responsabbli għall-ipproċessar ta' kull tip ta' log.

Waqt li konna ntejbu l-cluster, it-traffiku ta 'cian.ru żdied għal 12,8 miljun utent uniku kull xahar. Bħala riżultat, irriżulta li t-trasformazzjonijiet tagħna kienu ftit wara l-bidliet fil-produzzjoni, u konna ffaċċjati bil-fatt li n-nodi "sħan" ma setgħux ilaħħqu mat-tagħbija u naqsu l-kunsinna kollha ta 'zkuk. Irċevejna dejta "taħraq" mingħajr fallimenti, iżda kellna nintervjenu fit-twassil tal-bqija u nagħmlu qlib manwali sabiex nqassmu l-indiċijiet b'mod ugwali. 

Fl-istess ħin, l-iskala u t-tibdil tas-settings tal-istanzi tal-logstash fil-cluster kien ikkumplikat mill-fatt li kien docker-compose lokali, u l-azzjonijiet kollha saru manwalment (biex iżżid truf ġodda, kien meħtieġ li tgħaddi manwalment minn kollox. is-servers u docker-compose up -d kullimkien).

Ridistribuzzjoni tal-log

F'Settembru ta 'din is-sena, konna għadna naqtgħu l-monolith, it-tagħbija fuq il-cluster kienet qed tiżdied, u l-fluss ta' zkuk kien qed joqrob 30 elf messaġġ kull sekonda. 

Kif aħna fis-CIAN tajna terabytes ta’ zkuk

Bdejna l-iterazzjoni li jmiss b'aġġornament tal-ħardwer. Qlibna minn ħames koordinaturi għal tlieta, ssostitwijna n-nodi tad-dejta u rbaħna f’termini ta’ flus u spazju għall-ħażna. Għal nodi nużaw żewġ konfigurazzjonijiet: 

  • Għal nodi "sħan": E3-1270 v6 / 960Gb SSD / 32 Gb x 3 x 2 (3 għal Hot1 u 3 għal Hot2).
  • Għal nodi "sħan": E3-1230 v6 / 4Tb SSD / 32 Gb x 4.

F'din l-iterazzjoni, ċċaqlaqna l-indiċi b'logs ta 'aċċess ta' mikroservizzi, li jieħu l-istess spazju bħas-zkuk nginx ta 'quddiem, għat-tieni grupp ta' tliet nodi "sħan". Aħna issa naħżnu data fuq nodi "sħan" għal 20 siegħa, u mbagħad tittrasferihom għal nodi "sħan" għall-bqija tar-zkuk. 

Solvejna l-problema ta 'indiċi żgħar li jisparixxu billi kkonfigurajna mill-ġdid ir-rotazzjoni tagħhom. Issa l-indiċijiet huma mdawra kull 23 siegħa fi kwalunkwe każ, anke jekk hemm ftit dejta hemmhekk. Dan żied ftit in-numru ta 'shards (kien hemm madwar 800 minnhom), iżda mil-lat tal-prestazzjoni tal-clusters huwa tollerabbli. 

Bħala riżultat, kien hemm sitt nodi "sħan" u biss erba '"sħun" fil-cluster. Dan jikkawża dewmien żgħir fuq it-talbiet fuq intervalli ta 'żmien twal, iżda ż-żieda fin-numru ta' nodi fil-futur issolvi din il-problema.

Din l-iterazzjoni ffissat ukoll il-problema tan-nuqqas ta 'skala semi-awtomatika. Biex nagħmlu dan, użajna cluster Nomad infrastrutturali - simili għal dak li diġà wżajna fil-produzzjoni. Għalissa, l-ammont ta 'Logstash ma jinbidelx awtomatikament skont it-tagħbija, iżda se naslu għal dan.

Kif aħna fis-CIAN tajna terabytes ta’ zkuk

Pjanijiet għall-futur

Il-konfigurazzjoni implimentata tiskala perfettament, u issa naħżnu 13,3 TB ta 'dejta - ir-reġistri kollha għal ġranet 4, li huwa meħtieġ għall-analiżi ta' emerġenza ta 'twissijiet. Aħna nikkonvertiw xi wħud mir-zkuk f'metriċi, li aħna nżidu l-Graphite. Biex tagħmel ix-xogħol tal-inġiniera aktar faċli, għandna metriċi għall-cluster tal-infrastruttura u skripts għal tiswija semi-awtomatika ta 'problemi komuni. Wara li nżidu n-numru ta 'nodi tad-dejta, li huwa ppjanat għas-sena d-dieħla, se naqilbu għall-ħażna tad-dejta minn 4 sa 7 ijiem. Dan ikun biżżejjed għal xogħol operattiv, peress li dejjem nippruvaw ninvestigaw l-inċidenti kemm jista 'jkun malajr, u għal investigazzjonijiet fit-tul hemm data tat-telemetrija. 

F'Ottubru 2019, it-traffiku lejn cian.ru kien diġà kiber għal 15,3 miljun utent uniku fix-xahar. Dan sar test serju tas-soluzzjoni arkitettonika għall-kunsinna taz-zkuk. 

Issa qed nippreparaw biex naġġornaw ElasticSearch għall-verżjoni 7. Madankollu, għal dan se jkollna naġġornaw l-immappjar ta 'ħafna indiċi f'ElasticSearch, peress li mxew mill-verżjoni 5.5 u ġew iddikjarati bħala deprecati fil-verżjoni 6 (sempliċement ma jeżistux fil-verżjoni 7). Dan ifisser li matul il-proċess ta 'aġġornament żgur li se jkun hemm xi tip ta' force majeure, li tħallina mingħajr zkuk waqt li l-kwistjoni tiġi solvuta. Tal-verżjoni 7, aħna l-aktar ħerqana għal Kibana b'interface mtejba u filtri ġodda. 

Ksibna l-għan ewlieni tagħna: waqafna nitilfu zkuk u naqqasna l-perijodi ta’ waqfien tal-cluster tal-infrastruttura minn 2-3 ħabtiet fil-ġimgħa għal ftit sigħat ta’ xogħol ta’ manutenzjoni fix-xahar. Dan ix-xogħol kollu fil-produzzjoni huwa kważi inviżibbli. Madankollu, issa nistgħu niddeterminaw eżattament x'qed jiġri bis-servizz tagħna, nistgħu nagħmluh malajr f'mod kwiet u ma ninkwetawx li r-zkuk jintilfu. B'mod ġenerali, aħna sodisfatti, kuntenti u nippreparaw għal sfruttamenti ġodda, li se nitkellmu dwarhom aktar tard.

Sors: www.habr.com

Żid kumment