Kenya ts'ebetso ho projeke ea Highload ka ElasticSearch

Hey Habr! Lebitso la ka ke Maxim Vasiliev, ke sebetsa ke le mohlahlobi le mookameli oa morero ho FINCH. Kajeno ke rata ho u joetsa hore na, re sebelisa ElasticSearch, re khonne ho sebetsana le likopo tse limilione tse 15 ka metsotso e 6 joang le ho ntlafatsa meroalo ea letsatsi le letsatsi sebakeng sa e mong oa bareki ba rona. Ka bomalimabe, re tla tlameha ho etsa ntle le mabitso, kaha re na le NDA, re tšepa hore litaba tsa sehlooho li ke ke tsa hlokofatsoa ke sena. Ha re ee.

Kamoo morero o sebetsang kateng

Ka mokokotlo oa rona, re theha lits'ebeletso tse netefatsang ts'ebetso ea liwebsaete tsa bareki ba rona le lisebelisoa tsa mohala. Sebopeho se akaretsang se ka bonoa setšoantšong:

Kenya ts'ebetso ho projeke ea Highload ka ElasticSearch

Ha re ntse re sebetsa, re sebetsana le palo e kholo ea litšebelisano: ho reka, litefello, ts'ebetso e nang le litekanyo tsa basebelisi, tseo re li bolokang li-logs tse ngata, hammoho le ho kenya le ho romela lintlha tsena ho litsamaiso tsa kantle.

Ho boetse ho na le lits'ebetso tse khutlisetsang morao ha re fumana data ho tsoa ho moreki ebe re e fetisetsa ho mosebelisi. Ho phaella moo, ho ntse ho na le mekhoa ea ho sebetsa ka litefello le mananeo a bonase.

Semelo se khuts'oane

Qalong, re ne re sebelisa PostgreSQL e le eona feela lebenkele la data. Melemo ea eona e tloaelehileng bakeng sa DBMS: ho ba teng ha litšebelisano, puo e tsoetseng pele ea sampling ea data, lisebelisoa tse ngata tsa ho kopanya; ho kopantsoe le ts'ebetso e ntle e ile ea khotsofatsa litlhoko tsa rona ka nako e telele.

Re bolokile lintlha tsohle ho Postgres: ho tloha ho litšebelisano ho ea ho litaba. Empa palo ea basebelisi e ile ea eketseha, 'me ka eona palo ea likopo.

Bakeng sa kutloisiso, palo ea selemo le selemo ea mananeo a 2017 feela sebakeng sa desktop ke limilione tse 131. Ka 2018 - limilione tse 125. 2019 hape limilione tse 130. Eketsa tse ling tse limilione tse 100-200 ho tloha mocheng oa mohala oa sebaka le sesebelisoa sa mohala, 'me u e tla fumana palo e kholo ea likopo.

Ka kholo ea morero, Postgres o ile a khaotsa ho sebetsana le mojaro, re ne re se na nako - ho ile ha hlaha palo e kholo ea lipotso tse sa tšoaneng, tseo re neng re sitoa ho etsa palo e lekaneng ea li-index.

Re ne re utloisisa hore ho na le tlhokahalo ea mabenkele a mang a data a neng a tla fana ka litlhoko tsa rona le ho tlosa mojaro ho PostgreSQL. Elasticsearch le MongoDB li ne li nkuoa e le likhetho tse ka khonehang. Ba ho qetela ba lahlehetsoe ke lintlha tse latelang:

  1. Lebelo le butle la indexing ha palo ea data ho index e ntse e hola. Ka Elastic, lebelo ha le itšetlehe ka bongata ba data.
  2. Ha ho patlo e felletseng ea mongolo

Kahoo re ile ra ikhethela Elastic mme ra itokisetsa phetoho.

Phetoho ho Elastic

1. Re qalile phetoho ho tloha sebakeng sa thekiso ea tšebeletso ea ho batla. Moreki oa rona o na le kakaretso ea lintlha tse ka bang 70 tsa thekiso, 'me sena se hloka mefuta e mengata ea lipatlisiso sebakeng sa marang-rang le ts'ebelisong:

  • Batla mongolo ka lebitso la toropo
  • Geosearch ka hare ho radius e fanoeng ho tloha sebakeng se itseng. Mohlala, haeba mosebelisi a batla ho bona hore na ke libaka life tsa thekiso tse haufi le ntlo ea hae.
  • Batla ka lisekoere tse fanoeng - mosebelisi o taka lisekoere 'mapeng, 'me o bontšoa lintlha tsohle sebakeng sena.
  • Batla ka li-filters tse ling. Lintlha tsa thekiso li fapana ho tse ling ka mefuta e fapaneng

Haeba re bua ka mokhatlo, joale ho Postgres re na le mohloli oa boitsebiso bakeng sa 'mapa le litaba,' me ho Elastic Snapshots e nkiloe boitsebisong ba pele. 'Nete ke hore qalong Postgres e ne e sitoa ho sebetsana le lipatlisiso ka mekhoa eohle. Ha se feela hore ho ne ho e-na le li-index tse ngata, li ne li ka boela tsa fetana, kahoo kemiso ea Postgres e ile ea lahleha 'me ha e utloisise hore na e sebelise index efe.

2. E latelang moleng e ne e le karolo ea litaba. Lingoliloeng li hlaha sebakeng sa marang-rang letsatsi le leng le le leng e le hore mosebelisi a se ke a lahleheloa ke phallo ea tlhahisoleseling, data e tlameha ho hlophisoa pele e fanoa. Sena ke seo patlo e se batlang: o ka batla sebaka sa marang-rang ka ho bapisa mongolo, 'me ka nako e ts'oanang hokela li-filters tse ling, kaha li entsoe ka Elastic.

3. Eaba re tsamaisa ts'ebetso ea transaction. Basebelisi ba ka reka sehlahisoa se itseng sebakeng sa marang-rang mme ba nka karolo ho rala moputso. Ka mor'a ho reka joalo, re sebetsana le palo e kholo ea data, haholo-holo mafelo-beke le matsatsi a phomolo. Ha ho bapisoa, haeba ka matsatsi a tloaelehileng palo ea theko e pakeng tsa limilione tse 1,5-2, joale ka matsatsi a phomolo palo e ka fihla ho limilione tse 53.

Ka nako e ts'oanang, data e tlameha ho sebetsoa ka nako e khuts'oane - basebelisi ha ba rate ho emela sephetho ka matsatsi a 'maloa. Ha ho na mokhoa oa ho fihlela linako tse joalo ka Postgres - hangata re ne re fumana liloko, 'me ha re ntse re sebetsana le likopo tsohle, basebelisi ba ne ba sitoa ho hlahloba hore na ba fumane meputso kapa che. Sena ha se monate haholo khoebong, kahoo re ile ra fetisetsa ts'ebetso ho Elasticsearch.

Periodicity

Hona joale lintlafatso li hlophisitsoe ho ipapisitsoe le liketsahalo, ho latela maemo a latelang:

  1. Lintlha tsa thekiso. Hang ha re fumana data ho tsoa mohloling o kantle, hang-hang re qala ntlafatso.
  2. Litaba. Hang ha litaba life kapa life li hlophisitsoe sebakeng sa marang-rang, li romelloa ka bo eona ho Elastic.

Mona hape ke habohlokoa ho bua ka melemo ea Elastic. Ho Postgres, ha o romella kopo, o tlameha ho ema ho fihlela e sebetsana le litlaleho tsohle ka botšepehi. U ka romella lirekoto tse 10 ho Elastic 'me u qale ho sebetsa hang-hang, ntle le ho emela hore lirekoto li ajoe ho Shards kaofela. Ehlile, Shard kapa Replica e 'ngoe e kanna ea se bone data hang hang, empa tsohle li tla fumaneha haufinyane.

Mekhoa ea ho kopanya

Ho na le mekhoa e 'meli ea ho kopanya le Elastic:

  1. Ka moreki oa matsoalloa ho feta TCP. Mokhanni oa letsoalloa o ntse a shoa butle-butle: ha e sa tšehetsoa, ​​e na le syntax e sa thabiseng haholo. Ka hona, ha re e sebelise mme re leka ho e lahla ka botlalo.
  2. Ka sebopeho sa HTTP se ka sebelisang likopo tsa JSON ka bobeli le syntax ea Lucene. Ea ho qetela ke enjene ea mongolo e sebelisang Elastic. Phetolelong ena, re fumana bokhoni ba ho Batch ka likopo tsa JSON ka HTTP. Ena ke khetho eo re lekang ho e sebelisa.

Ka lebaka la sebopeho sa HTTP, re ka sebelisa lilaebrari tse fanang ka ts'ebetsong e sa tsitsang ea moreki oa HTTP. Re ka nka monyetla ka Batch le API ea asynchronous, e hlahisang ts'ebetso e phahameng, e thusitseng haholo matsatsing a papatso e kholo (ho feta ka tlase)

Linomoro tse ling ho bapisa:

  • Ho boloka basebelisi ba bounty ba Postgres ka likhoele tse 20 ntle le lihlopha: 460713 rekoto ka metsotsoana e 42
  • Elastic + moreki ea sebetsang bakeng sa likhoele tse 10 + batch bakeng sa likarolo tse 1000: lirekoto tse 596749 ka metsotsoana e 11.
  • Moreki oa Elastic + ea sebetsang bakeng sa likhoele tse 10 + batch bakeng sa likarolo tse 1000: Kenyeletso ea 23801684 ka metsotso e 4

Hona joale re ngotse mookameli oa kopo ea HTTP e hahang JSON e le Batch / eseng Batch mme e e romela ka mofani ofe kapa ofe oa HTTP, ho sa tsotellehe laebrari. U ka boela ua khetha ho romela likopo ka mokhoa o lumellanang kapa ka mokhoa o lumellanang.

Likopanong tse ling, re ntse re sebelisa moreki oa semolao oa lipalangoang, empa sena ke taba feela ea phetoho e latelang. Tabeng ena, moreki oa tloaelo o hahiloeng motheong oa Spring WebClient o sebelisetsoa ho sebetsa.

Kenya ts'ebetso ho projeke ea Highload ka ElasticSearch

papatso e kholo

Hang ka selemo, morero ona o fana ka papatso e kholo bakeng sa basebelisi - ena ke Highload e tšoanang, kaha ka nako ena re sebetsa le basebelisi ba limilione tse mashome ka nako e le 'ngoe.

Hangata litlhōrō tsa meroalo li etsahala nakong ea matsatsi a phomolo, empa papatso ena e boemong bo fapaneng ka ho feletseng. Selemong se fetileng, ka letsatsi la papatso, re ile ra rekisa thepa ea 27. Lintlha li ile tsa sebetsoa nako e fetang halofo ea hora, e leng se ileng sa baka tšitiso ho basebelisi. Basebelisi ba ile ba fumana meputso bakeng sa ho kenya letsoho, empa ho ile ha hlaka hore mokhoa ona o lokela ho potlakisoa.

Qalong ea 2019, re nkile qeto ea hore re hloka ElasticSearch. Ka selemo kaofela, re hlophisitse ts'ebetso ea data e fumanoeng ho Elastic le phano ea bona ho api ea sesebelisoa sa mehala le webosaete. Ka lebaka leo, selemong se hlahlamang nakong ea phutuho, re ile ra sebetsa 15 kenyeletso ka metsotso e 131.

Kaha re na le batho ba bangata ba batlang ho reka thepa le ho kenya letsoho setšoantšong sa meputso ho phahamiso, ena ke tekanyo ea nakoana. Hona joale re romella lintlha tsa morao-rao ho Elastic, empa nakong e tlang re rera ho fetisetsa boitsebiso bo bolokiloeng bakeng sa likhoeli tse fetileng ho Postgres e le polokelo ea ka ho sa feleng. E le hore u se ke ua koala index ea Elastic, e nang le mefokolo ea eona.

Qetello/Qetello

Hajoale, re fetisitse lits'ebeletso tsohle tseo re neng re li batla ho Elastic mme re emisitse ho sena hajoale. Hona joale re ntse re haha ​​​​index ho Elastic ka holim'a polokelo ea mantlha e phehellang ho Postgres, e nkang mojaro oa mosebelisi.

Nakong e tlang, re rera ho fetisetsa lits'ebeletso haeba re utloisisa hore kopo ea data e fetoha e fapaneng haholo mme e batlisisoa ka palo e sa lekanyetsoang ea likholomo. Sena ha e sa le mosebetsi oa Postgres.

Haeba re hloka patlisiso ea mongolo o felletseng ts'ebetsong kapa haeba re na le mekhoa e mengata e fapaneng ea ho batla, joale re se re tseba hore sena se hloka ho fetoleloa ho Elastic.

⌘⌘⌘

Ke leboha ho bala. Haeba k'hamphani ea hau e sebelisa ElasticSearch 'me e na le linyeoe tsa eona tsa ts'ebetso, re bolelle. Ho tla ba monate ho tseba hore na ba bang ba joang 🙂

Source: www.habr.com

Eketsa ka tlhaloso