Bincika a gudun 1 TB/s

TL;DR: Shekaru hudu da suka wuce na bar Google tare da ra'ayin sabon kayan aikin sa ido na uwar garke. Manufar shine a haɗa ayyuka da aka keɓe zuwa sabis ɗaya tarin da bincike na log, tarin awo, faɗakarwa da dashboards. Ɗaya daga cikin ƙa'idodin shine sabis ɗin dole ne ya kasance da gaske sauri, samar da devops tare da sauƙi, m, m kwarewa. Wannan yana buƙatar sarrafa saitin bayanai na gigabyte masu yawa a cikin juzu'i na daƙiƙa yayin zama cikin kasafin kuɗi. Kayan aikin sarrafa log ɗin da ke wanzu galibi suna jinkiri kuma suna da ɗanɗano, don haka mun fuskanci ƙalubale mai kyau: da wayo da zayyana kayan aiki don ba masu amfani sabuwar ƙwarewa.

Wannan labarin ya bayyana yadda mu a Scalyr ya magance wannan matsala ta hanyar amfani da tsoffin hanyoyin makaranta, hanyar da ba ta dace ba, kawar da yadudduka da ba dole ba da kuma guje wa tsarin bayanai masu rikitarwa. Kuna iya amfani da waɗannan darussan zuwa matsalolin injiniyanku.

Tsohon Makaranta Power

Binciken log yawanci yana farawa da bincike: nemo duk saƙonnin da suka dace da takamaiman tsari. A cikin Scalyr, waɗannan dubun ko ɗaruruwan gigabytes ne na rajistan ayyukan daga sabar da yawa. Hanyoyi na zamani, a matsayin mai mulki, sun haɗa da gina wasu hadaddun tsarin bayanan da aka inganta don bincike. Tabbas na ga wannan akan Google, inda suke da kyau a irin wannan abu. Amma mun daidaita kan wata hanya mai mahimmanci: bincikar gungumen azaba. Kuma ya yi aiki - muna samar da ma'auni mai bincike wanda shine umarni mafi girma fiye da masu fafatawa (duba rayarwa a karshen).

Maɓalli mai mahimmanci shine cewa na'urori na zamani suna da sauri sosai a cikin sauƙi, ayyuka masu sauƙi. Wannan yana da sauƙi a rasa a cikin hadaddun tsarin, tsarin multilayer wanda ya dogara da saurin I/O da ayyukan cibiyar sadarwa, kuma irin waɗannan tsarin suna da yawa a yau. Don haka mun ƙirƙira ƙira wanda ke rage yadudduka da tarkace. Tare da na'urori masu sarrafawa da na'urori masu yawa a layi daya, saurin bincike ya kai 1 TB a sakan daya.

Mahimman abubuwan da za a ɗauka daga wannan labarin:

  • Binciken ƙarfin hali hanya ce mai dacewa don magance ainihin duniya, manyan matsaloli.
  • Ƙarfin ƙarfi dabarar ƙira ce, ba mafita mara aiki ba. Kamar kowane fasaha, ya fi dacewa da wasu matsalolin fiye da wasu, kuma ana iya aiwatar da shi mara kyau ko da kyau.
  • Ƙarfin baƙin ƙarfe yana da kyau musamman don cimmawa barga yawan aiki.
  • Ingantacciyar amfani da ƙarfi mai ƙarfi yana buƙatar haɓaka lamba da amfani da isassun albarkatu a daidai lokacin. Ya dace idan sabobin ku suna ƙarƙashin nauyi mara amfani kuma ayyukan mai amfani sun kasance fifiko.
  • Ayyukan aiki ya dogara da ƙirar tsarin gaba ɗaya, ba kawai algorithm na madauki na ciki ba.

(Wannan labarin yana bayyana neman bayanai a cikin ƙwaƙwalwar ajiya. A mafi yawan lokuta, lokacin da mai amfani ya yi binciken log, sabobin Scalyr sun riga sun adana shi. Labari na gaba zai tattauna nemo rajistan ayyukan da ba a ɓoye ba. Ka'idodin iri ɗaya sun shafi: ingantaccen code, ƙarfin ƙarfi. tare da manyan albarkatun lissafi).

Hanyar karfi

A al'adance, ana bincika babban saitin bayanai ta amfani da fihirisar kalmomi. Lokacin da aka yi amfani da rajistan ayyukan uwar garken, wannan yana nufin neman kowace kalma ta musamman a cikin log ɗin. Ga kowace kalma, kuna buƙatar yin jerin duk abubuwan da aka haɗa. Wannan yana sauƙaƙa samun duk saƙonnin da wannan kalmar, misali 'kuskure', 'firefox' ko "ma'amala_16851951" - kawai duba cikin fihirisar.

Na yi amfani da wannan hanyar a Google kuma ta yi aiki da kyau. Amma a cikin Scalyr muna bincika logs byte byte.

Me yasa? Daga mahangar algorithm mai ƙima, fihirisar kalmomi sun fi inganci fiye da binciken ƙarfi. Duk da haka, ba mu sayar da algorithms, muna sayar da aiki. Kuma aikin ba kawai game da algorithms ba, har ma game da injiniyan tsarin. Dole ne mu yi la'akari da komai: ƙarar bayanai, nau'in bincike, kayan aikin da ake da su da mahallin software. Mun yanke shawarar cewa don matsalarmu ta musamman, wani abu kamar 'grep' ya fi dacewa da fihirisa.

Fihirisa suna da kyau, amma suna da iyaka. Kalma ɗaya tana da sauƙin samu. Amma neman saƙonni da kalmomi da yawa, kamar 'googlebot' da '404', ya fi wahala. Neman jumla kamar 'bangaren da ba a kama ba' yana buƙatar ƙarin ƙayyadaddun fihirisar da ke yin rikodin ba kawai duk saƙonnin da kalmar ba, har ma da takamaiman wurin da kalmar take.

Ainihin wahala yana zuwa lokacin da ba ku neman kalmomi. Bari mu ce kuna son ganin yawan zirga-zirgar ababen hawa da ke fitowa daga bots. Tunani na farko shine a bincika rajistan ayyukan kalmar 'bot'. Wannan shine yadda zaku sami wasu bots: Googlebot, Bingbot da sauran su. Amma a nan 'bot' ba kalma ba ce, amma wani ɓangare na shi. Idan muka nemo 'bot' a cikin fihirisar, ba za mu sami wani rubutu da kalmar 'Googlebot' ba. Idan ka duba kowace kalma a cikin fihirisa sannan ka bincika fihirisar don kalmomin da aka samo, binciken zai ragu sosai. Sakamakon haka, wasu shirye-shiryen log ɗin ba sa ba da izinin binciken ɓangaren kalma ko (a mafi kyawun) ba da izinin daidaitawa na musamman tare da ƙaramin aiki. Muna so mu guji wannan.

Wata matsala kuma ita ce alamar rubutu. Kuna son nemo duk buƙatun daga 50.168.29.7? Me game da gyara rajistan ayyukan da suka ƙunshi [error]? Rubuce-rubuce yawanci suna tsallake alamar rubutu.

A ƙarshe, injiniyoyi suna son kayan aiki masu ƙarfi, kuma wani lokacin ana iya magance matsala tare da magana ta yau da kullun. Fihirisar kalmomin ba ta dace da wannan ba.

Bugu da kari, fihirisa hadaddun. Kowane saƙo yana buƙatar ƙarawa zuwa lissafin kalmomi da yawa. Ya kamata a adana waɗannan jerin sunayen a cikin tsari mai sauƙi mai sauƙi a koyaushe. Tambayoyin da ke da jimloli, gutsuttsura kalmomi, ko maganganu na yau da kullun suna buƙatar a fassara su zuwa ayyukan jeri da yawa, sannan a duba sakamakon kuma a haɗa su don samar da saitin sakamako. A cikin mahallin babban ma'auni, sabis na masu haya da yawa, wannan sarƙaƙƙiya yana haifar da al'amurran da ba a iya gani ba yayin nazarin algorithms.

Fihirisar kalmomi kuma suna ɗaukar sarari da yawa, kuma ajiya babban farashi ne a cikin tsarin sarrafa log.

A gefe guda, kowane bincike na iya cinye ƙarfin kwamfuta mai yawa. Masu amfani da mu suna jin daɗin bincike mai sauri don tambayoyi na musamman, amma irin waɗannan tambayoyin ba a cika yin su ba. Don tambayoyin bincike na yau da kullun, misali, don dashboard, muna amfani da dabaru na musamman (za mu kwatanta su a labari na gaba). Sauran buƙatun ba safai ba ne waɗanda ba za ku iya aiwatar da fiye da ɗaya lokaci ɗaya ba. Amma wannan ba yana nufin cewa uwar garken mu ba su shagala ba: sun shagaltu da aikin karɓa, nazari da matsawa sabbin saƙonni, tantance faɗakarwa, damfara tsofaffin bayanai, da dai sauransu. Don haka, muna da wadataccen wadataccen kayan sarrafawa waɗanda za a iya amfani da su don aiwatar da tambayoyi.

Ƙarfin ƙarfi yana aiki idan kuna da matsala mai ƙarfi (da ƙarfi da yawa)

Ƙarfin baƙin ƙarfe yana aiki mafi kyau akan matsaloli masu sauƙi tare da ƙananan madaukai na ciki. Sau da yawa zaka iya inganta madauki na ciki don gudana cikin sauri mai girma. Idan lambar tana da rikitarwa, yana da wahala sosai don inganta shi.

Lambar binciken mu ta asali tana da babban madauki na ciki. Muna adana saƙonni akan shafuka a 4K; kowane shafi ya ƙunshi wasu saƙonni (a cikin UTF-8) da metadata ga kowane saƙo. Metadata tsari ne wanda ke ɓoye tsawon ƙimar, ID ɗin saƙon ciki, da sauran filayen. Zagayen bincike yayi kama da haka:

Bincika a gudun 1 TB/s

Wannan sauƙaƙan sigar ainihin lambar. Amma ko da a nan, wurare masu yawa, kwafin bayanai, da kiran aiki ana iya gani. JVM yana da kyau sosai wajen inganta kiran aiki da rarraba abubuwa na al'ada, don haka wannan lambar tayi aiki fiye da yadda muka cancanta. A lokacin gwaji, abokan ciniki sun yi amfani da shi sosai cikin nasara. Amma daga karshe mun kai shi mataki na gaba.

(Za ku iya tambayar dalilin da yasa muke adana saƙonni a cikin wannan tsari tare da shafukan 4K, rubutu da metadata, maimakon yin aiki tare da rajistan ayyukan kai tsaye. Akwai dalilai da yawa, wanda ya taso zuwa gaskiyar cewa a ciki injin Scalyr ya fi kama da bayanan da aka rarraba fiye da Tsarin fayil. Ana haɗe binciken rubutu sau da yawa tare da tacewa irin na DBMS a cikin gefe bayan bayanan log. Za mu iya bincika dubunnan rajistan ayyukan lokaci guda, kuma fayilolin rubutu masu sauƙi ba su dace da ma'amalarmu, maimaitawa, sarrafa bayanai ba).

Da farko, yana kama da cewa irin wannan lambar ba ta dace sosai don inganta ƙarfin ƙarfi ba. "Aiki na gaske" in String.indexOf() bai ma mamaye bayanan CPU ba. Wato inganta wannan hanya kadai ba zai haifar da wani gagarumin tasiri ba.

Hakan ya faru cewa muna adana metadata a farkon kowane shafi, kuma rubutun duk saƙonni a cikin UTF-8 an cika shi a ɗayan ƙarshen. Yin amfani da wannan, mun sake rubuta madauki don bincika duka shafin a lokaci ɗaya:

Bincika a gudun 1 TB/s

Wannan sigar tana aiki kai tsaye akan kallo raw byte[] kuma yana bincika duk saƙonnin lokaci ɗaya a duk shafin 4K.

Wannan ya fi sauƙi don ingantawa don hanyar ƙarfin hali. Ana kiran madaidaicin bincike na ciki lokaci guda don duk shafin 4K, maimakon keɓance akan kowane matsayi. Babu kwafin bayanai, babu rabon abubuwa. Kuma ƙarin hadaddun ayyukan metadata ana kiran su ne kawai lokacin da sakamakon ya kasance tabbatacce, kuma ba akan kowane saƙo ba. Ta wannan hanyar mun kawar da ton na sama, kuma sauran kayan an tattara su a cikin ƙaramin madauki na bincike na ciki, wanda ya dace da ƙarin haɓakawa.

Ainihin binciken mu yana dogara ne akan Babban ra'ayin Leonid Volnitsky. Yana kama da Boyer-Moore algorithm, yana tsallake kusan tsawon layin bincike a kowane mataki. Babban bambancin shi ne cewa yana duba bytes biyu lokaci guda don rage matches karya.

Aiwatar da mu na buƙatar ƙirƙirar tebur na neman 64K don kowane bincike, amma wannan ba komai bane idan aka kwatanta da gigabytes na bayanan da muke nema. Madauki na ciki yana aiwatar da gigabytes da yawa a cikin daƙiƙa akan cibiya ɗaya. A aikace, ingantaccen aiki yana kusa da 1,25 GB a sakan daya akan kowane cibiya, kuma akwai wurin ingantawa. Yana yiwuwa a kawar da wasu daga cikin sama a waje na madauki na ciki, kuma muna shirin yin gwaji tare da madauki na ciki a cikin C maimakon Java.

Muna amfani da karfi

Mun tattauna cewa za a iya aiwatar da binciken log ɗin "kusanyawa", amma "ikon" nawa muke da shi? Da yawa.

1 kwaya: Idan aka yi amfani da shi daidai, cibiya guda ɗaya ta na’ura mai sarrafa kanta ta zamani tana da ƙarfi sosai da kanta.

8 kwarya: A halin yanzu muna gudana akan Amazon hi1.4xlarge da i2.4xlarge SSD sabobin, kowanne tare da 8 cores (16 zaren). Kamar yadda aka ambata a sama, waɗannan nau'ikan suna yawanci aiki tare da ayyukan baya. Lokacin da mai amfani ya yi bincike, ana dakatar da ayyukan bayan fage, tare da 'yantar da duk nau'ikan 8 don bincike. Binciken yawanci yana ƙarewa a cikin tsaga na biyu, bayan haka aikin baya ya sake dawowa (shirin maƙarƙashiya yana tabbatar da cewa ɗimbin tambayoyin bincike baya tsoma baki tare da mahimman aikin bango).

16 kwarya: don amintacce, muna tsara sabobin zuwa ƙungiyoyin master / bawa. Kowane master yana da SSD guda ɗaya da uwar garken EBS guda ɗaya a ƙarƙashin umarninsa. Idan babban uwar garken ya fado, nan take uwar garken SSD ya dauki wurinsa. Kusan koyaushe, maigida da bawa suna aiki lafiya, don haka ana iya bincika kowane toshe bayanai akan sabar guda biyu (sabar bawa na EBS yana da na'ura mai rauni, don haka ba mu la'akari da shi). Muna raba aikin a tsakanin su, ta yadda za mu sami jimillar nau'i 16.

Yawancin cibiyoyi: Nan gaba kadan, za mu rarraba bayanai a kan uwar garken ta yadda dukkansu za su shiga cikin sarrafa duk wani buƙatu maras muhimmanci. Kowane core zai yi aiki. [Lura: mun aiwatar da shirin kuma mun ƙara saurin bincike zuwa 1 TB / s, duba bayanin kula a ƙarshen labarin].

Sauƙi yana tabbatar da aminci

Wani fa'idar hanyar ƙwaƙƙwaran ƙarfi shine daidaitaccen aikin sa. Yawanci, bincike ba shi da mahimmanci ga cikakkun bayanai na matsala da saitin bayanai (Ina tsammanin shi ya sa ake kiranta "m").

Fihirisar kalmomin wani lokaci tana samar da sakamako mai saurin gaske, wasu lokutan kuma ba ta yi. Bari mu ce kana da 50 GB na rajistan ayyukan da kalmar 'abokin ciniki_5987235982' ya bayyana daidai sau uku. Neman wannan kalmar yana ƙirga wurare uku kai tsaye daga fihirisar kuma zai kammala nan take. Amma hadaddun bincike na gandun daji na iya bincika dubban kalmomi kuma suna ɗaukar lokaci mai tsawo.

A gefe guda kuma, binciken ƙarfi mai ƙarfi yana yin sama ko ƙasa da gudu iri ɗaya don kowace tambaya. Neman dogayen kalmomi ya fi kyau, amma ko da neman hali ɗaya yana da sauri sosai.

Sauƙaƙan hanyar ƙarfin ƙarfi yana nufin cewa aikin sa yana kusa da iyakar ƙa'idarsa. Akwai ƴan zaɓuɓɓuka don ɗimbin ɗimbin faifai na bazata, jayayyar kulle-kulle, neman mai nuni, da dubban wasu dalilai na gazawa. Na kalli buƙatun da masu amfani da Scalyr suka yi a makon da ya gabata akan sabar mu mafi yawan aiki. Akwai buƙatu 14. Daidai takwas daga cikinsu sun ɗauki fiye da daƙiƙa ɗaya; 000% an kammala a cikin millise seconds 99 (idan ba ku yi amfani da kayan aikin binciken log ba, amince da ni: yana da sauri).

Tsayayyen aiki, abin dogaro yana da mahimmanci don sauƙin amfani da sabis. Idan ya kasance lokaci-lokaci, masu amfani za su gane shi a matsayin wanda ba a iya dogara da shi ba kuma za su yi jinkirin amfani da shi.

Shiga bincike cikin aiki

Anan ga ɗan gajeren raye-raye wanda ke nuna binciken Scalyr a aikace. Muna da asusun demo inda muke shigo da kowane lamari a cikin kowane ma'ajin Github na jama'a. A cikin wannan demo, Ina bincika ƙimar ƙimar mako guda: kusan 600 MB na ɗanyen logs.

An yi rikodin bidiyon kai tsaye, ba tare da shiri na musamman ba, akan tebur na (kimanin kilomita 5000 daga uwar garken). Ayyukan da za ku ga sun fi yawa saboda inganta abokin ciniki na yanar gizo, kazalika da sauri kuma abin dogara baya. A duk lokacin da aka sami ɗan dakata ba tare da alamar 'loading' ba, ni ne ke tsayawa don ku karanta abin da zan danna.

Bincika a gudun 1 TB/s

A ƙarshe

Lokacin sarrafa bayanai masu yawa, yana da mahimmanci a zaɓi kyakkyawan algorithm, amma "mai kyau" ba yana nufin "zato ba." Yi tunanin yadda lambar ku za ta yi aiki a aikace. Binciken ka'idar algorithms yana barin wasu dalilai waɗanda zasu iya zama babban mahimmanci a cikin ainihin duniya. Algorithms masu sauƙi sun fi sauƙi don haɓakawa kuma sun fi kwanciyar hankali a cikin yanayi mara kyau.

Har ila yau tunani game da mahallin da za a aiwatar da lambar. A cikin yanayinmu, muna buƙatar isassun sabar masu ƙarfi don sarrafa ayyukan baya. Masu amfani suna fara bincike ba da yawa ba, don haka za mu iya aro duka rukunin sabobin na ɗan gajeren lokacin da ake buƙata don kammala kowane bincike.

Yin amfani da hanyar ƙarfi mai ƙarfi, mun aiwatar da bincike mai sauri, abin dogaro, mai sassauƙa a cikin jerin rajistan ayyukan. Muna fatan waɗannan ra'ayoyin suna da amfani don ayyukanku.

Gyara: Take da rubutu sun canza daga "Bincika a 20 GB a sakan daya" zuwa "Bincika a 1 TB a sakan daya" don nuna karuwar ayyukan a cikin 'yan shekarun da suka gabata. Wannan haɓakar saurin ya samo asali ne saboda canje-canje a nau'in da adadin sabar EC2 da muke sakawa a yau don hidimar ƙarin tushen abokin ciniki. Akwai canje-canje masu zuwa nan ba da jimawa ba waɗanda za su samar da wani haɓaka mai ban mamaki a cikin ingantaccen aiki, kuma ba za mu iya jira mu raba su ba.

source: www.habr.com

Add a comment