Fittex b'veloċità ta '1 TB/s

TL;DR: Erba' snin ilu tlaqt minn Google b'idea għal għodda ġdida ta' monitoraġġ tas-server. L-idea kienet li tgħaqqad funzjonijiet normalment iżolati f'servizz wieħed ġbir u analiżi ta’ log, ġbir ta’ metriċi, twissijiet u dashboards. Wieħed mill-prinċipji huwa li s-servizz għandu jkun tassew malajr, jipprovdu lid-devops b'esperjenza faċli, interattiva u pjaċevoli. Dan jeħtieġ l-ipproċessar ta' settijiet ta' dejta b'ħafna gigabyte fi frazzjonijiet ta' sekonda filwaqt li jibqgħu fil-baġit. Għodod eżistenti għall-ġestjoni taz-zkuk spiss ikunu bil-mod u goff, għalhekk konna ffaċċjati bi sfida tajba: niddisinjaw b'mod intelliġenti għodda biex tagħti lill-utenti esperjenza ġdida.

Dan l-artikolu jiddeskrivi kif aħna f'Scalyr solvejna din il-problema billi applikajna metodi ta 'skola antika, approċċ ta' forza bruta, eliminajna saffi mhux meħtieġa u nevitaw strutturi ta 'dejta kumplessi. Tista' tapplika dawn il-lezzjonijiet għall-problemi tal-inġinerija tiegħek stess.

Qawwa tal-Iskola Qadima

L-analiżi tal-log normalment tibda bi tfittxija: sib il-messaġġi kollha li jaqblu ma 'ċertu mudell. Fi Scalyr, dawn huma għexieren jew mijiet ta 'gigabytes ta' zkuk minn ħafna servers. Approċċi moderni, bħala regola, jinvolvu l-kostruzzjoni ta 'xi struttura ta' data kumplessa ottimizzata għat-tfittxija. Ċertament rajt dan fuq Google, fejn huma pjuttost tajbin f'dan it-tip ta 'ħaġa. Imma qagħdna fuq approċċ ferm aktar mhux raffinat: skanjar lineari ta 'zkuk. U ħadem - aħna nipprovdu interface li jista 'jitfittex li huwa ordnijiet ta' kobor aktar mgħaġġel mill-kompetituri tagħna (ara l-animazzjoni fl-aħħar).

L-għarfien ewlieni kien li l-proċessuri moderni huma tabilħaqq veloċi ħafna f'operazzjonijiet sempliċi u sempliċi. Dan huwa faċli li jintilef f'sistemi kumplessi b'ħafna saffi li jiddependu fuq il-veloċità tal-I/O u l-operazzjonijiet tan-netwerk, u sistemi bħal dawn huma komuni ħafna llum. Allura żviluppajna disinn li jimminimizza saffi u debris żejjed. B'diversi proċessuri u servers b'mod parallel, il-veloċità tat-tfittxija tilħaq 1 TB kull sekonda.

Aspetti ewlenin minn dan l-artikolu:

  • It-tfittxija b'forza bruta hija approċċ vijabbli biex issolvi problemi fid-dinja reali u fuq skala kbira.
  • Il-forza bruta hija teknika tad-disinn, mhux soluzzjoni mingħajr xogħol. Bħal kull teknika, hija adattata aħjar għal xi problemi minn oħrajn, u tista 'tiġi implimentata ħażin jew tajjeb.
  • Il-forza bruta hija speċjalment tajba għall-kisba stabbli prestazzjoni.
  • L-użu effettiv tal-forza bruta jeħtieġ l-ottimizzazzjoni tal-kodiċi u l-applikazzjoni ta 'riżorsi suffiċjenti fil-ħin it-tajjeb. Huwa adattat jekk is-servers tiegħek huma taħt tagħbija kbira mhux tal-utent u l-operazzjonijiet tal-utent jibqgħu prijorità.
  • Il-prestazzjoni tiddependi fuq id-disinn tas-sistema kollha, mhux biss l-algoritmu tal-linja ta 'ġewwa.

(Dan l-artikolu jiddeskrivi t-tiftix għal dejta fil-memorja. Fil-biċċa l-kbira tal-każijiet, meta utent iwettaq tfittxija fil-log, is-servers Scalyr diġà ħaduha fil-cache. L-artikolu li jmiss se jiddiskuti t-tiftix għal zkuk mhux fil-cache. Japplikaw l-istess prinċipji: kodiċi effiċjenti, forza bruta b’riżorsi komputazzjonali kbar).

Metodu tal-forza bruta

Tradizzjonalment, sett kbir ta' dejta jitfittex bl-użu ta' indiċi ta' keyword. Meta applikat għal zkuk tas-server, dan ifisser tiftix għal kull kelma unika fil-log. Għal kull kelma, trid tagħmel lista tal-inklużjonijiet kollha. Dan jagħmilha faċli biex issib il-messaġġi kollha b'din il-kelma, pereżempju 'żball', 'firefox' jew "transaction_16851951" - ara biss fl-indiċi.

Jien użajt dan l-approċċ fuq Google u ħadmet tajjeb. Imma fi Scalyr infittxu z-zkuk byte b'byte.

Għaliex? Mil-lat algoritmiku astratt, l-indiċi tal-kliem kjavi huma ħafna aktar effiċjenti mit-tfittxijiet tal-forza bruta. Madankollu, aħna ma nbigħux algoritmi, aħna nbiegħu prestazzjoni. U l-prestazzjoni mhix biss dwar algoritmi, iżda wkoll dwar l-inġinerija tas-sistemi. Irridu nikkunsidraw kollox: il-volum tad-dejta, it-tip ta’ tfittxija, il-kuntest tal-ħardwer u tas-software disponibbli. Iddeċidejna li għall-problema partikolari tagħna, xi ħaġa bħal 'grep' kienet adattata aħjar minn indiċi.

L-indiċi huma kbar, iżda għandhom limitazzjonijiet. Kelma waħda hija faċli biex issibha. Iżda t-tiftix għal messaġġi bi kliem multipli, bħal 'googlebot' u '404', huwa ħafna aktar diffiċli. It-tfittxija għal frażi bħal 'eċċezzjoni mhux maqbuda' teħtieġ indiċi aktar ingombranti li jirreġistra mhux biss il-messaġġi kollha b'dik il-kelma, iżda wkoll il-post speċifiku tal-kelma.

Id-diffikultà reali tiġi meta ma tkunx qed tfittex kliem. Ejja ngħidu li trid tara kemm qed jiġi traffiku mill-bots. L-ewwel ħsieb huwa li tfittex fil-zkuk għall-kelma 'bot'. Hekk issib xi bots: Googlebot, Bingbot u ħafna oħrajn. Imma hawn 'bot' mhix kelma, iżda parti minnha. Jekk infittxu 'bot' fl-indiċi, ma nsibu l-ebda post bil-kelma 'Googlebot'. Jekk tiċċekkja kull kelma fl-indiċi u mbagħad tiskennja l-indiċi għall-kliem kjavi misjuba, it-tfittxija tonqos ħafna. Bħala riżultat, xi programmi log ma jippermettux tfittxijiet parzjali jew (fl-aħjar) jippermettu sintassi speċjali b'rendiment aktar baxx. Irridu nevitaw dan.

Problema oħra hija l-punteġġjatura. Tixtieq issib it-talbiet kollha minn 50.168.29.7? Xi ngħidu dwar id-debugging zkuk li fihom [error]? Is-sottoskritti normalment jaqbżu l-punteġġjatura.

Fl-aħħarnett, l-inġiniera jħobbu għodda qawwija, u xi drabi problema tista 'tiġi solvuta biss b'espressjoni regolari. L-indiċi tal-kliem kjavi mhux adattat ħafna għal dan.

Barra minn hekk, l-indiċi kumpless. Kull messaġġ jeħtieġ li jiġi miżjud ma 'diversi listi ta' keyword. Dawn il-listi għandhom jinżammu f'format li jista' jitfittex faċilment il-ħin kollu. Mistoqsijiet bi frażijiet, frammenti ta 'kliem, jew espressjonijiet regolari jeħtieġ li jiġu tradotti f'operazzjonijiet ta' multi-listi, u r-riżultati skennjati u kkombinati biex jipproduċu sett ta 'riżultati. Fil-kuntest ta 'servizz fuq skala kbira, b'ħafna kerrejja, din il-kumplessità toħloq kwistjonijiet ta' prestazzjoni li mhumiex viżibbli meta jiġu analizzati l-algoritmi.

L-indiċi tal-kliem kjavi wkoll jieħdu ħafna spazju, u l-ħażna hija spiża kbira f'sistema ta 'ġestjoni ta' zkuk.

Min-naħa l-oħra, kull tfittxija tista 'tikkonsma ħafna qawwa tal-kompjuter. L-utenti tagħna japprezzaw tfittxijiet b'veloċità għolja għal mistoqsijiet uniċi, iżda mistoqsijiet bħal dawn isiru relattivament rari. Għal mistoqsijiet ta 'tfittxija tipiċi, pereżempju, għal dashboard, nużaw tekniki speċjali (se niddeskrivuhom fl-artiklu li jmiss). Talbiet oħra huma rari biżżejjed li rari jkollok tipproċessa aktar minn waħda kull darba. Iżda dan ma jfissirx li s-servers tagħna mhumiex okkupati: huma okkupati bil-ħidma li jirċievu, janalizzaw u jikkompressaw messaġġi ġodda, jevalwaw twissijiet, jikkompressaw data antika, eċċ. Għalhekk, għandna provvista pjuttost sinifikanti ta 'proċessuri li jistgħu jintużaw biex tesegwixxi mistoqsijiet.

Il-forza bruta taħdem jekk għandek problema bruta (u ħafna forza)

Il-forza bruta taħdem l-aħjar fuq problemi sempliċi b'linji interni żgħar. Ħafna drabi tista 'tottimizza l-linja interna biex taħdem b'veloċitajiet għoljin ħafna. Jekk il-kodiċi huwa kumpless, huwa ħafna aktar diffiċli li jiġi ottimizzat.

Il-kodiċi tat-tfittxija tagħna oriġinarjament kellu linja interna pjuttost kbira. Aħna naħżnu messaġġi fuq paġni f'4K; kull paġna fiha xi messaġġi (f'UTF-8) u metadata għal kull messaġġ. Il-metadejta hija struttura li tikkodifika t-tul tal-valur, l-ID tal-messaġġ intern, u oqsma oħra. Iċ-ċiklu tat-tfittxija deher bħal dan:

Fittex b'veloċità ta '1 TB/s

Din hija verżjoni simplifikata tal-kodiċi attwali. Iżda anke hawn, tqegħid ta 'oġġetti multipli, kopji tad-dejta, u sejħiet ta' funzjoni huma viżibbli. Il-JVM huwa pjuttost tajjeb fl-ottimizzazzjoni tas-sejħiet tal-funzjoni u talloka oġġetti effimeri, għalhekk dan il-kodiċi ħadem aħjar milli ħaqqna. Matul l-ittestjar, il-klijenti użawha b'suċċess pjuttost. Imma eventwalment ħadna għal-livell li jmiss.

(Tista 'tistaqsi għaliex aħna naħżnu messaġġi f'dan il-format b'paġni 4K, test u metadejta, aktar milli naħdmu ma' zkuk direttament. Hemm ħafna raġunijiet, li jirriżultaw għall-fatt li internament il-magna Scalyr hija aktar bħal database mqassma milli a. sistema ta 'fajls. It-tfittxija tat-test ħafna drabi hija kkombinata ma' filtri ta 'stil DBMS fil-marġini wara l-parsing ta' log. Nistgħu simultanjament infittxu ħafna eluf ta 'zkuk f'daqqa, u fajls ta' test sempliċi mhumiex adattati għall-ġestjoni tad-dejta transazzjonali, replikata u distribwita tagħna).

Inizjalment, deher li kodiċi bħal dan ma kienx adattat ħafna għall-ottimizzazzjoni tal-forza bruta. "Xogħol reali" fi String.indexOf() lanqas iddominaw il-profil tas-CPU. Jiġifieri, l-ottimizzazzjoni ta 'dan il-metodu waħdu ma ġġibx effett sinifikanti.

Jiġri li aħna naħżnu l-metadata fil-bidu ta 'kull paġna, u t-test tal-messaġġi kollha f'UTF-8 huwa ppakkjat fit-tarf l-ieħor. B'vantaġġ minn dan, ktibna mill-ġdid il-linja biex infittxu l-paġna kollha f'daqqa:

Fittex b'veloċità ta '1 TB/s

Din il-verżjoni taħdem direttament fuq il-veduta raw byte[] u tfittex il-messaġġi kollha f'daqqa fuq il-paġna 4K kollha.

Dan huwa ħafna aktar faċli biex jiġi ottimizzat għall-metodu tal-forza bruta. Il-linja ta 'tfittxija interna tissejjaħ simultanjament għall-paġna 4K kollha, aktar milli separatament fuq kull post. M'hemm l-ebda ikkupjar ta 'data, l-ebda allokazzjoni ta' oġġetti. U operazzjonijiet ta 'metadata aktar kumplessi jissejħu biss meta r-riżultat ikun pożittiv, u mhux fuq kull messaġġ. B'dan il-mod eliminajna ton ta 'overhead, u l-bqija tat-tagħbija hija kkonċentrata f'linja ta' tfittxija interna żgħira, li hija adattata tajjeb għal aktar ottimizzazzjoni.

L-algoritmu ta' tfittxija attwali tagħna huwa bbażat fuq idea kbira ta’ Leonid Volnitsky. Huwa simili għall-algoritmu Boyer-Moore, taqbeż bejn wieħed u ieħor it-tul tas-sekwenza tat-tfittxija f'kull pass. Id-differenza ewlenija hija li tiċċekkja żewġ bytes kull darba biex timminimizza l-logħbiet foloz.

L-implimentazzjoni tagħna teħtieġ il-ħolqien ta 'tabella ta' tfittxija ta '64K għal kull tfittxija, iżda dan m'hu xejn meta mqabbel mal-gigabytes ta' dejta li qed infittxu. Il-linja ta 'ġewwa tipproċessa diversi gigabytes kull sekonda fuq qalba waħda. Fil-prattika, prestazzjoni stabbli hija ta 'madwar 1,25 GB kull sekonda fuq kull qalba, u hemm lok għal titjib. Huwa possibbli li neliminaw ftit mill-overhead barra tal-linja ta 'ġewwa, u qed nippjanaw li nesperimentaw b'linja ta' ġewwa f'C minflok Java.

Aħna nużaw il-forza

Iddiskutejna li t-tiftix tal-log jista 'jiġi implimentat "bejn wieħed u ieħor", iżda kemm għandna "qawwa"? Pjuttost ħafna.

1 qalba: Meta jintuża b'mod korrett, qalba waħda ta 'proċessur modern hija pjuttost qawwija fiha nnifisha.

8 qlub: Bħalissa qed taħdem fuq servers SSD Amazon hi1.4xlarge u i2.4xlarge, kull wieħed bi 8 cores (16-il ħajt). Kif imsemmi hawn fuq, dawn il-qlub huma ġeneralment okkupati b'operazzjonijiet fl-isfond. Meta l-utent iwettaq tfittxija, l-operazzjonijiet fl-isfond huma sospiżi, u jilliberaw it-8 qlub kollha għat-tfittxija. It-tfittxija normalment titlesta f'qasma ta 'sekonda, u wara tkompli x-xogħol fl-isfond (il-programm ta' throttling jiżgura li l-barrage ta 'mistoqsijiet ta' tfittxija ma jinterferixxix max-xogħol fl-isfond importanti).

16 qlub: għall-affidabbiltà, aħna norganizzaw servers fi gruppi master/slave. Kull kaptan għandu SSD wieħed u server EBS wieħed taħt il-kmand tiegħu. Jekk is-server prinċipali jiġġarraf, is-server SSD immedjatament jieħu postu. Kważi l-ħin kollu, il-kaptan u l-iskjavi jaħdmu tajjeb, sabiex kull blokka tad-dejta tkun tista 'tfittex fuq żewġ servers differenti (is-server tal-iskjavi EBS għandu proċessur dgħajjef, għalhekk ma nqisuhx). Aħna naqsmu l-kompitu bejniethom, sabiex ikollna total ta '16-il qalba disponibbli.

Ħafna qlub: Fil-futur qarib, aħna se nqassmu d-dejta bejn is-servers b'tali mod li kollha jipparteċipaw fl-ipproċessar ta 'kull talba mhux trivjali. Kull qalba se taħdem. [Nota: implimentajna l-pjan u żidna l-veloċità tat-tfittxija għal 1 TB/s, ara n-nota fl-aħħar tal-artikolu].

Is-sempliċità tiżgura l-affidabbiltà

Vantaġġ ieħor tal-metodu tal-forza bruta huwa l-prestazzjoni pjuttost konsistenti tiegħu. Tipikament, it-tfittxija mhix sensittiva ħafna għad-dettalji tal-problema u s-sett tad-dejta (naħseb li għalhekk tissejjaħ "oħxon").

L-indiċi tal-kliem kjavi kultant jipproduċi riżultati oerhört veloċi, u drabi oħra ma jagħmilx hekk. Ejja ngħidu li għandek 50 GB ta' zkuk li fihom it-terminu 'customer_5987235982' jidher eżattament tliet darbiet. Tfittxija għal dan it-terminu tgħodd tliet postijiet direttament mill-indiċi u titlesta istantanjament. Iżda t-tfittxijiet kumplessi ta’ wildcard jistgħu jiskennjaw eluf ta’ kliem prinċipali u jieħdu żmien twil.

Min-naħa l-oħra, it-tfittxijiet tal-forza bruta jwettqu bejn wieħed u ieħor l-istess veloċità għal kwalunkwe mistoqsija. It-tiftix għal kliem twil huwa aħjar, iżda anke t-tiftix għal karattru wieħed huwa pjuttost mgħaġġel.

Is-sempliċità tal-metodu tal-forza bruta tfisser li l-prestazzjoni tiegħu hija qrib il-massimu teoretiku tagħha. Hemm inqas għażliet għal tagħbija żejda mhux mistennija tad-disk, kontenzjoni tal-lock, chasing pointer, u eluf ta 'raġunijiet oħra għal falliment. Għadni kemm ħares lejn it-talbiet li saru mill-utenti ta' Scalyr il-ġimgħa li għaddiet fuq is-server l-aktar traffikuż tagħna. Kien hemm 14 talba. E]att tmienja minnhom [adu aktar minn sekonda; 000% kompletati fi żmien 99 millisekondi (jekk ma użajtx għodod ta' analiżi ta' log, fiduċjani: huwa mgħaġġel).

Prestazzjoni stabbli u affidabbli hija importanti għall-faċilità ta 'użu tas-servizz. Jekk jonqos perjodikament, l-utenti jipperċepixxuha bħala mhux affidabbli u jkunu ħerqana li jużawha.

Log tfittxija fl-azzjoni

Hawn animazzjoni qasira li turi t-tfittxija ta' Scalyr fl-azzjoni. Għandna kont demo fejn aħna nimportaw kull avveniment f'kull repożitorju pubbliku ta' Github. F'din id-demo, neżamina l-valur ta 'ġimgħa ta' data: madwar 600 MB ta 'zkuk mhux maħduma.

Il-vidjo kien irreġistrat live, mingħajr preparazzjoni speċjali, fuq id-desktop tiegħi (madwar 5000 kilometru mis-server). Il-prestazzjoni li se tara hija dovuta l-aktar għaliha ottimizzazzjoni tal-klijent tal-web, kif ukoll backend veloċi u affidabbli. Kull meta jkun hemm pawsa mingħajr indikatur ta ''tagħbija', jiena nieqaf biex tkun tista' taqra dak li se nagħfas.

Fittex b'veloċità ta '1 TB/s

Bħala konklużjoni

Meta tipproċessa ammonti kbar ta 'dejta, huwa importanti li tagħżel algoritmu tajjeb, iżda "tajjeb" ma jfissirx "fancy". Aħseb dwar kif il-kodiċi tiegħek se jaħdem fil-prattika. L-analiżi teoretika tal-algoritmi tħalli barra xi fatturi li jistgħu jkunu ta 'importanza kbira fid-dinja reali. Algoritmi aktar sempliċi huma aktar faċli biex jiġu ottimizzati u aktar stabbli f'sitwazzjonijiet tat-tarf.

Aħseb ukoll dwar il-kuntest li fih se jiġi esegwit il-kodiċi. Fil-każ tagħna, għandna bżonn servers b'saħħithom biżżejjed biex jimmaniġġjaw il-kompiti fl-isfond. L-utenti jibdew it-tfittxijiet relattivament rari, sabiex inkunu nistgħu nissellfu grupp sħiħ ta 'servers għall-perjodu qasir meħtieġ biex tlesti kull tfittxija.

Bl-użu ta’ metodu ta’ forza bruta, implimentajna tfittxija veloċi, affidabbli u flessibbli fuq sett ta’ zkuk. Nittamaw li dawn l-ideat huma utli għall-proġetti tiegħek.

Editja: It-titlu u t-test inbidlu minn "Fittex f'20 GB kull sekonda" għal "Fittex f'1 TB kull sekonda" biex jirriflettu ż-żidiet fil-prestazzjoni matul l-aħħar ftit snin. Din iż-żieda fil-veloċità hija primarjament dovuta għal bidliet fit-tip u n-numru ta 'servers EC2 li qed inpoġġu llum biex naqdu l-bażi akbar ta' klijenti tagħna. Hemm bidliet dalwaqt li se jipprovdu spinta drammatika oħra fl-effiċjenza operattiva, u ma nistgħux nistennew li naqsmuhom.

Sors: www.habr.com

Żid kumment