Imudara fifuye lori iṣẹ akanṣe Highload pẹlu ElasticSearch

Hey Habr! Orukọ mi ni Maxim Vasiliev, Mo ṣiṣẹ bi oluyanju ati oluṣakoso ise agbese ni FINCH. Loni Emi yoo fẹ lati sọ fun ọ bii, ni lilo ElasticSearch, a ni anfani lati ṣe ilana awọn ibeere miliọnu 15 ni awọn iṣẹju 6 ati mu awọn ẹru ojoojumọ ṣiṣẹ lori aaye ti ọkan ninu awọn alabara wa. Laanu, a yoo ni lati ṣe laisi awọn orukọ, niwon a ni NDA, a nireti pe akoonu ti nkan naa kii yoo jiya lati eyi. Jeka lo.

Bawo ni ise agbese na ṣiṣẹ

Lori ẹhin wa, a ṣẹda awọn iṣẹ ti o rii daju iṣẹ awọn oju opo wẹẹbu alabara ati ohun elo alagbeka. Ilana gbogbogbo ni a le rii ninu aworan atọka:

Imudara fifuye lori iṣẹ akanṣe Highload pẹlu ElasticSearch

Ninu ilana iṣẹ, a ṣe ilana nọmba nla ti awọn iṣowo: awọn rira, awọn sisanwo, awọn iṣẹ ṣiṣe pẹlu awọn iwọntunwọnsi olumulo, eyiti a tọju ọpọlọpọ awọn akọọlẹ, ati gbe wọle ati gbejade data yii si awọn eto ita.

Awọn ilana iyipada tun wa nigbati a ba gba data lati ọdọ alabara ati gbe lọ si olumulo. Ni afikun, awọn ilana tun wa fun ṣiṣẹ pẹlu awọn sisanwo ati awọn eto ajeseku.

Ipilẹ kukuru

Ni ibẹrẹ, a lo PostgreSQL bi ile itaja data nikan. Awọn anfani boṣewa rẹ fun DBMS: wiwa awọn iṣowo, ede iṣapẹẹrẹ data ti o dagbasoke, ọpọlọpọ awọn irinṣẹ fun isọpọ; ni idapo pẹlu iṣẹ to dara ni itẹlọrun awọn iwulo wa fun igba pipẹ.

A ti fipamọ Egba gbogbo data ni Postgres: lati awọn iṣowo si awọn iroyin. Ṣugbọn nọmba awọn olumulo dagba, ati pẹlu rẹ nọmba awọn ibeere.

Fun oye, awọn lododun nọmba ti igba ni 2017 nikan lori tabili ojula 131. Ni 2018 - 125 million. 2019 lẹẹkansi 130 million. Fi miiran 100-200 million lati mobile version of awọn ojula ati awọn mobile ohun elo, ati awọn ti o yoo gba nọmba nla ti awọn ibeere.

Pẹlu idagba ti ise agbese na, Postgres dawọ duro pẹlu fifuye, a ko ni akoko - nọmba nla ti awọn ibeere ti o pọju han, fun eyi ti a ko le ṣẹda nọmba to to ti awọn atọka.

A loye pe iwulo wa fun awọn ile itaja data miiran ti yoo pese awọn iwulo wa ati mu ẹru naa kuro ni PostgreSQL. Elasticsearch ati MongoDB ni a gbero bi awọn aṣayan ti o ṣeeṣe. Ikẹhin padanu lori awọn aaye wọnyi:

  1. Iyara atọka lọra bi iye data ninu awọn atọka ti n dagba. Pẹlu Rirọ, iyara ko da lori iye data.
  2. Ko si wiwa ọrọ ni kikun

Nitorinaa a yan Rirọ fun ara wa ati pese sile fun iyipada naa.

Iyipada si Rirọ

1. A bẹrẹ iyipada lati aaye ti iṣẹ wiwa tita. Onibara wa ni apapọ nipa awọn aaye tita 70, ati pe eyi nilo ọpọlọpọ awọn iru awọn iwadii lori aaye ati ninu ohun elo naa:

  • Wiwa ọrọ nipasẹ orukọ ilu
  • Geosearch laarin rediosi ti a fun lati aaye kan. Fun apẹẹrẹ, ti olumulo ba fẹ lati rii iru awọn aaye tita wo ni o sunmọ ile rẹ.
  • Ṣewadii nipasẹ onigun mẹrin ti a fun - olumulo naa fa square kan lori maapu, ati gbogbo awọn aaye ninu rediosi yii ni a fihan fun u.
  • Ṣewadii nipasẹ awọn asẹ afikun. Awọn aaye tita yatọ si ara wọn ni oriṣiriṣi

Ti a ba sọrọ nipa ajo naa, lẹhinna ni Postgres a ni orisun data fun maapu mejeeji ati awọn iroyin, ati ni Elastic Snapshots ni a mu lati data atilẹba. Otitọ ni pe ni ibẹrẹ Postgres ko le farada wiwa pẹlu gbogbo awọn ibeere. Kii ṣe ọpọlọpọ awọn atọka nikan, wọn tun le ni lqkan, nitorinaa oluṣeto Postgres ti sọnu ati pe ko loye iru atọka lati lo.

2. Next ni ila wà awọn iroyin apakan. Awọn atẹjade han lori aaye ni gbogbo ọjọ ki olumulo ko ba sọnu ni ṣiṣan ti alaye, data gbọdọ wa ni lẹsẹsẹ ṣaaju ipinfunni. Eyi ni ohun ti wiwa jẹ fun: o le wa aaye naa nipasẹ ibaramu ọrọ, ati ni akoko kanna so awọn asẹ afikun, nitori wọn tun ṣe nipasẹ Elastic.

3. Lẹhinna a gbe iṣeduro iṣowo naa. Awọn olumulo le ra ọja kan lori aaye naa ati kopa ninu iyaworan ere. Lẹhin iru awọn rira bẹẹ, a ṣe ilana iye nla ti data, paapaa ni awọn ipari ose ati awọn isinmi. Fun lafiwe, ti o ba jẹ ni awọn ọjọ lasan nọmba awọn rira wa ni ibikan laarin 1,5-2 milionu, lẹhinna ni awọn isinmi, nọmba naa le de ọdọ 53 million.

Ni akoko kanna, data gbọdọ wa ni ilọsiwaju ni akoko to kuru ju - awọn olumulo ko fẹ lati duro de abajade fun ọpọlọpọ awọn ọjọ. Ko si ọna lati ṣaṣeyọri iru awọn akoko ipari nipasẹ Postgres - a nigbagbogbo gba awọn titiipa, ati lakoko ti a n ṣiṣẹ gbogbo awọn ibeere, awọn olumulo ko le ṣayẹwo boya wọn gba awọn ẹbun tabi rara. Eyi ko dun pupọ fun iṣowo, nitorinaa a gbe sisẹ si Elasticsearch.

Igbakọọkan

Bayi awọn imudojuiwọn jẹ tunto-orisun iṣẹlẹ, ni ibamu si awọn ipo atẹle:

  1. Awọn ojuami tita. Ni kete ti a ba gba data lati orisun ita, a bẹrẹ imudojuiwọn lẹsẹkẹsẹ.
  2. Iroyin. Ni kete ti eyikeyi iroyin ti wa ni satunkọ lori ojula, o ti wa ni laifọwọyi rán si Elastic.

Nibi lẹẹkansi o tọ lati darukọ awọn anfani ti Rirọ. Ni Postgres, nigbati o ba nfi ibeere ranṣẹ, o ni lati duro titi ti o fi ni otitọ ṣe ilana gbogbo awọn igbasilẹ. O le firanṣẹ awọn igbasilẹ 10 si Elastic ki o bẹrẹ ṣiṣẹ lẹsẹkẹsẹ, laisi iduro fun awọn igbasilẹ lati pin kaakiri gbogbo awọn Shards. Nitoribẹẹ, diẹ ninu Shard tabi ajọra le ma rii data lẹsẹkẹsẹ, ṣugbọn ohun gbogbo yoo wa laipẹ.

Awọn ọna Integration

Awọn ọna 2 wa lati ṣepọ pẹlu Elastic:

  1. Nipasẹ alabara abinibi lori TCP. Awakọ abinibi n ku diẹdiẹ: ko ṣe atilẹyin mọ, o ni sintasi airọrun pupọ. Nitorinaa, a ko lo ni adaṣe ati gbiyanju lati kọ silẹ patapata.
  2. Nipasẹ wiwo HTTP ti o le lo awọn ibeere JSON mejeeji ati sintasi Lucene. Ikẹhin jẹ ẹrọ ọrọ ti o nlo Rirọ. Ninu ẹya yii, a gba agbara lati Batch nipasẹ awọn ibeere JSON lori HTTP. Eyi ni aṣayan ti a n gbiyanju lati lo.

Ṣeun si wiwo HTTP, a le lo awọn ile-ikawe ti o pese imuse asynchronous ti alabara HTTP. A le lo anfani ti Batch ati API asynchronous, eyiti o ṣe abajade iṣẹ ṣiṣe giga, eyiti o ṣe iranlọwọ pupọ ni awọn ọjọ ti igbega nla (diẹ sii lori iyẹn ni isalẹ)

Diẹ ninu awọn nọmba fun lafiwe:

  • Fifipamọ awọn olumulo ẹbun Postgres ni awọn okun 20 laisi akojọpọ: awọn igbasilẹ 460713 ni awọn aaya 42
  • Onibara ifaseyin + fun awọn okun 10 + ipele fun awọn eroja 1000: awọn igbasilẹ 596749 ni awọn aaya 11
  • Onibara rirọ + ifaseyin fun awọn okun 10 + ipele fun awọn eroja 1000: 23801684 awọn titẹ sii ni 4 iṣẹju

Bayi a ti kọ oluṣakoso ibeere HTTP kan ti o kọ JSON bi Batch / kii ṣe Batch ati firanṣẹ nipasẹ alabara HTTP eyikeyi, laibikita ile-ikawe naa. O tun le yan lati fi awọn ibeere ranṣẹ ni amuṣiṣẹpọ tabi asynchronously.

Ni diẹ ninu awọn iṣọpọ, a tun lo alabara ọkọ irinna osise, ṣugbọn eyi jẹ ọrọ kan ti isọdọtun atẹle. Ni idi eyi, onibara aṣa ti a ṣe lori orisun orisun omi WebClient ti lo fun sisẹ.

Imudara fifuye lori iṣẹ akanṣe Highload pẹlu ElasticSearch

nla igbega

Ni ẹẹkan ọdun kan, iṣẹ akanṣe naa gbalejo igbega nla fun awọn olumulo - eyi jẹ Highload kanna, nitori ni akoko yii a ṣiṣẹ pẹlu awọn mewa ti awọn miliọnu awọn olumulo ni akoko kanna.

Nigbagbogbo awọn oke ti awọn ẹru waye lakoko awọn isinmi, ṣugbọn igbega yii wa ni ipele ti o yatọ patapata. Ni ọdun ti o kẹhin, ni ọjọ igbega, a ta awọn ẹru 27. Awọn data ti ni ilọsiwaju fun diẹ ẹ sii ju idaji wakati kan, eyiti o fa idamu fun awọn olumulo. Awọn olumulo gba awọn ẹbun fun ikopa, ṣugbọn o han gbangba pe ilana naa nilo lati ni iyara.

Ni ibẹrẹ ọdun 2019, a pinnu pe a nilo Iwadi Elastic. Fun ọdun kan, a ṣeto sisẹ data ti o gba ni Elastic ati ipinfunni wọn ni api ti ohun elo alagbeka ati oju opo wẹẹbu. Bi abajade, ọdun ti nbọ lakoko ipolongo, a ṣe ilana 15 awọn titẹ sii ni iṣẹju 131.

Niwọn bi a ti ni ọpọlọpọ eniyan ti o fẹ ra awọn ẹru ati kopa ninu iyaworan awọn ẹbun ni awọn igbega, eyi jẹ iwọn igba diẹ. Bayi a nfi alaye tuntun ranṣẹ si Elastic, ṣugbọn ni ọjọ iwaju a gbero lati gbe alaye ti o wa ni ipamọ fun awọn oṣu to kọja si Postgres bi ibi ipamọ ayeraye. Ni ibere ki o má ba di Atọka Elastic, eyiti o tun ni awọn idiwọn rẹ.

Ipari / Ipari

Ni akoko yii, a ti gbe gbogbo awọn iṣẹ ti a fẹ si Elastic ati pe a ti da duro lori eyi fun bayi. Bayi a n kọ atọka kan ni Elastic lori oke ibi ipamọ itẹramọṣẹ akọkọ ni Postgres, eyiti o gba fifuye olumulo.

Ni ọjọ iwaju, a gbero lati gbe awọn iṣẹ lọ ti a ba loye pe ibeere data di pupọ ati pe o wa nọmba ailopin ti awọn ọwọn. Eyi kii ṣe iṣẹ-ṣiṣe mọ fun Postgres.

Ti a ba nilo wiwa ọrọ ni kikun ni iṣẹ ṣiṣe tabi ti a ba ni ọpọlọpọ awọn ibeere wiwa ti o yatọ, lẹhinna a ti mọ tẹlẹ pe eyi nilo lati tumọ si Elastic.

⌘⌘⌘

O ṣeun fun kika. Ti ile-iṣẹ rẹ ba tun lo ElasticSearch ati pe o ni awọn ọran imuse tirẹ, lẹhinna sọ fun wa. Yoo jẹ ohun ti o nifẹ lati mọ bi awọn miiran ṣe jẹ 🙂

orisun: www.habr.com

Fi ọrọìwòye kun