Uasmhéadú lódála ar thionscadal Highload le ElasticSearch

Dia duit, Habr! Maxim Vasiliev is ainm dom, táim ag obair mar anailísí agus bainisteoir tionscadail ag FINCH. Sa lá atá inniu ba mhaith liom a insint duit conas, ag baint úsáide as ElasticSearch, bhí muid in ann 15 milliún fiosrúchán a phróiseáil i 6 nóiméad agus an t-ualach laethúil ar shuíomh duine dár gcliaint a bharrfheabhsú. Ar an drochuair, beidh orainn a dhéanamh gan ainmneacha, ós rud é go bhfuil NDA againn, tá súil againn nach mbeidh ábhar an ailt ag fulaingt uaidh seo. A ligean ar dul.

Conas a oibríonn an tionscadal

Ar ár n-inneal cruthaímid seirbhísí a chinntíonn feidhmiúlacht láithreáin ghréasáin agus feidhmchlár soghluaiste ár gcliant. Is féidir an struchtúr ginearálta a fheiceáil sa léaráid:

Uasmhéadú lódála ar thionscadal Highload le ElasticSearch

Sa phróiseas oibre, déanaimid próiseáil ar líon mór idirbheart: ceannacháin, íocaíochtaí, idirbhearta le hiarmhéideanna úsáideoirí, as a stórálfaimid go leor logs, agus iompórtálann agus onnmhairímid na sonraí seo chuig córais sheachtracha freisin.

Tá próisis droim ar ais ann freisin nuair a fhaighimid sonraí ón gcliant agus nuair a tharchuirimid chuig an úsáideoir é. Ina theannta sin, tá próisis ann freisin chun oibriú le cláir íocaíochtaí agus bónais.

Cúlra gearrthóg

Ar dtús, d'úsáidamar PostgreSQL mar ár n-aon stóráil sonraí. Tá buntáistí caighdeánacha ag baint le DBMS: láithreacht na n-idirbheart, teanga forbartha aisghabhála sonraí, raon leathan uirlisí le haghaidh comhtháthú; in éineacht le dea-fheidhmíocht shásaigh ár gcuid riachtanas ar feadh tréimhse sách fada.

Stórálamar na sonraí go léir in Postgres: ó idirbhearta go nuacht. Ach d'fhás líon na n-úsáideoirí, agus leis an líon iarratas.

Chun tuiscint a fháil, ba é 2017 milliún líon bliantúil na seisiún in 131 ar an suíomh deisce ina n-aonar In 2018 - 125 milliún. In 2019 arís 130 milliún Cuir 100-200 milliún eile ón leagan soghluaiste den láithreán agus an t-iarratas soghluaiste, agus tú gheobhaidh siad líon ollmhór iarratas.

De réir mar a d’fhás an tionscadal, ní raibh Postgres in ann dul i ngleic leis an ualach a thuilleadh; níorbh fhéidir linn coinneáil suas - tháinig líon mór fiosrúchán éagsúil, nach raibh muid in ann líon leordhóthanach innéacsanna a chruthú ina leith.

Thuigeamar go raibh gá le stórtha sonraí eile a fhreastalódh ar ár riachtanais agus a bhainfeadh an t-ualach as PostgreSQL. Breathnaíodh ar Elasticsearch agus MongoDB mar roghanna féideartha. Chaill an dara ceann ar na pointí seo a leanas:

  1. Luas innéacsaithe mall de réir mar a thagann méadú ar líon na sonraí in innéacsanna. Le Leaisteacha, níl luas ag brath ar an méid sonraí.
  2. Gan cuardach téacs iomlán

Mar sin roghnaigh muid Leaisteacha dúinn féin agus d'ullmhaigh muid don aistriú.

Athraigh go Leaisteacha

1. Chuireamar tús leis an aistriú le seirbhís cuardaigh pointe díola. Tá thart ar 70 pointe díola san iomlán ag ár gcliant, agus ag an am céanna tá gá le roinnt cineálacha cuardaigh ar an láithreán gréasáin agus san iarratas:

  • Cuardach téacs de réir ainm ceantair
  • Geosearch laistigh de gha tugtha ó phointe áirithe. Mar shampla, más mian le húsáideoir a fheiceáil cé na pointí díolacháin is gaire dá bhaile.
  • Cuardaigh de réir cearnóg tugtha - imlíníonn an t-úsáideoir cearnóg ar an léarscáil, agus taispeántar dó gach pointe sa gha seo.
  • Cuardaigh de réir scagairí breise. Pointí díolacháin difriúil óna chéile i assortment

Ag labhairt dó faoin eagraíocht, i Postgres tá foinse sonraí againn don léarscáil agus don nuacht araon, agus in Elastic déanaimid Snapshots ó na sonraí bunaidh. Is é an fírinne nach bhféadfadh Postgres dul i ngleic le cuardach a dhéanamh ar na critéir go léir ar dtús. Ní hamháin go raibh go leor innéacsanna ann, d'fhéadfadh siad forluí a dhéanamh freisin, mar sin cailleadh an sceidealóir Postgres agus níor thuig sé cén t-innéacs le húsáid.

2. An chéad líne eile bhí an mhír nuachta. Bíonn foilseacháin le feiceáil ar an suíomh gach lá ionas nach gcailltear an t-úsáideoir sa sreabhadh faisnéise, ní mór na sonraí a shórtáil sula n-eisítear iad. Is éard atá i gceist leis seo ná cuardach: ar an suíomh is féidir leat cuardach a dhéanamh de réir meaitseáil téacs, agus ag an am céanna scagairí breise a nascadh, ós rud é go ndéantar iad trí leaisteacha freisin.

3. Ansin bhog muid próiseáil idirbheart. Is féidir le húsáideoirí táirge sonrach a cheannach ar an suíomh agus páirt a ghlacadh i gcrannchur duaise. Tar éis ceannach den sórt sin, déanaimid próiseáil ar líon mór sonraí, go háirithe ar an deireadh seachtaine agus laethanta saoire. Chun comparáid a dhéanamh, más rud é go bhfuil líon na gceannachán thart ar 1,5-2 milliún ar ghnáthlaethanta, ansin ar laethanta saoire is féidir leis an bhfigiúr 53 milliún a bhaint amach.

Ag an am céanna, ní mór na sonraí a phróiseáil laistigh de íosmhéid ama - ní maith le húsáideoirí fanacht roinnt laethanta le haghaidh torthaí. Níl aon bhealach ann spriocdhátaí den sórt sin a bhaint amach trí Postgres - is minic a fuair muid bloic, agus cé go raibh gach iarratas á phróiseáil againn, ní fhéadfadh úsáideoirí a sheiceáil an bhfuair siad duaiseanna nó nach bhfuair. Níl sé seo an-taitneamhach do ghnó, agus mar sin bhog muid an phróiseáil go Elasticsearch.

Tréimhsiúlacht

Anois tá nuashonruithe cumraithe bunaithe ar imeacht, de réir na gcoinníollacha seo a leanas:

  1. Pointí díola. Chomh luath agus a fhaighimid sonraí ó fhoinse sheachtrach, seolfaimid nuashonrú láithreach.
  2. Nuacht. Chomh luath agus a chuirtear aon nuacht in eagar ar an suíomh, seoltar chuig Elastic é go huathoibríoch.

Anseo arís is fiú na buntáistí a bhaineann le Leaisteacha a lua. In Postgres, agus iarratas á sheoladh agat, ní mór duit fanacht go dtí go bpróiseálann sé na taifid go léir go hionraic. Is féidir leat 10 míle taifead a sheoladh chuig Elastic agus tosú ag obair láithreach, gan fanacht leis na taifid a dháileadh ar gach Shards. Ar ndóigh, b'fhéidir nach bhfeiceann roinnt Shard nó Macasamhail na sonraí ar an bpointe boise, ach go han-luath beidh gach rud ar fáil.

Modhanna comhtháthaithe

Tá dhá bhealach ann le comhtháthú le Leaisteacha:

  1. Trí chliant dúchais trí TCP. Tá an tiománaí dúchais ag fáil bháis de réir a chéile: ní thacaítear leis a thuilleadh, agus tá a chomhréir an-deacair. Dá bhrí sin, ní dhéanaimid é a úsáid go praiticiúil agus déanaimid iarracht é a thréigean go hiomlán.
  2. Trí chomhéadan HTTP inar féidir leat iarratais JSON agus comhréir Lucene a úsáid. Is é an ceann deireanach an t-inneall téacs a úsáideann Leaisteacha. Sa rogha seo, faighimid an cumas Baisc a dhéanamh trí iarratais JSON thar HTTP. Is é seo an rogha atáimid ag iarraidh a úsáid.

A bhuíochas leis an gcomhéadan HTTP, is féidir linn leabharlanna a úsáid a sholáthraíonn cur i bhfeidhm asincrónach ar an gcliant HTTP. Is féidir linn leas a bhaint as Baisc agus an API asincrónach, a thugann ardfheidhmíocht ar deireadh thiar, rud a chabhraigh go leor le linn laethanta cur chun cinn mór (níos mó ar seo thíos)

Roinnt uimhreacha le haghaidh comparáide:

  • Sábháil úsáideoirí a fuair duaiseanna in Postgres i 20 snáithe gan ghrúpálacha: 460713 taifead i 42 soicind
  • Cliant leaisteacha + imoibríoch ar feadh 10 snáithe + baisc le haghaidh 1000 eilimint: 596749 taifead i 11 soicind
  • Cliant leaisteacha + imoibríoch le haghaidh 10 snáithe + baisc le haghaidh 1000 eilimint: 23801684 taifead i 4 nóiméad

Anois tá bainisteoir iarratais HTTP scríofa againn a thógann JSON mar Bhaisc / neamh-Bhaisc agus a sheolann trí aon chliant HTTP, beag beann ar an leabharlann. Is féidir leat a roghnú freisin iarratais a sheoladh go sioncronach nó go asioncronach.

I roinnt comhtháthaithe bainimid úsáid as an gcliant oifigiúil iompair fós, ach níl anseo ach ábhar athfhachtóirithe láithreach. Sa chás seo, úsáidtear a chliant féin, a tógadh ar bhonn Spring WebClient, le haghaidh próiseála.

Uasmhéadú lódála ar thionscadal Highload le ElasticSearch

Cur chun cinn mór

Uair sa bhliain, tá an tionscadal ina hóstach ar chur chun cinn mór d'úsáideoirí - is é seo an Highload céanna, ós rud é ag an am seo oibrímid le na mílte na n-úsáideoirí ag an am céanna.

De ghnáth, tarlaíonn buaic-ualaí le linn laethanta saoire, ach tá an cur chun cinn seo ar leibhéal iomlán difriúil. An bhliain roimhe sin, ar lá an chur chun cinn, dhíolamar 27 aonad earraí. Thóg na sonraí níos mó ná leath uair an chloig le próiseáil, rud a chuir míchaoithiúlacht d'úsáideoirí. Fuair ​​​​úsáideoirí duaiseanna le haghaidh rannpháirtíochta, ach ba léir go raibh gá leis an bpróiseas a luathú.

Ag tús 2019, shocraigh muid go raibh gá le ElasticSearch. Ar feadh bliana ar fad, d’eagraíomar próiseáil sonraí faighte in Elastic agus a aschur chuig API an fheidhmchláir shoghluaiste agus an láithreáin ghréasáin. Mar thoradh air sin, an bhliain seo chugainn le linn an chur chun cinn a phróiseáil againn 15 iontráil i 131 nóiméad.

Ós rud é go bhfuil go leor daoine againn atá ag iarraidh an táirge a cheannach agus a bheith rannpháirteach sa chrannchur duaise inár gcur chun cinn, is beart sealadach é seo. Anois cuirimid faisnéis reatha chuig Elastic, ach sa todhchaí tá sé beartaithe againn faisnéis chartlainne le míonna anuas a aistriú chuig Postgres mar stóráil bhuan. Chun nach a clog an t-innéacs leaisteacha, a bhfuil freisin a teorainneacha.

Conclúid/Conclúidí

I láthair na huaire, tá na seirbhísí go léir a theastaigh uainn aistrithe go Elastic agus tá siad curtha ar sos anois. Anois táimid ag tógáil innéacs i Elastic ar bharr an phríomhstórála leanúnach i Postgres, a ghlacann ualach an úsáideora.

Sa todhchaí, tá sé beartaithe againn seirbhísí a aistriú má thuigimid go bhfuil an t-iarratas sonraí ag éirí ró-ilghnéitheach agus go bhfuil líon neamhtheoranta colún á chuardach. Ní tasc é seo a thuilleadh do Postgres.

Más gá dúinn cuardach téacs iomlán san fheidhmiúlacht nó má tá go leor critéir chuardaigh éagsúla againn, tá a fhios againn cheana féin go gcaithfear é seo a aistriú go Leaisteacha.

⌘⌘⌘

Go raibh maith agat as léamh. Má úsáideann do chuideachta ElasticSearch freisin agus má tá do chásanna feidhmithe féin aici, inis dúinn le do thoil. Beidh sé suimiúil fios a bheith agat conas a dhéanann daoine eile :)

Foinse: will.com

Add a comment