Tsvaga pa 1 TB/s kumhanya

TL; DR: Makore mana apfuura ndakasiya Google ndine zano reitsva sevha yekutarisa chishandiso. Pfungwa iyi yaive yekubatanidza mabasa aiwanzova ega kuita sevhisi imwe collection uye kuongororwa kwelogi, kuunganidzwa kwemametrics, alerts uye dashboards. Imwe yemisimboti ndeyekuti sevhisi inofanirwa kuve yechokwadi fast, ichipa ma devops ane nyore, anopindirana, anonakidza chiitiko. Izvi zvinoda kugadzirisa akawanda-gigabyte data seti muzvikamu zvesekondi uchigara mukati mebhajeti. Maturusi aripo ekugadzirisa maturusi anowanzo kunonoka uye asina kusimba, saka takatarisana nedambudziko rakanaka: nekuchenjera kugadzira chishandiso kupa vashandisi ruzivo rutsva.

Ichi chinyorwa chinotsanangura kuti isu paScalyr takagadzirisa sei dambudziko iri nekushandisa nzira dzechikoro chekare, nzira yechisimba, kubvisa zvisingakoshi uye kudzivirira dhizaini yakaoma. Iwe unogona kushandisa zvidzidzo izvi kumatambudziko ako einjiniya.

Old School Power

Kuongororwa kwelogi kunowanzotanga nekutsvaga: tsvaga mameseji ese anoenderana neimwe pateni. MuScalyr, aya makumi kana mazana emagigabytes ematanda kubva kumaseva mazhinji. Maitiro emazuva ano, sekutonga, anosanganisira kuvakwa kweimwe yakaoma data chimiro chakagadziridzwa kutsvaga. Ini zvechokwadi ndazviona paGoogle, pavanenge vakanaka pamhando iyi yechinhu. Asi isu takagara pane yakawandisa cruder nzira: mutsara scanning yematanda. Uye zvakashanda - isu tinopa inotsvagika interface iri maodha ehukuru nekukurumidza kupfuura vakwikwidzi vedu (ona animation kumagumo).

Muono wakakosha waive wekuti ma processors emazuva ano anokurumidza kukurumidza pakushanda kwakapusa, kwakatwasuka. Izvi zviri nyore kupotsa mune yakaoma, akawanda-layer masisitimu anovimba neI / O kumhanya uye network mashandiro, uye masisitimu akadai akajairika nhasi. Saka isu takagadzira dhizaini inoderedza maseru uye marara akawandisa. Iine akawanda processors uye maseva akafanana, kukurumidza kutsvaga kunosvika 1 TB pasekondi.

Zvinonyanya kutora kubva kuchinyorwa ichi:

  • Kutsvaga kweBrute-force inzira inogoneka yekugadzirisa matambudziko epasirese, makuru-akakura.
  • Brute force inyanzvi yekugadzira, kwete mhinduro isina basa. Kufanana nechero nzira, inokodzera mamwe matambudziko pane mamwe, uye inogona kuitwa zvisina kunaka kana zvakanaka.
  • Brute force inonyanya kunaka pakuwana stable kubereka.
  • Kunyatsoshandisa brute force kunoda optimization code uye kushandisa zvakakwana zviwanikwa panguva chaiyo. Izvo zvakakodzera kana maseva ako ari pasi peanorema asiri-mushandisi mutoro uye mashandiro emushandisi anoramba ari pamberi.
  • Kuita kunoenderana nemagadzirirwo ehurongwa hwese, kwete chete mukati loop algorithm.

(Chinyorwa ichi chinotsanangura kutsvaga data mundangariro. Muzviitiko zvakawanda, kana munhu anoshandisa dhigirii yekutsvaga, maScalyr maseva atove akaichengeta. Nyaya inotevera ichakurukura nezvekutsvaga matanda asina kuvharwa. Mitemo yakafanana inoshanda: efficient code, brute force ine zviwanikwa zvakakura zvekuverengera).

Brute force method

Nechinyakare, yakakura data seti inotsvakwa uchishandisa keyword index. Kana ikashandiswa kune server logs, izvi zvinoreva kutsvaga izwi rega rega rakasiyana mulogi. Paizwi rega rega, iwe unofanirwa kuita runyoro rwezvese zvinosanganisirwa. Izvi zvinoita kuti zvive nyore kuwana mameseji ese ane izwi iri, semuenzaniso 'error', 'firefox' kana "transaction_16851951" - ingotarisa muindex.

Ndakashandisa nzira iyi paGoogle uye yakashanda zvakanaka. Asi muScalyr isu tinotsvaga matanda byte byte.

Sei? Kubva pane abstract algorithmic point yekuona, keyword indexes inoshanda zvakanyanya pane brute simba kutsvaga. Nekudaro, isu hatitengesi algorithms, tinotengesa maitiro. Uye kuita hakusi kwealgorithms chete, asiwo nezve masisitimu engineering. Isu tinofanirwa kufunga nezve zvese: vhoriyamu yedata, mhando yekutsvaga, iripo hardware uye software mamiriro. Isu takasarudza kuti kune rimwe dambudziko redu, chimwe chinhu senge 'grep' chaive chakakodzera pane index.

Indexes yakakura, asi ine painogumira. Shoko rimwe riri nyore kuwana. Asi kutsvaga mameseji ane mazwi akawanda, senge 'googlebot' uye '404', kwakaoma zvakanyanya. Kutsvaga mutsara wakaita sekuti 'ucaught exception' kunoda indekisi yakanyanya kuomesesa inorekodha kwete meseji chete neshoko iroro, asiwo nzvimbo chaiyo yezwi.

Dambudziko chairo rinouya kana usiri kutsvaga mazwi. Ngatiti iwe unoda kuona kuti yakawanda sei traffic iri kuuya kubva ku bots. Pfungwa yekutanga ndeyekutsvaga matanda ezwi rekuti 'bot'. Aya ndiwo maitiro aunowana mamwe bots: Googlebot, Bingbot uye mamwe akawanda. Asi pano 'bot' harisi izwi, asi chikamu chayo. Kana tikatsvaga 'bot' muindex, hatizowana chero zvinyorwa zvine izwi rekuti 'Googlebot'. Kana iwe ukatarisa izwi rega rega muindex uye wobva watarisa index yemazwi akakosha awanikwa, kutsvaga kunodzikira zvakanyanya. Nekuda kweizvozvo, mamwe mapurogiramu elogi haatenderi echikamu-izwi kutsvaga kana (papamusoro) inobvumira yakakosha syntax ine yakaderera kuita. Tinoda kunzvenga izvi.

Rimwe dambudziko ndere nyora dzemutauro. Iwe unoda kuwana zvese zvikumbiro kubva 50.168.29.7? Ko nezve debugging matanda ane [error]? Manyorero anowanzo svetuka nyora.

Chekupedzisira, mainjiniya anoda maturusi ane simba, uye dzimwe nguva dambudziko rinogona kugadziriswa chete nekutaura nguva dzose. Iyo keyword index haina kunyatsokodzera izvi.

Mukuwedzera, iyo indices yakaoma. Imwe neimwe meseji inoda kuwedzerwa kune akati wandei keyword list. Mazita aya anofanirwa kuchengetwa ari muchimiro chiri nyore kutsvaga nguva dzese. Mibvunzo ine mitsara, zvimedu zvemashoko, kana mataurirwo enguva dzose anofanirwa kushandurirwa mumabasa e-multi-list, uye mibairo inoongororwa nekubatanidzwa kuti ibudise mhedzisiro. Muchirevo chehombe-hombe, yakawanda-inoroja sevhisi, kuomarara uku kunogadzira nyaya dzekuita dzisingaonekwe kana uchiongorora algorithms.

Keyword indexes zvakare inotora yakawanda nzvimbo, uye kuchengetedza mutengo wakakura mune log management system.

Kune rumwe rutivi, kutsvaga kwega kwega kunogona kupedza simba rakawanda rekombuta. Vashandisi vedu vanokoshesa kutsvaga kwepamusoro-soro kwemibvunzo yakasiyana, asi mibvunzo yakadai inongoitwa kashoma. Kune yakajairika mibvunzo yekutsvaga, semuenzaniso, kune dashboard, isu tinoshandisa akakosha matekiniki (tichaatsanangura mune inotevera chinyorwa). Zvimwe zvikumbiro hazviwanzoitiki zvekuti haufanirwe kuita zvinopfuura chimwe panguva. Asi izvi hazvireve kuti maseva edu haana kubatikana: akabatikana nebasa rekugamuchira, kuongorora nekumanikidza meseji mitsva, kuongorora chenjedzo, kudzvanya data rekare, zvichingodaro. Nekudaro, isu tine yakaringana yakakosha kugovera processors inogona kushandiswa kuita mibvunzo.

Simba reBrute rinoshanda kana uine dambudziko rehutsinye (uye simba rakawanda)

Brute force inoshanda zvakanyanya pamatambudziko ari nyore ane madiki emukati zvishwe. Kazhinji iwe unogona kukwirisa iyo yemukati loop kuti imhanye nekumhanya kwakanyanya. Kana iyo kodhi yakaoma, zvakanyanya kuoma kuigadzirisa.

Kodhi yedu yekutsvaga pakutanga yaive nemukati yakakura loop. Isu tinochengeta mameseji pamapeji pa4K; peji rega rega rine mamwe mameseji (muUTF-8) uye metadata yemeseji yega yega. Metadata chimiro chinoisa kureba kwekukosha, yemukati meseji ID, uye mamwe minda. Kutenderera kwekutsvaga kwaiita seizvi:

Tsvaga pa 1 TB/s kumhanya

Iyi ishanduro yakapfava yekodhi chaiyo. Asi kunyangwe pano, kuisirwa zvinhu kwakawanda, makopi edatha, uye mafoni ekuita zvinoonekwa. Iyo JVM yakanaka kwazvo pakugadzirisa basa rekufona uye kugovera ephemeral zvinhu, saka iyi kodhi yakashanda zvirinani kupfuura zvataikodzera. Panguva yekuyedzwa, vatengi vakaishandisa zvakabudirira. Asi pakupedzisira takaiendesa kune imwe nhanho.

(Unogona kubvunza kuti nei tichichengeta mameseji mune iyi fomati nemapeji e4K, zvinyorwa uye metadata, pane kushanda nematanda zvakananga. Pane zvikonzero zvakawanda, izvo zvinofashaidza kuti mukati meiyo injini yeScalyr yakafanana nedhatabhesi yakaparadzirwa pane a. Kutsvaga kwemavara kunowanzo kusanganiswa neDBMS-maitiro mafirita mumicheto mushure mekugadzira log. Tinogona panguva imwe chete kutsvaga zviuru zvematanda panguva imwe chete, uye mameseji ari nyore haakodzere kutengeserana kwedu, kudzokororwa, kugovera data management).

Pakutanga, zvaiita sekuti kodhi yakadaro yakanga isina kunyatsokodzera brute force optimization. "Basa chairo" mukati String.indexOf() haina kana kutonga iyo CPU mbiri. Ndiko kuti, kugadzirisa nzira iyi chete hakuzounzi chinhu chakakosha.

Izvo zvinoitika kuti isu tinochengeta metadata pakutanga kwepeji rega rega, uye mameseji eese mameseji muUTF-8 akazara kune imwe magumo. Tichitora mukana weizvi, tinonyora zvakare loop kuti titsvage peji rese kamwechete:

Tsvaga pa 1 TB/s kumhanya

Iyi shanduro inoshanda zvakananga pane maonero raw byte[] uye inotsvaga mameseji ese kamwechete mukati mese 4K peji.

Izvi zviri nyore kuita optimize kune brute force nzira. Iyo yemukati yekutsvaga loop inodanwa panguva imwe chete kune iyo yese 4K peji, pane kuparadzaniswa pane yega positi. Iko hakuna kukopa data, hapana kugoverwa kwezvinhu. Uye zvakanyanya kuoma metadata mashandiro anodanwa chete kana mhedzisiro yakanaka, uye kwete pameseji yese. Nenzira iyi takabvisa toni yepamusoro, uye yakasara yemutoro inonamirwa mune diki yemukati yekutsvaga loop, iyo yakanyatso kuenderana nekuwedzera optimization.

Yedu chaiyo yekutsvaga algorithm yakavakirwa pa pfungwa huru Leonid Volnitsky. Izvo zvakafanana neBoyer-Moore algorithm, kusvetuka hurefu hwetambo yekutsvaga padanho rega rega. Musiyano mukuru ndewekuti inotarisa maviri mabheti panguva yekudzikisa machisi enhema.

Kuita kwedu kunoda kugadzira tafura ye64K yekutsvaga yega yega, asi icho hachisi chinhu kana tichienzanisa negigabytes yedata yatiri kutsvaga. Iyo yemukati loop inoshandisa akati wandei gigabytes pasekondi pane imwechete core. Mukuita, kuita kwakagadzikana kwakatenderedza 1,25 GB pasekondi pane yega yega musimboti, uye pane nzvimbo yekuvandudza. Zvinokwanisika kubvisa mamwe epamusoro kunze kwemukati loop, uye isu tinoronga kuyedza nemukati loop muC panzvimbo yeJava.

Tinoshandisa simba

Takakurukura kuti kutsvaga kwelogi kunogona kuitwa "zvishoma", asi "simba" rakawanda sei ratinaro? Zvakawanda.

1 musimboti: Kana yakashandiswa nemazvo, musimboti mumwe chete we processor yemazuva ano ine simba kwazvo pachayo.

8 cores: Isu tiri kumhanya paAmazon hi1.4xlarge uye i2.4xlarge SSD maseva, imwe neimwe ine 8 cores (16 threads). Sezvambotaurwa pamusoro apa, macores aya anowanzo batikana nekuita kwemashure. Kana mushandisi achitsvaga, mashandiro ekumashure anomiswa, achisunungura ese masere macores ekutsvaga. Kutsvaga kunowanzo kupedzisa muchikamu chechipiri, mushure mokunge basa rekumashure rinotangazve (purogiramu ye-throttling inovimbisa kuti mhirizhonga yemibvunzo yekutsvaga haikanganisi nebasa rinokosha rekumashure).

16 cores: nekuda kwekuvimbika, tinoronga maseva kuita tenzi / mapoka evaranda. Tenzi wega wega ane SSD uye imwe EBS server pasi pekuraira kwake. Kana iyo huru sevha ikaparara, iyo SSD server pakarepo inotora nzvimbo yayo. Anenge nguva dzese, tenzi nemuranda vanoshanda zvakanaka, kuitira kuti yega yega data block inotsvakwa pane maviri akasiyana maseva (iyo EBS muranda server ine isina simba processor, saka isu hatizvifunge). Isu tinogovanisa basa pakati pavo, kuitira kuti tive nehuwandu hwe16 cores iripo.

Mazhinji cores: Munguva pfupi iri kutevera, tichagovera data pamaseva nenzira yekuti vese vanotora chikamu mukugadzirisa zvikumbiro zvese zvisiri diki. Yese musimboti uchashanda. [Cherechedza: takaita chirongwa uye takawedzera kukurumidza kutsvaga kusvika ku1 TB / s, ona chinyorwa pamagumo echinyorwa].

Kureruka kunovimbisa kuvimbika

Imwe mukana weiyo brute force nzira ndeye kuita kwayo kuenderana. Kazhinji, kutsvaga hakuna kunyatso kutarisisa kune ruzivo rwedambudziko uye data set (ndinofunga ndosaka ichinzi "coarse").

Iyo keyword index dzimwe nguva inoburitsa zvinoshamisa zvinokurumidza mhedzisiro, uye dzimwe nguva haidaro. Ngatitii une 50 GB yematanda umo izwi rekuti 'customer_5987235982' rinooneka katatu. Kutsvaga kweiyi temu kunoverenga nzvimbo nhatu zvakananga kubva kune index uye inopedza ipapo ipapo. Asi kutsvaga kwakaoma makadhi emusango kunogona kuongorora zviuru zvemashoko akakosha uye kutora nguva yakareba.

Nekune rimwe divi, kutsvaga kwechisimba kwechisimba kunoita pamwe kana zvishoma kumhanya kwakafanana kune chero mubvunzo. Kutsvaga mazwi marefu kuri nani, asi kunyangwe kutsvaga muvara mumwechete kunokurumidza.

Kureruka kweiyo brute force nzira inoreva kuti kuita kwayo kuri padyo neiyo theoretical maximum. Kune mashoma sarudzo dzekusatarisirwa dhisiki kuwandisa, kukiya kukakavara, kunongedza kudzingirira, uye zviuru zvezvimwe zvikonzero zvekutadza. Ndangotarisa zvikumbiro zvakaitwa nevashandisi veScalyr svondo rapfuura pane yedu yakabatikana sevha. Paiva nezvikumbiro 14 000. Vasere vavo vakatora inopfuura sekondi imwe; 99% yakapedzwa mukati me111 milliseconds (kana usati washandisa log yekuongorora maturusi, ndivimbe neni: zviri kukurumidza).

Kugadzikana, kushanda kwakavimbika kunokosha kuti zvive nyore kushandiswa kwebasa. Kana ikanonoka nguva nenguva, vashandisi vanozviona seisina kuvimbika uye vanozeza kuishandisa.

Log search in action

Heino kapfupi animation inoratidza Scalyr kutsvaga mukuita. Isu tine demo account kwatinopinza chiitiko chese mune yega yega yeruzhinji Github repository. Mune iyi demo, ini ndinoongorora kukosha kwevhiki data: ingangoita 600 MB yematanda mbishi.

Vhidhiyo yacho yakarekodhwa ichirarama, pasina kugadzirira kwakakosha, padesktop yangu (anenge makiromita 5000 kubva paseva). Kuita kwauchaona kunonyanya kukonzerwa web client optimization, pamwe chete nekukurumidza uye yakavimbika backend. Pese panombomira pasina chiratidzo che'kurodha', ini ndinombomira kuti uverenge zvandiri kuda kutsikirira.

Tsvaga pa 1 TB/s kumhanya

Mukupedzisa

Paunenge uchigadzirisa huwandu hwe data, zvakakosha kusarudza yakanaka algorithm, asi "yakanaka" hairevi "mafashoni." Funga nezvekuti kodhi yako ichashanda sei mukuita. Iyo theoretical ongororo yealgorithms inosiya kunze zvimwe zvinhu zvinogona kukosha zvakanyanya munyika chaiyo. Akareruka algorithms ari nyore kukwirisa uye akanyanya kugadzikana mumamiriro ezvinhu.

Uyezve funga nezve mamiriro ayo kodhi ichaitwa. Muchiitiko chedu, tinoda maseva ane simba rakakwana kuti titarise mabasa ekumashure. Vashandisi vanotanga kutsvaga kazhinji, saka tinokwanisa kukwereta boka rese remaseva kwenguva pfupi inodiwa kuti tipedze kutsvaga kwega kwega.

Tichishandisa brute force method, takaita tsvakiridzo inokurumidza, yakavimbika, inochinjika pane seti yematanda. Tinovimba kuti mazano aya anobatsira kumapurojekiti ako.

Rongedza: Musoro uye zvinyorwa zvachinja kubva "Tsvaga pa20 GB pasekondi" kuenda ku "Tsvaga pa1 TB pasekondi" kuratidza kuwedzera kwekuita mumakore mashoma apfuura. Uku kuwedzera kwekumhanya kunonyanya kukonzerwa nekuchinja kwerudzi uye nhamba yemaseva eEC2 atiri kuisa nhasi kuti tishumire yedu yakawedzera vatengi. Pane shanduko dziri kuuya munguva pfupi iri kutevera dzinozopa kumwe kuwedzera kunoshamisa mukushanda zvakanaka, uye hatigone kumirira kuti tigovane.

Source: www.habr.com

Voeg