Nkwalite ibu na oru Highload na ElasticSearch

Ndewo, Habr! Aha m bụ Maxim Vasiliev, m na-arụ ọrụ dị ka onye nyocha na onye njikwa ọrụ na FINCH. Taa ọ ga-amasị m ịgwa gị otu, iji ElasticSearch, anyị nwere ike hazie ajụjụ nde 15 na nkeji 6 wee bulie ibu kwa ụbọchị na saịtị nke otu ndị ahịa anyị. N'ụzọ dị mwute, anyị ga-eme n'enweghị aha, ebe anyị nwere NDA, anyị na-atụ anya na ọdịnaya nke isiokwu ahụ agaghị ata ahụhụ site na nke a. Ka a pụọ.

Ka oru ngo si arụ ọrụ

Na azụ azụ anyị, anyị na-emepụta ọrụ na-ahụ maka ọrụ nke weebụsaịtị ndị ahịa anyị na ngwa mkpanaka. Enwere ike ịhụ nhazi nke izugbe na eserese a:

Nkwalite ibu na oru Highload na ElasticSearch

N'ime usoro ọrụ, anyị na-edozi ọnụ ọgụgụ dị ukwuu nke azụmahịa: ịzụrụ, ịkwụ ụgwọ, azụmahịa na nkwụnye ego nke onye ọrụ, nke anyị na-echekwa ọtụtụ ndekọ, na-ebubata na mbupụ data a na usoro mpụga.

Enwekwara usoro ntụgharị mgbe anyị nwetara data sitere n'aka onye ahịa wee bufee ya onye ọrụ. Na mgbakwunye, enwerekwa usoro maka ịrụ ọrụ na ịkwụ ụgwọ na mmemme ego.

Nzụlite dị nkenke

Na mbido, anyị ji PostgreSQL dị ka naanị nchekwa data anyị. Uru ya bụ ọkọlọtọ maka DBMS: ọnụnọ nke azụmahịa, asụsụ eweghachi data emepụtara, ọtụtụ ngwaọrụ maka ntinye; jikọtara na ezi arụmọrụ na-egbo mkpa anyị maka a pụtara ogologo oge.

Anyị na-echekwa data niile na Postgres: site na azụmahịa ruo na akụkọ. Ma ọnụ ọgụgụ nke ndị ọrụ toro, yana ọnụ ọgụgụ nke arịrịọ.

Iji ghọta, ọnụ ọgụgụ kwa afọ nke nnọkọ na 2017 na saịtị desktọpụ naanị bụ nde 131. Na 2018 - nde 125. Na 2019 ọzọ nde 130. Tinye ọzọ 100-200 nde site na mobile version nke saịtị na mobile ngwa, na ị ga-enweta ọnụ ọgụgụ dị ukwuu nke arịrịọ.

Ka oru ngo a na-eto, Postgres enwekwaghị ike ịnagide ibu ahụ; anyị enweghị ike ijide - ọnụ ọgụgụ dị ukwuu nke ajụjụ dị iche iche pụtara, nke anyị enweghị ike ịmepụta ọnụ ọgụgụ zuru ezu nke ndeksi.

Anyị ghọtara na ọ dị mkpa maka ụlọ ahịa data ndị ọzọ nke ga-egbo mkpa anyị ma wepụ ibu ahụ PostgreSQL. A tụlere Elasticsearch na MongoDB dị ka nhọrọ enwere ike. Nke ikpeazụ tụfuru na isi ihe ndị a:

  1. Ọsọ ntụnye nwayọ nwayọ ka oke data dị na ndeksi na-eto. Na Elastic, ọsọ anaghị adabere na ọnụọgụ data.
  2. Enweghị ọchụchọ ederede zuru ezu

Ya mere, anyị họọrọ Elastic maka onwe anyị ma kwadebe maka mgbanwe.

Ntughari na Elastic

1. Anyị malitere mgbanwe site na ọrụ nchọta ihe ire ere. Onye ahịa anyị nwere ngụkọta nke ihe dị ka 70 ire ere, ma n'otu oge ahụ, achọrọ ọtụtụ ụdị ọchụchọ na webụsaịtị na ngwa:

  • Ọchụchọ ederede site na aha mpaghara
  • Geosearch n'ime radius enyere site n'otu ebe. Dịka ọmụmaatụ, ọ bụrụ na onye ọrụ chọrọ ịhụ ebe ahịa kacha nso n'ụlọ ya.
  • Chọọ site na square nyere - onye ọrụ na-akọwapụta square na maapụ, na isi ihe niile dị na radius a na-egosi ya.
  • Chọọ site na nzacha ndị ọzọ. Ọnụ ahịa ahịa dị iche na ibe ya n'ụdị dị iche iche

N'ikwu okwu banyere nzukọ ahụ, na Postgres anyị nwere isi iyi data maka maapụ na akụkọ, na Elastic anyị na-eme Snapshots site na data mbụ. Nke bụ eziokwu bụ na na mbụ Postgres enweghị ike ịnagide ịchọ ihe niile. Ọbụghị naanị na enwere ọtụtụ ndenye aha, ha nwekwara ike ịgbakọ, yabụ onye nhazi Postgres furu efu ma ọ ghọtaghị nke ndeksi ga-eji.

2. Ọzọ n'ahịrị bụ ngalaba akụkọ. Mbipụta na-apụta na saịtị kwa ụbọchị ka onye ọrụ ghara ịla n'iyi na ntinye nke ozi, a ga-edozi data tupu ịnye ya. Nke a bụ ihe a na-achọ: na saịtị ị nwere ike ịchọ site na ederede ederede, ma n'otu oge ahụ jikọọ ihe nzacha ndị ọzọ, ebe ọ bụ na a na-eme ha site na Elastic.

3. Mgbe ahụ, anyị kwagara nhazi azụmahịa. Ndị ọrụ nwere ike ịzụta otu ngwaahịa na saịtị ahụ wee sonye na ntinye ihe nrite. Mgbe ịzụrụ ihe dị otú ahụ, anyị na-ahazi nnukwu data, karịsịa na ngwụsị izu na ezumike. Maka ntụnyere, ọ bụrụ na n'ụbọchị nkịtị ọnụ ọgụgụ nke ịzụrụ ihe dị gburugburu 1,5-2 nde, mgbe ahụ na ezumike ọnụ ọgụgụ ahụ nwere ike iru 53 nde.

N'otu oge ahụ, a ga-ahazi data ahụ n'ime obere oge - ndị ọrụ anaghị achọ ichere ọtụtụ ụbọchị maka nsonaazụ. Enweghị ụzọ iji nweta oge ngwụcha dị otú ahụ site na Postgres - anyị na-enwetakarị ngọngọ, na ka anyị na-ahazi arịrịọ niile, ndị ọrụ enweghị ike ịlele ma ha nwetara ihe nrite ma ọ bụ na ha enwetaghị. Nke a anaghị atọ ụtọ maka azụmaahịa, yabụ anyị bufere nhazi ahụ na Elasticsearch.

Oge oge

Ugbu a, ahaziri mmelite dabere na mmemme, dịka ọnọdụ ndị a siri dị:

  1. Ebe ire ere. Ozugbo anyị nwetara data sitere na isi mmalite, anyị na-ebulite mmelite ozugbo.
  2. Akụkọ. Ozugbo edeziri akụkọ ọ bụla na saịtị ahụ, a na-eziga ya na Elastic ozugbo.

N'ebe a ọzọ, ọ bara uru ịkọwa uru nke Elastic. Na Postgres, mgbe ị na-eziga arịrịọ, ịkwesịrị ichere ruo mgbe ọ na-ahazi ndekọ niile n'eziokwu. Ị nwere ike izipu ihe ndekọ 10 puku na Elastic wee malite ịrụ ọrụ ozugbo, na-echeghị ka a ga-ekesa ihe ndekọ ahụ na Shards niile. N'ezie, ụfọdụ Shard ma ọ bụ oyiri nwere ike ọ gaghị ahụ data ozugbo, mana n'oge na-adịghị anya ihe niile ga-adị.

Ụzọ njikọta

Enwere ụzọ abụọ iji jikọta na Elastic:

  1. Site na onye ahịa obodo site na TCP. Onye ọkwọ ụgbọ ala obodo na-eji nwayọọ nwayọọ na-anwụ: anaghị akwado ya, na syntax ya adịghị mma. Ya mere, anyị anaghị eji ya eme ihe ma gbalịa ịhapụ ya kpamkpam.
  2. Site na interface HTTP nke ị nwere ike iji ma arịrịọ JSON na Lucene syntax. Nke ikpeazụ bụ igwe ederede nke Elastic na-eji. Na nhọrọ a, anyị ga-enweta ike Batch site na arịrịọ JSON karịa HTTP. Nke a bụ nhọrọ anyị na-agbalị iji.

Ekele dịrị HTTP interface, anyị nwere ike iji ọba akwụkwọ na-enye mmejuputa asynchronous nke onye ahịa HTTP. Anyị nwere ike iji Batch na API asynchronous, nke na-enye ọrụ dị elu, nke nyere aka nke ukwuu n'oge nnukwu nkwalite (karịa na nke a n'okpuru)

Ụfọdụ ọnụọgụgụ maka ntụnyere:

  • Ịchekwa ndị ọrụ natara ihe nrite na Postgres na eriri 20 na-enweghị otu: ndekọ 460713 na sekọnd 42
  • Onye ahịa Elastic + na-emeghachi omume maka eriri 10 + ogbe maka ihe 1000: ndekọ 596749 na sekọnd 11
  • Onye ahịa na-agbanwe + na-emeghachi omume maka eriri iri + maka ihe 10: 23801684 ndekọ na nkeji 4

Ugbu a, anyị edeela onye njikwa arịrịọ HTTP nke na-ewuli JSON ka ọ bụrụ Batch/non-Batch wee ziga ya site na onye ahịa HTTP ọ bụla, n'agbanyeghị ọbá akwụkwọ. Ị nwekwara ike ịhọrọ izipu arịrịọ n'otu oge ma ọ bụ n'ekwekọghị.

N'ụfọdụ integrations anyị ka na-eji onye ọrụ njem njem, ma nke a bụ naanị okwu nke imeghari ozugbo. N'okwu a, a na-eji onye ahịa ya, nke e wuru na ndabere nke Spring WebClient, maka nhazi.

Nkwalite ibu na oru Highload na ElasticSearch

Nnukwu nkwalite

Otu ugboro n'afọ, ọrụ ahụ na-akwado nnukwu nkwalite maka ndị ọrụ - nke a bụ otu Highload, ebe ọ bụ na n'oge a anyị na-arụ ọrụ na iri nde nde ndị ọrụ n'otu oge.

Na-emekarị, nnukwu ibu na-eme n'oge ezumike, mana nkwalite a dị na ọkwa dị iche iche. N'afọ gara aga, n'ụbọchị nkwalite ahụ, anyị rere nkeji 27. Ihe data ahụ were ihe karịrị ọkara elekere iji hazie, nke butere ndị ọrụ nsogbu. Ndị ọrụ nwetara ihe nrite maka nsonye, ​​mana ọ bịara doo anya na a ga-emerịrị usoro ahụ ngwa ngwa.

Ná mmalite nke 2019, anyị kpebiri na ElasticSearch dị mkpa. Ruo otu afọ, anyị haziri nhazi nke data natara na Elastic na mmepụta ya na API nke ngwa mkpanaka na weebụsaịtị. N'ihi ya, n'afọ ọzọ n'oge nkwalite anyị hazie Ndenye 15 na nkeji 131.

Ebe ọ bụ na anyị nwere ọtụtụ ndị chọrọ ịzụta ngwaahịa ahụ ma sonye na ntinye ihe nrite na nkwalite anyị, nke a bụ ihe na-adịru nwa oge. Ugbu a, anyị na-eziga ozi ugbu a na Elastic, mana n'ọdịnihu anyị na-eme atụmatụ ịnyefe ozi echekwara maka ọnwa gara aga na Postgres dị ka nchekwa na-adịgide adịgide. Ka ọ ghara imechi index Elastic, nke nwekwara oke ya.

Mmechi/Mkpebi

Ugbu a, anyị ebugharịla ọrụ niile anyị chọrọ na Elastic ma kwụsịtụrụ ugbu a. Ugbu a, anyị na-ewu index na Elastic n'elu isi nchekwa na-adịgide adịgide na Postgres, nke na-ebu ibu onye ọrụ.

N'ọdịnihu, anyị na-eme atụmatụ ịnyefe ọrụ ma ọ bụrụ na anyị ghọtara na arịrịọ data na-adịwanye iche na a na-achọkwa ọnụ ọgụgụ na-enweghị njedebe nke kọlụm. Nke a abụghịzi ọrụ maka Postgres.

Ọ bụrụ na anyị chọrọ nchọta ederede zuru oke na arụ ọrụ ma ọ bụ ọ bụrụ na anyị nwere ọtụtụ njirisi ọchụchọ dị iche iche, mgbe ahụ anyị amaralarị na nke a kwesịrị ịtụgharị n'ime Elastic.

⌘⌘⌘

Daalụ maka ịgụ akwụkwọ. Ọ bụrụ na ụlọ ọrụ gị na-ejikwa ElasticSearch ma nwee ikpe mmejuputa iwu nke gị, biko gwa anyị. Ọ ga-adọrọ mmasị ịmara ka ndị ọzọ si eme :)

isi: www.habr.com

Tinye a comment