Kordhinta mashruuca Highload oo leh ElasticSearch

Haye Habr! Magacaygu waa Maxim Vasiliev, waxaan u shaqeeyaa sidii falanqeeye iyo maamulaha mashruuca ee FINCH. Maanta waxaan jeclaan lahaa inaan kuu sheego sida, annagoo adeegsanayna ElasticSearch, waxaan awoodnay inaan ku shaqeyno 15 milyan codsi gudahood 6 daqiiqo oo aan u wanaajino culeyska maalinlaha ah ee goobta mid ka mid ah macaamiisheenna. Nasiib darro, waa inaan sameynaa magac la'aan, maadaama aan leenahay NDA, waxaan rajeyneynaa in nuxurka maqaalku uusan ku dhicin tan. Aan tagno.

Sida mashruucu u shaqeeyo

Dhabarkayaga dambe, waxaanu ku abuurnaa adeegyo hubinaya waxqabadka mareegahayaga macmiilka iyo codsiga moobilka. Qaab dhismeedka guud waxaa lagu arki karaa jaantuska:

Kordhinta mashruuca Highload oo leh ElasticSearch

Habka shaqada, waxaan ka shaqeyneynaa tiro badan oo macaamil ganacsi ah: iibsiyada, lacag-bixinta, hawlgallada leh dheelitirnaanta isticmaalaha, taas oo aan ku kaydinno qoraallo badan, iyo sidoo kale soo dejinta iyo dhoofinta xogtan nidaamyada dibadda.

Waxa kale oo jira habab rogaal celis ah marka aan xogta ka helno macmiilka oo aan u wareejino isticmaalaha. Intaa waxaa dheer, waxaa weli jira habab loogu shaqeeyo lacag-bixinta iyo barnaamijyada gunnada.

Sooyaal kooban

Markii hore, waxaan u isticmaalnay PostgreSQL sida kaydka xogta kaliya. Faa'iidooyinka caadiga ah ee DBMS: joogitaanka macaamil ganacsi, luqad muunad xog ah oo horumarsan, qalabyo kala duwan oo isdhexgalka; oo lagu daray waxqabad wanaagsan ayaa qanciyay baahiyaheenna muddo dheer.

Waxaan ku kaydinay gabi ahaanba dhammaan xogta Postgres: laga bilaabo wax kala iibsiga ilaa wararka. Laakiin tirada isticmaalayaasha ayaa koray, oo ay la socoto tirada codsiyada.

Si loo fahmo, tirada kalfadhiyada sanadlaha ah ee 2017 kaliya ee goobta desktop-ka waa 131 milyan. 2018 - 125 milyan. 2019 mar kale 130 milyan. Ku dar 100-200 milyan oo kale nooca mobilada ee goobta iyo codsiga mobilada, adigana waxay heli doontaa codsiyo tiro badan.

Kobaca mashruuca, Postgres waxay joojisay la qabsiga culeyska, ma haysanno waqti - tiro badan oo su'aalo kala duwan ah ayaa soo muuqday, kuwaas oo aan abuuri karin tiro ku filan oo tilmaame ah.

Waxaan fahamsanahay inay jirto baahi loo qabo dukaamada kale ee xogta kuwaas oo bixin doona baahidayada oo ka qaadi doona culeyska PostgreSQL. Elasticsearch iyo MongoDB ayaa loo tixgaliyay inay yihiin xulashooyin suurtagal ah. Tan dambe waxay ku khasaartay qodobbada soo socda:

  1. Xawaaraha tusmaynta tartiib tartiib ah marka tirada xogta ku jirta tusmooyinku ay koraan. Laastikada, xawaaruhu kuma xidhna cadadka xogta.
  2. Ma jiro raadin qoraal buuxa

Markaa waxaan dooranay Elastic nafteena oo aan u diyaarinay kala guurka.

U gudubka Laastikada

1. Waxaan ka bilownay kala-guurka barta adeegga raadinta iibka. Macmiilkayagu waxa uu haystaa wadar dhan 70 oo dhibcood oo iib ah, tanina waxa ay u baahantahay dhawr nooc oo baadhitaano ah goobta iyo codsiga:

  • Raadinta qoraalka ee magaca magaalada
  • Geosearch gudahood raadiye la siiyey meel ka mid ah. Tusaale ahaan, haddii isticmaaluhu rabo inuu arko meelaha iibka ah ee ugu dhow gurigiisa.
  • Ku baadh afargeesle la bixiyay - isticmaaluhu wuxuu ku sawiraa labajibbaaran khariidada, dhammaan dhibcooyinka raadiyahan ayaa la tusay isaga.
  • Ku baadh filtarrada dheeraadka ah Qodobbada iibku way ku kala duwan yihiin midba midka kale

Haddii aan ka hadalno ururka, markaa Postgres waxaan ku haynaa ilo xog labadaba khariidada iyo wararka, iyo Elastic Snapshots waxaa laga soo qaatay xogta asalka ah. Xaqiiqdu waxay tahay in markii hore Postgres aysan la qabsan karin raadinta dhammaan shuruudaha. Ma aha oo kaliya inay jiraan tusmooyin badan, waxay sidoo kale isku dhejin karaan, sidaas darteed jadwalka Postgres ayaa lumay mana uusan fahmin tusaha la isticmaalo.

2. Waxa ku xigay qaybta wararka. Daabacaada ayaa ka soo baxa goobta maalin kasta si isticmaaluhu uusan u lumin socodka macluumaadka, xogta waa in la kala soocaa ka hor inta aan la soo saarin. Tani waa waxa raadinta loogu talagalay: waxaad ka raadin kartaa goobta adigoo isticmaalaya qoraal isku mid ah, isla markaana waxaad ku xiri kartaa filtarrada dheeraadka ah, maadaama ay sidoo kale lagu sameeyay Elastic.

3. Ka dib waxaan dhaqaajinay habaynta wax kala iibsiga. Isticmaalayaashu waxay ka iibsan karaan badeecad gaar ah goobta waxayna ka qayb qaadan karaan abaalmarinta abaalmarinta. Ka dib iibsiyada noocaan ah, waxaan farsameynaa tiro badan oo xog ah, gaar ahaan maalmaha sabtida iyo fasaxyada. Marka la barbardhigo, haddii maalmaha caadiga ah tirada iibsigu ay tahay meel u dhaxaysa 1,5-2 milyan, ka dibna fasaxyada tiradaasi waxay gaari kartaa 53 milyan.

Isla mar ahaantaana, xogta waa in lagu farsameeyaa wakhtiga ugu yar ee suurtogalka ah - isticmaalayaashu ma jecla inay sugaan natiijada dhowr maalmood. Ma jirto si loo gaaro waqtiyada kama dambaysta ah ee Postgres - inta badan waxaan helnay qufulo, iyo inta aan socodsiineyno dhammaan codsiyada, isticmaalayaashu ma hubin karaan inay heleen abaalmarinno iyo in kale. Tani aad uguma faraxsana ganacsiga, sidaa darteed waxaan u wareejinay habka Elasticsearch.

Wakhti ahaan

Hadda cusboonaysiinta waxaa loo habeeyey ku salaysan dhacdo, iyadoo loo eegayo shuruudaha soo socda:

  1. Qodobbada iibka. Isla marka aan xogta ka helno ilo dibadeed, waxaan isla markiiba bilaabeynaa cusbooneysiinta.
  2. Wararka. Isla marka war kasta lagu tafatiro goobta, si toos ah ayaa loogu diraa Elastic.

Halkan mar kale waxaa habboon in la sheego faa'iidooyinka Elastic. Gudaha Postgres, markaad dirayso codsi, waa inaad sugtaa ilaa ay si daacad ah uga baaraandegto dhammaan diiwaanada. Waxaad u diri kartaa 10 diiwaanka Elastic oo bilaabi kartaa isla markiiba, adoon sugin in diiwaanada lagu qaybiyo dhammaan Shards. Dabcan, qaar ka mid ah Shard ama Replica ayaa laga yaabaa inaysan arkin xogta isla markaaba, laakiin wax walba ayaa la heli doonaa goor dhow.

Hababka isdhexgalka

Waxaa jira 2 siyaabood oo lagu dhex geliyo Elastic:

  1. Iyadoo loo marayo macmiil u dhashay TCP. Darawalka waddaniga ah si tartiib tartiib ah ayuu u dhimanayaa: lama taageero, waxay leedahay eray-bixin aad u dhib badan. Sidaa darteed, ficil ahaan ma isticmaalno oo aan isku dayno inaan si buuxda uga tagno.
  2. Iyadoo loo marayo interface HTTP oo isticmaali karta codsiyada JSON iyo Lucene syntax labadaba. Midka ugu dambeeya waa mashiinka qoraalka ee isticmaala Elastic. Noocan, waxaan ku helnaa awoodda Dufcaddii codsiyada JSON ee HTTP. Tani waa ikhtiyaarka aan isku dayeyno inaan isticmaalno.

Thanks to interface HTTP, waxaan isticmaali karnaa maktabadaha bixiya hirgelinta asynchronous ee macmiilka HTTP. Waxaan ka faa'iideysan karnaa Batch iyo API asynchronous, taas oo keenta waxqabad sare, taas oo wax badan ka caawisay maalmihii dhiirrigelinta weyn (wax badan oo ku saabsan kuwan hoose)

Tirooyinka qaar marka la barbardhigo:

  • Badbaadinta dadka isticmaala fadliga Postgres ee 20 taxane ah iyada oo aan la kooxayn: 460713 diiwan 42 sekan
  • Laastikada + macmiilka falcelisa ee 10 threads + dufcad loogu talagalay 1000 walxood: 596749 diiwaan 11 ilbiriqsi gudahood
  • Laastikada + macmiilka falcelisa ee 10 threads + dufcad loogu talagalay 1000 walxood: 23801684 gelis gudaha 4 daqiiqo

Hadda waxaanu qornay maamulaha codsiga HTTP kaas oo u dhisa JSON sida Dufcaddii/ma aha Dufcaddii oo u soo dirsa macmiil kasta oo HTTP ah, iyada oo aan loo eegin maktabadda. Waxa kale oo aad dooran kartaa inaad u dirto codsiyada si isku mid ah ama isku mid ah.

Qaar ka mid ah isdhexgalka, waxaan wali isticmaalnaa macmiilka gaadiidka rasmiga ah, laakiin tani waa arrin ku saabsan dib u habeynta soo socota. Xaaladdan oo kale, macmiil gaar ah oo lagu dhisay guga WebClient ayaa loo isticmaalaa habaynta.

Kordhinta mashruuca Highload oo leh ElasticSearch

dallacaad weyn

Sanadkii hal mar, mashruucu wuxuu martigeliyaa dhiirrigelin weyn oo loogu talagalay isticmaaleyaasha - tani waa isla Highload, tan iyo waqtigan waxaan la shaqeynaa tobanaan milyan oo isticmaaleyaal isku mar ah.

Caadi ahaan culeysyada ugu sarreeya ayaa dhaca inta lagu jiro fasaxyada, laakiin dhiirrigelintani waxay ku socotaa heer gebi ahaanba ka duwan. Sannadkii hore, maalintii dallacaadda, waxaanu iibinay 27 unug oo alaab ah. Xogta ayaa la farsameeyay in ka badan nus saac, taas oo dhib u keentay isticmaalayaasha. Isticmaalayaashu waxay heleen abaal-marinno ka-qaybgalka, laakiin waxay caddaatay in habka loo baahan yahay in la dardargeliyo.

Bilowgii 2019, waxaan go'aansanay inaan u baahanahay ElasticSearch. Sannad dhan, waxaanu abaabulnay habaynta xogta la helay ee Elastic iyo soo saaristooda api ee arjiga mobaylka iyo mareegta. Sidaa darteed, sanadka soo socda ee ololaha, waxaan ka shaqeynay 15 gelitaan 131 daqiiqo gudaheed.

Maadaama aan haysano dad badan oo raba inay iibsadaan alaabo oo ka qaybqaataan sawirada abaal-marinnada ee xayeysiiska, tani waa qiyaas ku-meel-gaar ah. Hadda waxaan u diraynaa macluumaadka ugu dambeeyay Elastic, laakiin mustaqbalka waxaan qorsheyneynaa inaan ku wareejino macluumaadka kaydka ah bilihii la soo dhaafay Postgres sidii kayd joogto ah. Si aan loo xirin index Elastic, kaas oo sidoo kale leh xaddidaaddiisa.

Gabagabo/Gabogabo

Waqtigan xaadirka ah, waxaan ku wareejinay dhammaan adeegyadii aan rabnay Elastic oo hadda waan hakadnay tan. Hadda waxaan ku dhisaynaa index Elastic korka kaydinta joogtada ah ee Postgres, kaas oo la wareegaya culeyska isticmaale.

Mustaqbalka, waxaan qorsheyneynaa inaan wareejino adeegyada haddii aan fahamno in codsiga xogta uu noqdo mid aad u kala duwan oo la raadiyo tiro aan xadidneyn oo tiirar ah. Tani hadda hawl uma aha Postgres.

Haddii aan u baahanahay raadinta qoraal buuxa oo shaqeyn ah ama haddii aan haysano shuruudo raadin oo kala duwan, markaa waxaan horeyba u ognahay in tani ay u baahan tahay in loo turjumo Elastic.

⌘⌘⌘

Waad ku mahadsan tahay akhrinta Haddii shirkaddaadu sidoo kale isticmaasho ElasticSearch oo ay leedahay kiisas fulineed oo u gaar ah, markaa noo sheeg. Waxay noqon doontaa mid xiiso leh in la ogaado sida kuwa kale yihiin πŸ™‚

Source: www.habr.com

Add a comment