Luchdaich optimization air pròiseact Highload le ElasticSearch

Hi Habr! Is e m ’ainm Maxim Vasiliev, tha mi ag obair mar anailisiche agus manaidsear pròiseict aig FINCH. An-diugh bu mhath leam innse dhut mar a bha e comasach dhuinn, a’ cleachdadh ElasticSearch, 15 millean iarrtas a phròiseasadh ann an 6 mionaidean agus na h-uallaichean làitheil air làrach aon de ar teachdaichean a bharrachadh. Gu mì-fhortanach, feumaidh sinn dèanamh às aonais ainmean, leis gu bheil NDA againn, tha sinn an dòchas nach bi susbaint an artaigil a’ fulang le seo. Tiugainn.

Mar a tha am pròiseact ag obair

Air an deireadh-sheachdain againn, bidh sinn a’ cruthachadh sheirbheisean a nì cinnteach gu bheil coileanadh làraich-lìn agus tagradh gluasadach ar teachdaiche. Tha an structar coitcheann ri fhaicinn anns an dealbh:

Luchdaich optimization air pròiseact Highload le ElasticSearch

Anns a 'phròiseas obrach, bidh sinn a' giullachd àireamh mhòr de ghnothaichean: ceannach, pàighidhean, gnìomhachd le cothromachadh luchd-cleachdaidh, airson a bheil sinn a 'stòradh tòrr logaichean, a bharrachd air a bhith a' toirt a-steach agus às-mhalairt an dàta seo gu siostaman taobh a-muigh.

Tha pròiseasan cùl ann cuideachd nuair a gheibh sinn dàta bhon neach-dèiligidh agus ga ghluasad chun neach-cleachdaidh. A bharrachd air an sin, tha pròiseasan ann fhathast airson a bhith ag obair le pàighidhean agus prògraman bonus.

Cùl-fhiosrachadh goirid

An toiseach, chleachd sinn PostgreSQL mar an aon stòr dàta. Na buannachdan coitcheann aige airson DBMS: làthaireachd ghnothaichean, cànan samplaidh dàta leasaichte, raon farsaing de dh’ innealan airson amalachadh; còmhla ri coileanadh math riaraichte ar feumalachdan airson ùine gu math fada.

Ghlèidh sinn an dàta gu lèir ann am Postgres: bho ghnothaichean gu naidheachdan. Ach dh'fhàs an àireamh de luchd-cleachdaidh, agus leis an àireamh de dh'iarrtasan.

Airson tuigse, is e an àireamh bhliadhnail de sheiseanan ann an 2017 a-mhàin air an làrach-lìn deasg 131 millean. Ann an 2018 - 125 millean. 2019 a-rithist 130 millean. gheibh e àireamh mhòr de iarrtasan.

Le fàs a 'phròiseict, stad Postgres a' dèiligeadh ris an luchd, cha robh ùine againn - nochd àireamh mhòr de cheistean eadar-dhealaichte, agus cha b 'urrainn dhuinn àireamh gu leòr de chlàran-amais a chruthachadh.

Bha sinn a’ tuigsinn gu robh feum air stòran dàta eile a bheireadh na feumalachdan againn seachad agus a bheireadh an luchd far PostgreSQL. Chaidh beachdachadh air Elasticsearch agus MongoDB mar roghainnean a dh’ fhaodadh a bhith ann. Chaill an tè mu dheireadh air na puingean a leanas:

  1. Astar clàrachaidh slaodach mar a bhios an àireamh de dhàta ann an clàran-amais a’ fàs. Le Elastic, chan eil an astar an urra ris an ìre de dhàta.
  2. Gun sgrùdadh teacsa slàn

Mar sin thagh sinn Elastic dhuinn fhìn agus rinn sinn ullachadh airson a’ ghluasaid.

Eadar-ghluasad gu Elastic

1. Thòisich sinn air an eadar-ghluasad bhon t-seirbheis sgrùdaidh puing reic. Tha timcheall air 70 puing reic aig an neach-dèiligidh againn, agus feumaidh seo grunn sheòrsaichean rannsachaidh air an làrach agus san tagradh:

  • Rannsachadh teacsa a rèir ainm baile-mòr
  • Geosearch taobh a-staigh radius sònraichte bho àm air choreigin. Mar eisimpleir, ma tha an neach-cleachdaidh ag iarraidh faicinn dè na puingean reic as fhaisge air an dachaigh aige.
  • Rannsaich le ceàrnag sònraichte - bidh an neach-cleachdaidh a’ tarraing ceàrnag air a’ mhapa, agus tha a h-uile puing san radius seo air a shealltainn dha.
  • Rannsaich le sìoltachain a bharrachd. Tha puingean reic eadar-dhealaichte bho chèile ann an raon farsaing

Ma bhruidhneas sinn mun bhuidheann, an uairsin ann am Postgres tha stòr dàta againn airson a’ mhapa agus na naidheachdan, agus ann an Elastic Snapshots air an toirt bhon dàta tùsail. Is e an fhìrinn nach b’ urrainn dha Postgres dèiligeadh ris an rannsachadh a rèir a h-uile slat-tomhais. Chan e a-mhàin gu robh mòran chlàran-amais ann, dh’ fhaodadh iad a dhol thairis air, agus mar sin chaidh clàr-ama Postgres air chall agus cha do thuig e dè an clàr-amais a bu chòir a chleachdadh.

2. An ath loidhne bha earrann nan naidheachdan. Bidh foillseachaidhean a 'nochdadh air an làrach a h-uile latha gus nach tèid an neach-cleachdaidh air chall anns an t-sruth fiosrachaidh, feumaidh an dàta a bhith air a rèiteachadh mus tèid a chur a-mach. Is e seo a tha ann an sgrùdadh: faodaidh tu an làrach a sgrùdadh le maids teacsa, agus aig an aon àm sìoltachain a bharrachd a cheangal, leis gu bheil iad cuideachd air an dèanamh tro Elastic.

3. An uairsin ghluais sinn an giollachd malairt. Faodaidh luchd-cleachdaidh toradh sònraichte a cheannach air an làrach agus pàirt a ghabhail ann an tarraing duais. Às deidh a leithid de cheannach, bidh sinn a ’giullachd tòrr dàta, gu sònraichte air deireadh-sheachdainean agus saor-làithean. Airson coimeas a dhèanamh, ma tha an àireamh de cheannach ann an làithean àbhaisteach eadar 1,5-2 millean, an uairsin air saor-làithean faodaidh am figear ruighinn 53 millean.

Aig an aon àm, feumar an dàta a phròiseasadh anns an ùine as giorra a tha comasach - cha toil le luchd-cleachdaidh feitheamh airson an toradh airson grunn làithean. Chan eil dòigh ann air cinn-latha mar sin a choileanadh tro Postgres - gu tric fhuair sinn glasan, agus fhad ‘s a bha sinn a’ làimhseachadh a h-uile iarrtas, cha b’ urrainn do luchd-cleachdaidh faighinn a-mach an d’ fhuair iad duaisean no nach robh. Chan eil seo gu math tlachdmhor airson gnìomhachas, agus mar sin ghluais sinn an giullachd gu Elasticsearch.

Ùineachd

A-nis tha ùrachaidhean air an rèiteachadh stèidhichte air tachartas, a rèir nan cumhachan a leanas:

  1. Puingean reic. Cho luath ‘s a gheibh sinn dàta bho stòr a-muigh, tòisichidh sinn air an ùrachadh sa bhad.
  2. Naidheachdan. Cho luath ‘s a thèid naidheachdan sam bith a dheasachadh air an làrach, thèid a chuir gu fèin-ghluasadach gu Elastic.

An seo a-rithist is fhiach iomradh a thoirt air na buannachdan a tha aig Elastic. Ann am Postgres, nuair a chuireas tu iarrtas, feumaidh tu feitheamh gus am bi e gu h-onarach a’ pròiseasadh a h-uile clàr. Faodaidh tu clàran 10 a chuir gu Elastic agus tòiseachadh ag obair sa bhad, gun a bhith a’ feitheamh ri na clàran a sgaoileadh thairis air a h-uile Shards. Gu dearbh, is dòcha nach fhaic cuid de Shard no Mac-samhail an dàta sa bhad, ach bidh a h-uile dad ri fhaighinn gu math luath.

Dòighean amalachaidh

Tha dà dhòigh air amalachadh le Elastic:

  1. Tro neach-dèiligidh dùthchasach thairis air TCP. Bidh an dràibhear dùthchasach a 'bàsachadh mean air mhean: chan eil e a' faighinn taic tuilleadh, tha co-chòrdadh gu math mì-ghoireasach aige. Mar sin, cha mhòr nach eil sinn ga chleachdadh agus feuchaidh sinn ri a thrèigsinn gu tur.
  2. Tro eadar-aghaidh HTTP as urrainn an dà chuid iarrtasan JSON agus co-chòrdadh Lucene a chleachdadh. Is e einnsean teacsa a th’ anns an fhear mu dheireadh a bhios a’ cleachdadh Elastic. Anns an dreach seo, gheibh sinn an comas Baidse tro iarrtasan JSON thairis air HTTP. Is e seo an roghainn a tha sinn a’ feuchainn ri chleachdadh.

Taing don eadar-aghaidh HTTP, is urrainn dhuinn leabharlannan a chleachdadh a bheir seachad buileachadh asyncronach den neach-dèiligidh HTTP. Is urrainn dhuinn brath a ghabhail air Batch agus an API asyncronach, a tha a’ leantainn gu àrd-choileanadh, a chuidich gu mòr ann an làithean an adhartachaidh mhòir (barrachd air sin gu h-ìosal)

Cuid de àireamhan airson coimeas:

  • A’ sàbhaladh luchd-cleachdaidh bounty Postgres ann an 20 snàithlean gun bhuidheann: 460713 clàran ann an 42 diogan
  • Cliant elastic + reactive airson 10 snàithleanan + baidse airson 1000 eileamaid: 596749 clàran ann an 11 diogan
  • Cliant elastic + reactive airson 10 snàithleanan + baidse airson eileamaidean 1000: 23801684 inntrigidhean ann an 4 mionaidean

A-nis tha sinn air manaidsear iarrtas HTTP a sgrìobhadh a thogas JSON mar Batch / not Batch agus a chuireas e tro neach-dèiligidh HTTP sam bith, ge bith dè an leabharlann. Faodaidh tu cuideachd roghnachadh iarrtasan a chuir gu sioncronach no gu asyncronach.

Ann an cuid de aonachadh, bidh sinn fhathast a’ cleachdadh an neach-dèiligidh còmhdhail oifigeil, ach chan eil ann an seo ach cùis den ath ath-shuidheachadh. Anns a 'chùis seo, bidh cleachdaiche àbhaisteach a chaidh a thogail air bunait Spring WebClient air a chleachdadh airson giullachd.

Luchdaich optimization air pròiseact Highload le ElasticSearch

brosnachadh mòr

Aon uair sa bhliadhna, tha am pròiseact a 'toirt aoigheachd mòr do luchd-cleachdaidh - is e seo an aon Highload, oir aig an àm seo bidh sinn ag obair le deichean de mhilleanan de luchd-cleachdaidh aig an aon àm.

Mar as trice bidh mullaichean luchdan a’ tachairt tro na saor-làithean, ach tha an adhartachadh seo aig ìre gu tur eadar-dhealaichte. A’ bhliadhna roimhe sin, air latha an adhartachaidh, reic sinn 27 aonad bathair. Chaidh an dàta a phròiseasadh airson còrr air leth uair a thìde, a dh’ adhbhraich mì-ghoireasachd do luchd-cleachdaidh. Fhuair luchd-cleachdaidh duaisean airson com-pàirteachadh, ach dh'fhàs e soilleir gu robh feum air a 'phròiseas a luathachadh.

Aig toiseach 2019, cho-dhùin sinn gu robh feum againn air ElasticSearch. Airson bliadhna air fad, chuir sinn air dòigh giollachd an dàta a fhuair sinn ann an Elastic agus an sgaoileadh ann an api an aplacaid gluasadach agus an làrach-lìn. Mar thoradh air an sin, an ath bhliadhna tron ​​​​iomairt, rinn sinn pròiseas 15 inntrigidhean ann an 131 mionaidean.

Leis gu bheil tòrr dhaoine againn a tha airson bathar a cheannach agus pàirt a ghabhail ann an tarraing dhuaisean ann an sanasachd, is e ceum sealach a tha seo. A-nis tha sinn a’ cur fiosrachadh as ùire gu Elastic, ach san àm ri teachd tha sinn an dùil fiosrachadh tasglainn airson na mìosan a dh’ fhalbh a ghluasad gu Postgres mar stòradh maireannach. Gus nach cuir thu bacadh air clàr-amais Elastic, aig a bheil na crìochan aige cuideachd.

Co-dhùnadh/Co-dhùnaidhean

Aig an àm seo, tha sinn air a h-uile seirbheis a bha sinn ag iarraidh a ghluasad gu Elastic agus tha sinn air stad a chuir air seo airson a-nis. A-nis tha sinn a’ togail clàr-amais ann an Elastic a bharrachd air a’ phrìomh stòradh leantainneach ann am Postgres, a ghabhas thairis an luchd-cleachdaidh.

Anns an àm ri teachd, tha sinn an dùil seirbheisean a ghluasad ma tha sinn a’ tuigsinn gu bheil an t-iarrtas dàta a’ fàs ro eadar-mheasgte agus gun tèid àireamh neo-chuingealaichte de cholbhan a lorg. Chan e obair a tha seo do Postgres tuilleadh.

Ma tha feum againn air sgrùdadh làn-theacsa ann an gnìomh no ma tha tòrr shlatan-tomhais sgrùdaidh eadar-dhealaichte againn, tha fios againn mu thràth gum feum seo a bhith air eadar-theangachadh gu Elastic.

⌘⌘⌘

Tapadh leibh airson an leughadh. Ma tha a’ chompanaidh agad cuideachd a’ cleachdadh ElasticSearch agus gu bheil na cùisean buileachaidh aca fhèin, innis dhuinn. Bidh e inntinneach fios a bhith agad ciamar a tha daoine eile 🙂

Source: www.habr.com

Cuir beachd ann