Fanatsarana ny entana amin'ny tetikasa Highload miaraka amin'ny ElasticSearch

Hey Habr! Maxim Vasiliev no anarako, miasa amin'ny maha-mpamakafaka sy mpitantana tetikasa ao amin'ny FINCH aho. Androany aho dia te-hilaza aminao ny fomba, tamin'ny fampiasana ElasticSearch, nahafahanay nikarakara fangatahana 15 tapitrisa tao anatin'ny 6 minitra ary nanatsara ny entana isan'andro tao amin'ny tranokalan'ny iray amin'ireo mpanjifanay. Indrisy anefa fa tsy maintsy atao tsy misy anarana izahay, satria manana NDA izahay, manantena izahay fa tsy hijaly amin'izany ny votoatin'ny lahatsoratra. Andao.

Ahoana ny fiasan'ny tetikasa

Amin'ny lamosinay, mamorona serivisy miantoka ny fahombiazan'ny tranokalan'ny mpanjifanay sy ny fampiharana finday izahay. Ny rafitra ankapobeny dia azo jerena ao amin'ny diagram:

Fanatsarana ny entana amin'ny tetikasa Highload miaraka amin'ny ElasticSearch

Ao amin'ny dingan'ny asa, dia manao raharaham-barotra be dia be: fividianana, fandoavam-bola, asa miaraka amin'ny mpampiasa mizana, izay mitahiry logs be dia be, ary koa ny fanafarana sy fanondranana izany angona ho any ivelany rafitra.

Misy ihany koa ny dingana mifamadika rehefa mandray angona avy amin'ny mpanjifa izahay ary mamindra izany amin'ny mpampiasa. Ankoatr'izay, mbola misy ihany koa ny dingana amin'ny fiasana amin'ny programa fandoavam-bola sy bonus.

Fohy fohifohy

Tany am-boalohany dia nampiasa ny PostgreSQL izahay ho fivarotana data tokana. Ny tombon-dahiny manara-penitra ho an'ny DBMS: ny fisian'ny fifampiraharahana, ny fiteny santionan'ny angon-drakitra novolavolaina, ny fitaovana isan-karazany ho an'ny fampidirana; miaraka amin'ny fampisehoana tsara dia nanome fahafaham-po ny filanay nandritra ny fotoana ela.

Notahirizinay tanteraka ao amin'ny Postgres avokoa ny angon-drakitra rehetra: manomboka amin'ny fifanakalozana ka hatramin'ny vaovao. Saingy nitombo ny isan'ny mpampiasa, ary niaraka tamin'izany ny isan'ny fangatahana.

Ho an'ny fahatakarana, ny isan'ny fivoriana isan-taona amin'ny 2017 fotsiny amin'ny tranokala desktop dia 131 tapitrisa. Amin'ny 2018 - 125 tapitrisa. 2019 indray 130 tapitrisa. Ampio 100-200 tapitrisa hafa avy amin'ny dikan-teny finday ny tranokala sy ny fampiharana finday, ary ianao hahazo fangatahana maro be.

Miaraka amin'ny fitomboan'ny tetikasa, ny Postgres dia nijanona tsy niatrika ny enta-mavesatra, tsy nanam-potoana izahay - nisy fanontaniana maro isan-karazany niseho, izay tsy afaka namorona indeksa ampy.

Takatsika fa ilaina ny fitehirizana angon-drakitra hafa izay hanome izay ilaintsika sy hanaisotra ny entana ao amin'ny PostgreSQL. Elasticsearch sy MongoDB dia noheverina ho safidy azo atao. Resy tamin’ireto teboka ireto ireto farany:

  1. Ny hafainganam-pandehan'ny fanondroana miadana rehefa mitombo ny habetsaky ny angona ao amin'ny fanondroana. Miaraka amin'ny Elastic, ny hafainganam-pandeha dia tsy miankina amin'ny habetsaky ny angona.
  2. Tsy misy fikarohana lahatsoratra feno

Noho izany dia nisafidy ny Elastic ho anay izahay ary niomana ho amin'ny tetezamita.

Hiverina any amin'ny elastika

1. Nanomboka ny tetezamita avy amin'ny serivisy fikarohana momba ny varotra izahay. Ny mpanjifanay dia manana totalin'ny varotra 70 eo ho eo, ary mitaky karazana fikarohana maromaro ao amin'ny tranokala sy amin'ny fampiharana izany:

  • Fikarohana lahatsoratra amin'ny anaran'ny tanàna
  • Geosearch ao anatin'ny radius nomena avy amin'ny toerana iray. Ohatra, raha te-hahita izay toeram-pivarotana akaiky indrindra amin'ny tranony ny mpampiasa.
  • Fikarohana amin'ny alalan'ny efajoro nomena - ny mpampiasa dia manao sarintany eo amin'ny sarintany, ary ny teboka rehetra ao amin'io radius io dia aseho aminy.
  • Fikarohana amin'ny sivana fanampiny. Ny toeram-pivarotana dia samy hafa amin'ny karazana

Raha miresaka momba ny fandaminana isika, dia ao amin'ny Postgres dia manana loharano angon-drakitra ho an'ny sarintany sy ny vaovao, ary ao amin'ny Elastic Snapshots dia nalaina tamin'ny angon-drakitra tany am-boalohany. Ny zava-misy dia ny Postgres tamin'ny voalohany dia tsy nahazaka ny fikarohana araka ny fepetra rehetra. Tsy vitan'ny hoe maro ny indexes, afaka mifanipaka ihany koa izy ireo, ka very ny fandaharam-potoana Postgres ary tsy nahatakatra izay index ampiasaina.

2. Manaraka izany ny fizarana vaovao. Mipoitra isan'andro ao amin'ny tranokala ny famoahana mba tsy ho very amin'ny fikorianan'ny vaovao ny mpampiasa, tsy maintsy alamina ny angon-drakitra alohan'ny hamoahana azy. Izany no tadiavina: azonao atao ny mikaroka ny tranokala amin'ny alàlan'ny lalao lahatsoratra, ary mampifandray ireo sivana fanampiny, satria vita amin'ny alàlan'ny Elastic ihany koa.

3. Avy eo dia nafindranay ny fanodinana ny varotra. Ny mpampiasa dia afaka mividy vokatra iray ao amin'ny tranokala ary mandray anjara amin'ny fisarihana loka. Aorian'ny fividianana toy izany dia manodina angon-drakitra be dia be izahay, indrindra amin'ny faran'ny herinandro sy ny fialantsasatra. Raha ampitahaina, raha amin'ny andro mahazatra ny isan'ny fividianana dia eo anelanelan'ny 1,5-2 tapitrisa, dia mety hahatratra 53 tapitrisa ny isa amin'ny fialantsasatra.

Mandritra izany fotoana izany, ny angon-drakitra dia tsy maintsy karakaraina ao anatin'ny fotoana fohy indrindra - ny mpampiasa dia tsy tia miandry ny vokatra mandritra ny andro maromaro. Tsy misy fomba hahatratrarana fe-potoana toy izany amin'ny alàlan'ny Postgres - matetika izahay no nahazo hidin-trano, ary nandritra ny fikarakarana ny fangatahana rehetra dia tsy afaka nanamarina ny mpampiasa raha nahazo loka izy ireo na tsia. Tsy dia mahafinaritra loatra amin'ny orinasa izany, ka nafindranay tany amin'ny Elasticsearch ny fanodinana.

periodicity

Ankehitriny ny fanavaozana dia namboarina mifototra amin'ny hetsika, araka ireto fepetra manaraka ireto:

  1. Point de varotra. Raha vao mahazo angona avy amin'ny loharano ivelany izahay dia manomboka ny fanavaozana avy hatrany.
  2. Vaovao. Raha vao misy vaovao voaova ao amin'ny tranokala dia alefa ho azy any amin'ny Elastic izany.

Eto indray dia ilaina ny manonona ny tombony amin'ny Elastic. Ao amin'ny Postgres, rehefa mandefa fangatahana ianao dia tsy maintsy miandry mandra-pahavitan'izy ireo am-pahatsorana ny firaketana rehetra. Afaka mandefa rakitra 10 any amin'ny Elastic ianao ary manomboka miasa avy hatrany, tsy miandry ny fizarana ireo rakitra amin'ny Shards rehetra. Mazava ho azy fa mety tsy hahita ny angon-drakitra avy hatrany ny Shard na Replica sasany, fa ho hita tsy ho ela ny zava-drehetra.

Fomba fampidirana

Misy fomba 2 hidirana amin'ny Elastic:

  1. Amin'ny alàlan'ny mpanjifa teratany amin'ny TCP. Ny mpamily tompon-tany dia maty tsikelikely: tsy tohanana intsony, manana fehezanteny tsy mety. Noho izany, saika tsy mampiasa azy io izahay ary miezaka ny miala tanteraka.
  2. Amin'ny alàlan'ny interface HTTP izay afaka mampiasa ny fangatahana JSON sy ny syntax Lucene. Ny farany dia maotera lahatsoratra izay mampiasa Elastic. Amin'ity dikan-teny ity dia mahazo ny fahafahana manao Batch amin'ny alàlan'ny fangatahana JSON amin'ny HTTP. Ity no safidy ezahina ampiasaina.

Noho ny interface HTTP, dia afaka mampiasa tranomboky izay manome fampiharana asynchronous ny mpanjifa HTTP izahay. Afaka manararaotra ny Batch sy ny API asynchronous isika, izay miteraka fampisehoana avo lenta, izay nanampy betsaka tamin'ny andron'ny fampiroboroboana lehibe (bebe kokoa momba izany etsy ambany)

Isaky ny fampitahana:

  • Mitahiry mpampiasa Postgres bounty amin'ny kofehy 20 tsy misy vondrona: 460713 rakitra ao anatin'ny 42 segondra
  • Mpanjifa elastika + mihetsika ho an'ny kofehy 10 + batch ho an'ny singa 1000: 596749 firaketana ao anatin'ny 11 segondra
  • Elastic + reactive client ho an'ny kofehy 10 + batch ho an'ny singa 1000: 23801684 azo alefa ao anatin'ny 4 minitra

Ankehitriny dia nanoratra mpitantana fangatahana HTTP izahay izay manangana JSON ho Batch / tsy Batch ary mandefa izany amin'ny alàlan'ny mpanjifa HTTP rehetra, na inona na inona tranomboky. Azonao atao ihany koa ny misafidy ny handefa fangatahana miaraka na asynchronously.

Amin'ny fampidirana sasany dia mbola mampiasa ny mpanjifan'ny fitaterana ofisialy izahay, fa resaka refactoring manaraka fotsiny izany. Amin'ity tranga ity, mpanjifa mahazatra naorina amin'ny fototry ny Spring WebClient dia ampiasaina amin'ny fanodinana.

Fanatsarana ny entana amin'ny tetikasa Highload miaraka amin'ny ElasticSearch

fampiroboroboana lehibe

Indray mandeha isan-taona, ny tetikasa dia mampiantrano fampiroboroboana lehibe ho an'ny mpampiasa - io ihany no Highload, satria amin'izao fotoana izao dia miara-miasa amin'ny mpampiasa an-tapitrisany izahay amin'ny fotoana iray.

Matetika ny tampon'ny enta-mavesatra dia mitranga mandritra ny fialantsasatra, saingy amin'ny ambaratonga hafa tanteraka ity fampiroboroboana ity. Ny taona talohan'ny farany, tamin'ny andron'ny fampiroboroboana, dia namidy entana 27 izahay. Nokarakaraina nandritra ny antsasak'adiny mahery ny angona, izay niteraka fahasahiranana ho an'ny mpampiasa. Nahazo loka ho an'ny fandraisana anjara ireo mpampiasa, saingy hita fa mila fanafainganana ny dingana.

Tamin'ny fiandohan'ny taona 2019, nanapa-kevitra izahay fa mila ElasticSearch. Nandritra ny taona iray manontolo dia nandamina ny fanodinana ny angon-drakitra voaray amin'ny Elastic sy ny famoahana azy ireo amin'ny api ny fampiharana finday sy ny tranokala. Vokatr'izany, ny taona manaraka nandritra ny fampielezan-kevitra, dia nokarakarainay 15 ny fidirana tao anatin'ny 131 minitra.

Koa satria be dia be ny olona te hividy entana sy handray anjara amin'ny fisarihana ny loka amin'ny fampiroboroboana, dia fepetra vonjimaika izany. Ankehitriny dia mandefa vaovao farany amin'ny Elastic izahay, fa amin'ny ho avy dia mikasa ny hamindra ny fampahalalana voatahiry nandritra ny volana lasa tany amin'ny Postgres ho fitahirizana maharitra. Mba tsy hanenana ny elastic index, izay manana ny fetrany ihany koa.

Fehiny/Fehin-kevitra

Amin'izao fotoana izao, nafindranay ny serivisy rehetra izay tadiavinay amin'ny Elastic ary naato amin'izao fotoana izao. Ankehitriny dia manangana index ao amin'ny Elastic izahay eo an-tampon'ny fitahirizana maharitra ao amin'ny Postgres, izay mandray ny enta-mavesatry ny mpampiasa.

Amin'ny ho avy dia mikasa ny hamindra tolotra izahay raha takatsika fa lasa isan-karazany loatra ny angona angona ary karohina amin'ny tsanganana tsy misy fetra. Tsy asa ho an'ny Postgres intsony izany.

Raha mila fikarohana an-tsoratra feno amin'ny fampiasa isika na manana fepetra fikarohana maro samihafa, dia efa fantatsika fa mila adika amin'ny Elastic izany.

⌘⌘⌘

Misaotra namaky. Raha mampiasa ElasticSearch koa ny orinasanao ary manana tranga fampiharana azy manokana, dia lazao aminay. Mahaliana ny mahafantatra ny momba ny hafa 🙂

Source: www.habr.com

Add a comment