Mikaroka amin'ny hafainganam-pandeha 1 TB/s

TL; DR: Efa-taona lasa izay dia nandao an'i Google aho niaraka tamin'ny hevitra momba ny fitaovana fanaraha-maso mpizara vaovao. Ny hevitra dia ny hanambatra ireo asa mitoka-monina matetika ho serivisy iray famoriam-bola ary famakafakana diary, fanangonana metrika, fanairana ary dashboards. Ny iray amin'ireo fitsipika dia ny hoe ny fanompoana dia tsy maintsy tena marina fifadian-kanina, manome traikefa mora, mifampiresaka, mahafinaritra ho an'ny devops. Mitaky fanodinana angon-drakitra maromaro gigabyte ao anatin'ny ampahany segondra izany raha mijanona ao anatin'ny tetibola. Matetika miadana sy mikorontana ny fitaovana fitantanana logs efa misy, noho izany dia niatrika fanamby tsara izahay: mamolavola fitaovana iray mba hanomezana traikefa vaovao ny mpampiasa.

Ity lahatsoratra ity dia manoritsoritra ny fomba namaha ity olana ity izahay Scalyr amin'ny alΓ lan'ny fampiharana ny fomba fanao taloha, fomba fiasa mahery vaika, fanafoanana ireo sosona tsy ilaina ary fisorohana ny rafitra data saro-takarina. Azonao atao ny mampihatra ireo lesona ireo amin'ny olana ara-teknika anao.

Herin'ny Sekoly Taloha

Ny famakafakana diary matetika dia manomboka amin'ny fikarohana: tadiavo ny hafatra rehetra mifanaraka amin'ny lamina iray. Ao amin'ny Scalyr, dia folo na an-jatony gigabytes avy amin'ny mpizara maro ireo. Ny fomba maoderina, amin'ny ankapobeny, dia ahitana ny fananganana rafitra angon-drakitra saro-pady natao ho an'ny fikarohana. Azo antoka fa nahita an'ity tao amin'ny Google aho, izay tena tsara amin'ity karazana zavatra ity. Saingy nanorim-ponenana tamin'ny fomba tsy misy dikany kokoa izahay: scanning linear of logs. Ary nandaitra izany - manome interface tsara azo karohina izay filaharana haingana kokoa noho ny mpifaninana aminay izahay (jereo ny animation any amin'ny farany).

Ny tena zava-dehibe dia ny hoe ny processeur maoderina dia tena haingana tokoa amin'ny asa tsotra sy mahitsy. Mora adino izany amin'ny rafitra sarotra sy maro sosona izay miantehitra amin'ny hafainganam-pandehan'ny I/O sy ny fiasan'ny tambajotra, ary tena fahita ankehitriny ny rafitra toy izany. Noho izany dia namolavola endrika izay manamaivana ny sosona sy ny potipoti-javatra be loatra izahay. Miaraka amin'ny processeur sy mpizara maro mifanitsy, mahatratra 1 TB isan-tsegondra ny hafainganan'ny fikarohana.

Hevitra lehibe azo avy amin'ity lahatsoratra ity:

  • Ny fikarohana brute-force dia fomba mahomby hamahana ireo olana tena izy, lehibe.
  • Ny herisetra dia teknika famolavolana fa tsy vahaolana tsy misy asa. Toy ny teknika rehetra, mety tsara kokoa amin'ny olana sasany noho ny hafa izy io, ary azo ampiharina amin'ny fomba ratsy na tsara.
  • Ny herisetra dia tsara indrindra amin'ny fanatrarana marin-toerana famokarana.
  • Ny fampiasana mahery vaika amin'ny fomba mahomby dia mitaky ny fanatsarana ny kaody sy ny fampiasana loharano ampy amin'ny fotoana mety. Mety raha toa ka eo ambanin'ny enta-mavesatra tsy ampiasain'ny mpampiasa ny lohamilinao ary mijanona ho laharam-pahamehana ny fiasan'ny mpampiasa.
  • Ny fampandehanana dia miankina amin'ny famolavolana ny rafitra iray manontolo, fa tsy ny algorithm ao anatiny ihany.

(Ity lahatsoratra ity dia mamaritra ny fitadiavana angona ao anaty fitadidiana. Amin'ny ankamaroan'ny tranga, rehefa manao fikarohana amin'ny log ny mpampiasa iray, dia efa nosakanan'ny mpizara Scalyr izany. Ny lahatsoratra manaraka dia hiresaka momba ny fitadiavana logs tsy voatahiry. Ny fitsipika mitovy ihany no mihatra: kaody mahomby, hery mahery vaika miaraka amin'ny loharanon-kajy lehibe).

Brute force fomba

Amin'ny fomba mahazatra dia karohina amin'ny alΓ lan'ny fanondroana teny fototra ny angon-drakitra lehibe iray. Rehefa ampiharina amin'ny diarin'ny mpizara dia midika izany fa mikaroka ny teny tokana rehetra ao amin'ny log. Ho an'ny teny tsirairay dia mila manao lisitry ny fampidirana rehetra ianao. Izany dia manamora ny fitadiavana ny hafatra rehetra miaraka amin'ity teny ity, ohatra, 'error', 'firefox' na "transaction_16851951" - jereo fotsiny ny index.

Nampiasa ity fomba ity tao amin'ny Google aho ary niasa tsara. Fa ao amin'ny Scalyr dia mikaroka ny log byte byte izahay.

Nahoana? Avy amin'ny fomba fijery algorithmic abstract, ny fanondroana teny fanalahidy dia mahomby kokoa noho ny fikarohana mahery vaika. Na izany aza, tsy mivarotra algorithm izahay fa mivarotra fampisehoana. Ary ny fampisehoana dia tsy momba ny algorithms ihany, fa momba ny injeniera rafitra ihany koa. Tsy maintsy mandinika ny zava-drehetra isika: ny habetsaky ny angona, ny karazana fikarohana, ny tontolon'ny fitaovana sy ny rindrambaiko misy. Nanapa-kevitra izahay fa ho an'ny olanay manokana, ny zavatra toy ny 'grep' dia mety kokoa noho ny index.

Tsara ny fanondroana, saingy misy fetrany. Mora hita ny teny iray. Saingy sarotra kokoa ny mikaroka hafatra misy teny maro, toy ny 'googlebot' sy '404'. Ny fitadiavana andian-teny toy ny 'tsy voasambotra' dia mitaky fanondroana sarotra kokoa izay mirakitra tsy ny hafatra rehetra miaraka amin'io teny io ihany, fa ny toerana manokana misy ny teny ihany koa.

Ny tena fahasahiranana dia tonga rehefa tsy mitady teny ianao. Aoka hatao hoe te-hahita ny habetsahan'ny fifamoivoizana avy amin'ny bots ianao. Ny eritreritra voalohany dia ny mikaroka ao anaty diarin'ny teny hoe 'bot'. Toy izao no hahitanao bots sasany: Googlebot, Bingbot ary maro hafa. Saingy eto ny 'bot' dia tsy teny, fa ampahany amin'izany. Raha mitady 'bot' ao amin'ny index isika dia tsy hahita lahatsoratra misy teny hoe 'Googlebot'. Raha mijery ny teny rehetra ao amin'ny fanondroana ianao ary avy eo mijery ny tondro ho an'ireo teny fototra hita, dia hihena be ny fikarohana. Vokatr'izany, ny programa diary sasany dia tsy mamela ny fikarohana ampahany amin'ny teny na (tsara indrindra) mamela ny syntax manokana miaraka amin'ny fampisehoana ambany kokoa. Te hisoroka izany izahay.

Olana iray hafa ny mari-piatoana. Te-hahita ny fangatahana rehetra avy amin'ny 50.168.29.7? Ahoana ny amin'ny debugging logs misy [error]? Mandalo mari-piatoana ny famandrihana.

Farany, tia fitaovana mahery vaika ny injeniera, ary indraindray ny olana dia tsy azo vahana amin'ny fomba fiteny mahazatra. Ny fanondroana teny fototra dia tsy mety amin'izany.

Ankoatra izany, ny indeks PITSINY. Mila ampiana lisitra teny fototra maromaro ny hafatra tsirairay. Ireo lisitra ireo dia tokony hotehirizina amin'ny endrika mora karohina amin'ny fotoana rehetra. Ny fanontaniana misy andian-teny, sombin-teny, na fomba fiteny mahazatra dia mila adika amin'ny asa maromaro misy lisitra, ary ny valiny dia notarafina sy natambatra mba hamokatra vokatra. Ao anatin'ny tontolon'ny serivisy lehibe misy mpanofa maro, ity fahasarotana ity dia miteraka olana momba ny fampisehoana izay tsy hita rehefa mamakafaka ny algorithm.

Ny fanondroana teny fototra koa dia maka toerana betsaka, ary ny fitahirizana dia sanda lehibe amin'ny rafitra fitantanana log.

Amin'ny lafiny iray, ny fikarohana tsirairay dia afaka mandany hery informatika be dia be. Ny mpampiasa anay dia mankasitraka ny fikarohana haingana ho an'ny fanontaniana tokana, fa ny fanontaniana toy izany dia zara raha atao. Ho an'ny fangatahana fikarohana mahazatra, ohatra, ho an'ny dashboard, dia mampiasa teknika manokana izahay (holazainay ao amin'ny lahatsoratra manaraka izy ireo). Ny fangatahana hafa dia tsy dia matetika loatra ka mahalana ianao no mila manodina mihoatra ny iray isaky ny mandeha. Saingy tsy midika izany fa tsy sahirana ny mpizara anay: sahirana amin'ny asa fandraisana, famakafakana sy fanerena hafatra vaovao, fanombanana fanairana, fanerena ny angona taloha, sy ny sisa. Noho izany, manana famatsiana processeur tena manan-danja isika izay azo ampiasaina amin'ny fametrahana fanontaniana.

Ny hery brute dia miasa raha manana olana masiaka ianao (sy hery be)

Ny hery brute dia miasa tsara indrindra amin'ny olana tsotra miaraka amin'ny tadivavarana kely anatiny. Matetika ianao dia afaka manatsara ny loop anatiny mba hihazakazaka amin'ny hafainganam-pandeha avo be. Raha sarotra ny kaody dia sarotra kokoa ny manatsara azy.

Ny kaodim-pikarohanay tany am-boalohany dia nanana tsipika anatiny lehibe. Mitahiry hafatra amin'ny pejy amin'ny 4K izahay; ny pejy tsirairay dia misy hafatra sasantsasany (ao amin'ny UTF-8) sy metadata ho an'ny hafatra tsirairay. Ny metadata dia rafitra iray manodinkodina ny halavan'ny sanda, ID hafatra anatiny, ary saha hafa. Toy izao ny tsingerin'ny fikarohana:

Mikaroka amin'ny hafainganam-pandeha 1 TB/s

Ity dia dikan-teny notsorina amin'ny tena kaody. Saingy na eto aza dia hita ny fametrahana zavatra marobe, kopia data ary antso an-tariby. Ny JVM dia tena tsara amin'ny fanatsarana ny antso an-tariby sy ny fizarana zavatra ephemeral, noho izany dia niasa tsara kokoa noho ny mendrika anay ity code ity. Nandritra ny fitsapana dia nampiasa azy io soa aman-tsara ny mpanjifa. Saingy tamin'ny farany dia nentinay ho any amin'ny ambaratonga manaraka.

(Mety hanontany ianao hoe nahoana izahay no mitahiry hafatra amin'ity endrika ity miaraka amin'ny pejy 4K, lahatsoratra ary metadata, fa tsy miasa amin'ny logs mivantana. Maro ny antony, izay mahatonga ny hoe ao anatiny ny motera Scalyr dia mitovy kokoa amin'ny angon-drakitra voazara noho ny Rafitra fichier. Ny fikarohana lahatsoratra dia matetika mitambatra amin'ny sivana amin'ny endrika DBMS ao amin'ny sisiny aorian'ny fanaparitahana diary. Afaka mikaroka logs an'arivony indray miaraka isika, ary ny rakitra lahatsoratra tsotra dia tsy mety amin'ny fitantanana angon-drakitra ara-barotra, averina, zaraina).

Tany am-boalohany dia toa tsy nety loatra tamin'ny fanatsarana ny hery mahery vaika izany kaody izany. "Tena asa" in String.indexOf() tsy nanjakazaka akory ny mombamomba ny CPU. Izany hoe, tsy hitondra vokany lehibe ny fanatsarana io fomba io irery.

Mitranga izany fa mitahiry metadata isika eo am-piandohan'ny pejy tsirairay, ary feno ny lahatsoratry ny hafatra rehetra ao amin'ny UTF-8 any amin'ny farany. Nanararaotra izany, naverina nanoratra ny tadivavarana izahay mba hikaroka ny pejy manontolo indray mandeha:

Mikaroka amin'ny hafainganam-pandeha 1 TB/s

Ity dikan-teny ity dia miasa mivantana amin'ny fijery raw byte[] ary mikaroka ny hafatra rehetra indray mandeha manerana ny pejy 4K manontolo.

Mora kokoa ny manatsara ny fomba brute force. Ny famoriam-pikarohana anatiny dia antsoina miaraka amin'ny pejy 4K manontolo, fa tsy misaraka amin'ny lahatsoratra tsirairay. Tsy misy kopia data, tsy misy fizarana zavatra. Ary ny hetsika metadata sarotra kokoa dia antsoina raha tsy rehefa tsara ny vokatra, fa tsy amin'ny hafatra rehetra. Tamin'izany fomba izany dia nesorinay ny overhead iray taonina, ary ny sisa amin'ny enta-mavesatra dia mifantoka amin'ny tadivavarana kely fikarohana anatiny, izay mety tsara amin'ny fanatsarana bebe kokoa.

Ny algorithm fikarohana tenanay dia mifototra amin'ny hevitra tsara momba an'i Leonid Volnitsky. Mitovy amin'ny algorithm Boyer-Moore izy io, mitsambikina eo amin'ny halavan'ny tady fikarohana isaky ny dingana. Ny tena maha samy hafa dia ny manamarina roa bytes amin'ny fotoana mba hanamaivanana ny lalao diso.

Ny fampiharana ataonay dia mila mamorona latabatra fitadiavana 64K ho an'ny fikarohana tsirairay, saingy tsy misy dikany izany raha oharina amin'ny gigabytes ny angon-drakitra tadiavinay. Ny loop anatiny dia manodina gigabytes maromaro isan-tsegondra amin'ny fototra tokana. Amin'ny fampiharana, ny fampisehoana maharitra dia manodidina ny 1,25 GB isan-tsegondra amin'ny fototra tsirairay, ary misy toerana hanatsarana. Azo atao ny manafoana ny sasany amin'ny overhead ivelan'ny tadivavarana anatiny, ary mikasa ny hanandrana ny loop anatiny ao amin'ny C isika fa tsy Java.

Mampiasa hery izahay

Efa niresaka izahay fa azo ampiharina "eo ho eo" ny fikarohana lozisialy, fa firy ny "hery" ananantsika? Tena be dia be.

1 core: Rehefa ampiasaina araka ny tokony ho izy, ny fototra tokana amin'ny processeur maoderina dia tena matanjaka amin'ny zony manokana.

8 kozy: Amin'izao fotoana izao izahay dia mihazakazaka amin'ny mpizara SSD hi1.4xlarge sy i2.4xlarge amin'izao fotoana izao, samy manana cores 8 (16 kofehy). Araka ny voalaza etsy ambony, matetika ireo cores ireo dia sahirana amin'ny hetsika any aoriana. Rehefa manao fikarohana ny mpampiasa, dia miato ny fiasana ambadika, manafaka ireo cores 8 rehetra hanaovana fikarohana. MazΓ na dia vita ao anatin'ny segondra vitsy ny fikarohana, aorian'izay dia miverina indray ny asa an-dΓ lambe (ny fandaharan'asa throttling dia miantoka fa tsy hanelingelina ny asa fototra manan-danja ny firongatry ny fikarohana).

16 kozy: ho azo ianteherana, mandamina mpizara ho vondrona tompo/andevo izahay. Ny tompony tsirairay dia manana SSD iray sy mpizara EBS iray eo ambany baikony. Raha mianjera ny lohamilina lehibe dia maka ny toerany avy hatrany ny mpizara SSD. Saika amin'ny fotoana rehetra, ny tompony sy ny andevo dia miasa tsara, ka ny sakana data tsirairay dia azo karohina amin'ny mpizara roa samihafa (ny mpizara EBS andevo dia manana processeur malemy, ka tsy heverintsika izany). Zarainay amin'izy ireo ny asa, ka manana cores 16 izahay.

Cores maro: Atsy ho atsy, hizara angon-drakitra amin'ny mpizara izahay amin'ny fomba izay ahafahan'izy rehetra mandray anjara amin'ny fikarakarana ny fangatahana tsy misy dikany. Ny core tsirairay dia hiasa. [Fanamarihana: nampihatra ny drafitra izahay ary nampitombo ny hafainganam-pikarohana ho 1 TB/s, jereo ny fanamarihana any amin'ny faran'ny lahatsoratra].

Ny fahatsorana dia miantoka ny fahamendrehana

Ny tombony hafa amin'ny fomba brute force dia ny fahombiazany tsy miova. Amin'ny ankapobeny, ny fikarohana dia tsy dia saro-pady loatra amin'ny antsipirian'ny olana sy ny angon-drakitra (heveriko fa izany no antony iantsoana azy io hoe "coarse").

Ny fanondroana teny fototra indraindray dia miteraka vokatra faran'izay haingana, ary amin'ny fotoana hafa dia tsy manao izany. Andeha atao hoe manana 50 GB amin'ny diary ianao izay ahitana ny teny hoe 'customer_5987235982' intelo katroka. Ny fikarohana an'io teny io dia manisa toerana telo mivantana avy amin'ny tondro ary ho vita avy hatrany. Saingy ny fikarohana wildcard sarotra dia afaka mijery teny fanalahidy an'arivony ary maharitra ela.

Amin'ny lafiny iray, ny fikarohana brute force dia miasa amin'ny hafainganam-pandeha mitovy na latsaka amin'ny fanontaniana rehetra. Tsara kokoa ny mikaroka teny lava, fa na dia ny fitadiavana toetra tokana aza dia tena haingana.

Ny fahatsoran'ny fomba brute force dia midika fa ny fahombiazany dia manakaiky ny ambony indrindra ara-teorika. Vitsy kokoa ny safidy ho an'ny fihoaran'ny kapila tsy ampoizina, fifandirana hidin-trano, fanenjehana tondro, ary antony an'arivony hafa mahatonga ny tsy fahombiazana. Vao avy nijery ny fangatahana nataon'ireo mpampiasa Scalyr aho tamin'ny herinandro lasa teo tao amin'ny mpizara be mpampiasa indrindra. Nisy 14 ny fangatahana. Ny valo amin'izy ireo dia naharitra mihoatra ny iray segondra; 000% vita ao anatin'ny 99 milisegondra (raha tsy nampiasa fitaovana famakafakana log ianao dia matokia ahy: haingana izany).

Zava-dehibe amin'ny fanamorana ny fampiasana ny serivisy ny fampisehoana azo antoka sy azo antoka. Raha tara tsindraindray izy io, dia ho hitan'ny mpampiasa ho tsy azo ianteherana izy io ary misalasala ny hampiasa azy.

Log fikarohana amin'ny hetsika

Ity misy sary mihetsika fohy mampiseho ny fikarohana Scalyr miasa. Manana kaonty demo izahay izay manafatra hetsika rehetra amin'ny tahiry Github ho an'ny daholobe. Amin'ity demo ity, mandinika ny angon-drakitra mandritra ny herinandro aho: manodidina ny 600 MB amin'ny diary manta.

Noraisina mivantana, tsy nisy fiomanana manokana, teo amin'ny biraoko (tokony ho 5000 kilometatra miala ny lohamilina) ilay lahatsary. Ny fampisehoana ho hitanao dia noho ny ankamaroany fanatsarana ny mpanjifa web, ary koa backend haingana sy azo antoka. Isaky ny misy fiatoana tsy misy famantarana 'enta-mavesatra' dia izaho no miato mba hahafahanao mamaky izay hotsindriako.

Mikaroka amin'ny hafainganam-pandeha 1 TB/s

Ho famaranana

Rehefa manamboatra angon-drakitra be dia be dia ilaina ny misafidy algorithm tsara, fa ny "tsara" dia tsy midika hoe "tsara". Eritrereto ny fomba fiasan'ny kaody anao amin'ny fampiharana. Ny famakafakana teorika momba ny algorithm dia mamela ireo lafin-javatra sasany izay mety ho manan-danja lehibe amin'ny tontolo tena izy. Ny algorithm tsotra kokoa dia mora kokoa amin'ny fanatsarana ary miorina tsara kokoa amin'ny toe-javatra edge.

Eritrereto koa ny teny manodidina izay hanatanterahana ilay kaody. Amin'ny tranga misy antsika dia mila mpizara matanjaka ampy hitantana ireo asa any ambadika. Ny mpampiasa dia manomboka mikaroka matetika, mba hahafahantsika mindrana vondrona mpizara iray manontolo mandritra ny fotoana fohy ilaina hamitana ny fikarohana tsirairay.

Tamin'ny fampiasana fomba mahery vaika, nampihatra fikarohana haingana, azo ianteherana, mora azo amin'ny fitambaran'ny diary izahay. Manantena izahay fa mahasoa amin'ny tetikasanao ireo hevitra ireo.

Ahitsio Ny lohateny sy ny lahatsoratra dia niova avy amin'ny "Karoka amin'ny 20 GB isan-tsegondra" ho "Karoka amin'ny 1 TB isan-tsegondra" mba hanehoana ny fisondrotry ny zava-bita tato anatin'ny taona vitsivitsy. Ity fitomboan'ny hafainganam-pandeha ity dia noho ny fiovan'ny karazana sy ny isan'ny mpizara EC2 apetratsika anio mba hanompoana ny mpanjifa mitombo. Misy fiovana ho avy tsy ho ela izay hanome tosika lehibe hafa amin'ny fahombiazan'ny fampandehanana, ary tsy andriko ny hizara azy ireo.

Source: www.habr.com

Add a comment