L-ottimizzazzjoni tat-tagħbija fuq proġett Highload b'ElasticSearch

Ħej Habr! Jisimni Maxim Vasiliev, naħdem bħala analista u maniġer tal-proġett f'FINCH. Illum nixtieq ngħidlek kif, bl-użu ta 'ElasticSearch, stajna nipproċessaw 15-il miljun talba f'6 minuti u ottimizzaw it-tagħbijiet ta' kuljum fuq is-sit ta 'wieħed mill-klijenti tagħna. Sfortunatament, ikollna nagħmlu mingħajr ismijiet, peress li għandna NDA, nittamaw li l-kontenut tal-artiklu ma jbatix minn dan. Tlaqna.

Kif jaħdem il-proġett

Fuq backend tagħna, noħolqu servizzi li jiżguraw il-prestazzjoni tal-websajts tal-klijenti tagħna u l-applikazzjoni mobbli. L-istruttura ġenerali tista' tidher fid-dijagramma:

L-ottimizzazzjoni tat-tagħbija fuq proġett Highload b'ElasticSearch

Fil-proċess tax-xogħol, aħna nipproċessaw numru kbir ta 'tranżazzjonijiet: xiri, ħlasijiet, operazzjonijiet b'bilanċi tal-utenti, li għalihom aħna naħżnu ħafna zkuk, kif ukoll nimportaw u nesportaw din id-dejta għal sistemi esterni.

Hemm ukoll proċessi inversi meta nirċievu data mill-klijent u tittrasferiha lill-utent. Barra minn hekk, għad hemm proċessi biex taħdem ma 'pagamenti u programmi ta' bonus.

Sfond qasir

Inizjalment, użajna PostgreSQL bħala l-uniku maħżen tad-dejta. Il-vantaġġi standard tiegħu għal DBMS: il-preżenza ta 'tranżazzjonijiet, lingwa żviluppata għall-kampjunar tad-dejta, firxa wiesgħa ta' għodod għall-integrazzjoni; flimkien ma 'prestazzjoni tajba sodisfatti l-bżonnijiet tagħna għal żmien pjuttost twil.

Aħna ħżinna d-dejta assolutament kollha f'Postgres: minn tranżazzjonijiet għall-aħbarijiet. Iżda n-numru ta 'utenti kiber, u magħha n-numru ta' talbiet.

Għal fehim, in-numru annwali ta 'sessjonijiet fl-2017 biss fuq is-sit tad-desktop huwa 131 miljun. Fl-2018 - 125 miljun. 2019 għal darb'oħra 130 miljun. Żid 100-200 miljun oħra mill-verżjoni mobbli tas-sit u l-applikazzjoni mobbli, u int se tikseb numru kbir ta 'talbiet.

Bit-tkabbir tal-proġett, Postgres waqaf ilaħħaq mat-tagħbija, ma kellniex ħin - dehru numru kbir ta 'mistoqsijiet varji, li għalihom ma stajniex noħolqu numru suffiċjenti ta' indiċi.

Aħna fhimna li kien hemm ħtieġa għal ħwienet tad-dejta oħra li jipprovdu l-bżonnijiet tagħna u jneħħu t-tagħbija PostgreSQL. Elasticsearch u MongoDB tqiesu bħala għażliet possibbli. Dan tal-aħħar tilef fuq il-punti li ġejjin:

  1. Veloċità ta 'indiċjar bil-mod hekk kif l-ammont ta' dejta fl-indiċi jikber. B'Elastic, il-veloċità ma tiddependix fuq l-ammont ta 'dejta.
  2. L-ebda tfittxija bit-test sħiħ

Allura għażilna Elastic għalina nfusna u ppreparajna għat-tranżizzjoni.

Transizzjoni għal Elastiku

1. Bdejna t-tranżizzjoni mis-servizz ta 'tfittxija tal-punt tal-bejgħ. Il-klijent tagħna għandu total ta 'madwar 70 punt ta' bejgħ, u dan jeħtieġ diversi tipi ta 'tfittxijiet fuq is-sit u fl-applikazzjoni:

  • Tfittxija bit-test bl-isem tal-belt
  • Geosearch f'raġġ partikolari minn xi punt. Pereżempju, jekk l-utent irid jara liema punti tal-bejgħ huma l-eqreb tad-dar tiegħu.
  • Fittex minn kwadru partikolari - l-utent jiġbed kwadru fuq il-mappa, u l-punti kollha f'dan ir-raġġ jintwerew lilu.
  • Fittex minn filtri addizzjonali. Il-punti tal-bejgħ huma differenti minn xulxin fl-assortiment

Jekk nitkellmu dwar l-organizzazzjoni, allura f'Postgres għandna sors ta 'dejta kemm għall-mappa kif ukoll għall-aħbarijiet, u f'Elastic Snapshots jittieħdu mid-dejta oriġinali. Il-fatt hu li inizjalment Postgres ma setax ilaħħaq mat-tfittxija bil-kriterji kollha. Mhux biss kien hemm ħafna indiċi, jistgħu wkoll jikkoinċidu, u għalhekk l-iskedar Postgres intilef u ma fehemx liema indiċi għandu juża.

2. Li jmiss kienet is-sezzjoni tal-aħbarijiet. Pubblikazzjonijiet jidhru fuq is-sit kuljum sabiex l-utent ma jintilifx fil-fluss ta 'informazzjoni, id-dejta trid tiġi magħżula qabel ma toħroġ. Din hija t-tfittxija għal: tista 'tfittex is-sit skond it-test match, u fl-istess ħin tgħaqqad filtri addizzjonali, peress li huma wkoll magħmula permezz ta' Elastic.

3. Imbagħad imċaqlaq l-ipproċessar tat-tranżazzjoni. L-utenti jistgħu jixtru ċertu prodott fuq is-sit u jipparteċipaw fi tlugħ tal-premjijiet. Wara xiri bħal dan, nipproċessaw ammont kbir ta 'dejta, speċjalment fi tmiem il-ġimgħa u vaganzi. Għal tqabbil, jekk fil-ġranet ordinarji n-numru ta 'xiri huwa x'imkien bejn 1,5-2 miljun, allura fil-vaganzi iċ-ċifra tista' tilħaq 53 miljun.

Fl-istess ħin, id-dejta trid tiġi pproċessata fl-iqsar żmien possibbli - l-utenti ma jħobbux jistennew ir-riżultat għal diversi jiem. M'hemm l-ebda mod kif niksbu skadenzi bħal dawn permezz ta' Postgres - ħafna drabi aħna rċevejna serraturi, u waqt li konna qed nipproċessaw it-talbiet kollha, l-utenti ma setgħux jiċċekkjaw jekk irċevewx premjijiet jew le. Dan mhux pjaċevoli ħafna għan-negozju, għalhekk ċċaqlaqna l-ipproċessar għal Elasticsearch.

Perjodiċità

Issa l-aġġornamenti huma kkonfigurati bbażati fuq l-avvenimenti, skont il-kundizzjonijiet li ġejjin:

  1. Punti tal-bejgħ. Hekk kif nirċievu data minn sors estern, nibdew immedjatament l-aġġornament.
  2. Aħbarijiet. Hekk kif kwalunkwe aħbar tiġi editjata fuq is-sit, tintbagħat awtomatikament lil Elastic.

Hawnhekk għal darb'oħra ta 'min isemmi l-vantaġġi ta' Elastic. F'Postgres, meta tibgħat talba, trid tistenna sakemm tipproċessa b'mod onest ir-rekords kollha. Tista 'tibgħat 10 rekord lil Elastic u tibda taħdem immedjatament, mingħajr ma tistenna li r-rekords jitqassmu fl-Shards kollha. Naturalment, xi Shard jew Replica jistgħu ma jarawx id-dejta mill-ewwel, iżda kollox se jkun disponibbli dalwaqt.

Metodi ta' integrazzjoni

Hemm 2 modi kif tintegra ma' Elastic:

  1. Permezz ta 'klijent nattiv fuq TCP. Is-sewwieq nattiv qed imut gradwalment: m'għadux appoġġjat, għandu sintassi inkonvenjenti ħafna. Għalhekk, aħna prattikament ma nużawhiex u nippruvaw nabbandunawha kompletament.
  2. Permezz ta 'interface HTTP li tista' tuża kemm talbiet JSON kif ukoll sintassi Lucene. L-aħħar waħda hija magna tat-test li tuża Elastic. F'din il-verżjoni, aħna jkollna l-abbiltà li Lott permezz ta 'talbiet JSON fuq HTTP. Din hija l-għażla li qed nippruvaw nużaw.

Grazzi għall-interface HTTP, nistgħu nużaw libreriji li jipprovdu implimentazzjoni asinkronika tal-klijent HTTP. Nistgħu nieħdu vantaġġ minn Batch u l-API mhux sinkroniku, li jirriżulta fi prestazzjoni għolja, li għen ħafna fil-jiem tal-promozzjoni kbira (aktar dwar dan hawn taħt)

Xi numri għal tqabbil:

  • Iffrankar ta' utenti ta' Bounty Postgres f'20 ħajt mingħajr raggruppament: 460713 rekords fi 42 sekonda
  • Klijent elastiku + reattiv għal 10 ħjut + lott għal 1000 element: 596749 rekords fi 11-il sekonda
  • Klijent elastiku + reattiv għal 10 ħjut + lott għal 1000 element: 23801684 entrati f'4 minuti

Issa ktibna maniġer tat-talbiet HTTP li jibni JSON bħala Lott/mhux Lott u jibgħatu permezz ta' kwalunkwe klijent HTTP, irrispettivament mil-librerija. Tista 'wkoll tagħżel li tibgħat it-talbiet b'mod sinkroniku jew mhux sinkroniku.

F'xi integrazzjonijiet, għadna nużaw il-klijent tat-trasport uffiċjali, iżda din hija biss kwistjoni tar-refactoring li jmiss. F'dan il-każ, klijent personalizzat mibni fuq il-bażi ta 'Spring WebClient jintuża għall-ipproċessar.

L-ottimizzazzjoni tat-tagħbija fuq proġett Highload b'ElasticSearch

promozzjoni kbira

Darba fis-sena, il-proġett jospita promozzjoni kbira għall-utenti - dan huwa l-istess Highload, peress li f'dan iż-żmien naħdmu ma 'għexieren ta' miljuni ta 'utenti fl-istess ħin.

Normalment il-qċaċet tat-tagħbijiet iseħħu matul il-vaganzi, iżda din il-promozzjoni hija fuq livell kompletament differenti. Is-sena ta 'qabel l-aħħar, fil-jum tal-promozzjoni, biegħna 27 unità ta' oġġetti. Id-dejta ġiet ipproċessata għal aktar minn nofs siegħa, li kkawża inkonvenjent għall-utenti. L-utenti rċevew premjijiet għall-parteċipazzjoni, iżda deher ċar li l-proċess jeħtieġ li jiġi aċċellerat.

Fil-bidu tal-2019, iddeċidejna li kellna bżonn ElasticSearch. Għal sena sħiħa, organizzajna l-ipproċessar tad-dejta riċevuta f'Elastic u l-ħruġ tagħhom fl-api tal-applikazzjoni mobbli u l-websajt. Bħala riżultat, is-sena d-dieħla matul il-kampanja, ipproċessajna 15 daħliet f'131 minuti.

Peress li għandna ħafna nies li jridu jixtru oġġetti u jipparteċipaw fit-tlugħ ta 'premjijiet fil-promozzjonijiet, din hija miżura temporanja. Issa qed nibagħtu informazzjoni aġġornata lil Elastic, iżda fil-futur qed nippjanaw li nittrasferixxu informazzjoni arkivjata għall-aħħar xhur lil Postgres bħala ħażna permanenti. Sabiex ma jinstaddux l-indiċi Elastiku, li għandu wkoll il-limitazzjonijiet tiegħu.

Konklużjoni/Konklużjonijiet

Bħalissa, ittrasferijna s-servizzi kollha li ridna lil Elastic u għamilna pawsa fuq dan għalissa. Issa qed nibnu indiċi f'Elastic fuq il-ħażna persistenti ewlenija f'Postgres, li tieħu f'idejha t-tagħbija tal-utent.

Fil-futur, qed nippjanaw li nittrasferixxu s-servizzi jekk nifhmu li t-talba tad-dejta ssir varjata wisq u tiġi mfittxija għal numru illimitat ta’ kolonni. Dan m'għadux kompitu għal Postgres.

Jekk għandna bżonn tfittxija bit-test sħiħ fil-funzjonalità jew jekk għandna ħafna kriterji ta 'tfittxija differenti, allura aħna diġà nafu li dan jeħtieġ li jiġi tradott f'Elastic.

⌘⌘⌘

Grazzi tal-qari. Jekk il-kumpanija tiegħek tuża wkoll ElasticSearch u għandha l-każijiet ta 'implimentazzjoni tagħha stess, allura għidilna. Ikun interessanti li tkun taf kif oħrajn huma 🙂

Sors: www.habr.com

Żid kumment