Fa'atauga fa'atatau ile poloketi Highload ma ElasticSearch

Talofa, Habr! O loʻu igoa o Maxim Vasiliev, ou te galue o se tagata suʻesuʻe ma le pule o galuega i FINCH. O le asō ou te fia taʻu atu ia te oe pe faʻapefea, faʻaaoga ElasticSearch, na mafai ai ona matou faʻatautaia 15 miliona fesili i le 6 minute ma faʻamalieina le uta i aso uma i luga o le saite a se tasi o matou tagata faʻatau. Ae paga lea, e tatau ona tatou faia e aunoa ma ni igoa, talu ai o loʻo i ai a tatou NDA, matou te faʻamoemoe o le a le afaina le anotusi o le tusiga mai lenei mea. Tatou o.

Auala e galue ai le poloketi

I luga o la matou pito i tua matou te fatuina ai auaunaga e faʻamautinoa ai le faʻaogaina o upega tafaʻilagi a le matou kalani ma le telefoni feaveaʻi. O le fausaga lautele e mafai ona vaaia i le ata:

Fa'atauga fa'atatau ile poloketi Highload ma ElasticSearch

I le faagasologa o galuega, matou te faʻatautaia se numera tele o fefaʻatauaiga: faʻatau, totogi, fefaʻatauaʻiga ma paleni faʻaoga, lea matou te teuina ai le tele o ogalaau, ma faʻaulufale mai ma faʻatau atu nei faʻamatalaga i faiga i fafo.

E iai fo'i fa'agasologa fa'aliliu pe a matou mauaina fa'amatalaga mai le kalani ma tu'uina atu i le tagata fa'aoga. E le gata i lea, o loʻo iai foʻi faʻagasologa mo le galulue faʻatasi ma polokalame totogi ma ponesi.

Fa'amatalaga puupuu

I le taimi muamua, na matou faʻaaogaina PostgreSQL e naʻo matou teuina faʻamaumauga. O ona tulaga lelei e faʻataʻitaʻiina mo se DBMS: o le i ai o fefaʻatauaiga, o se gagana e toe maua mai ai faʻamatalaga, se tele o meafaigaluega mo le tuʻufaʻatasia; tu'ufa'atasia ma fa'atinoga lelei fa'amalieina o matou mana'oga mo se taimi umi lava.

Matou te teuina faʻamaumauga uma i Postgres: mai fefaʻatauaiga i tala fou. Ae o le numera o tagata faʻaoga na faʻatupulaia, ma faʻatasi ai ma le numera o talosaga.

Ina ia malamalama, o le numera faaletausaga o sauniga i le 2017 i luga o le upega tafaʻilagi na o le 131 miliona. I le 2018 - 125 miliona. I le 2019 toe 130 miliona. Faʻaopoopo le isi 100-200 miliona mai le telefoni feaveaʻi o le saite ma le telefoni feaveaʻi, ma oe o le a maua se numera tele o talosaga.

Aʻo faʻatupulaia le poloketi, ua le mafai e Postgres ona faʻafeiloaʻi le uta; e le mafai ona matou faʻaauau - o le tele o fesili eseese na faʻaalia, lea na le mafai ai ona matou fatuina se numera tele o faʻamatalaga.

Na matou iloa o loʻo i ai se manaʻoga mo isi faleoloa faʻamaumauga e fetaui ma o matou manaʻoga ma aveese le uta mai PostgreSQL. Elasticsearch ma MongoDB na manatu o ni filifiliga talafeagai. Na faia'ina le mulimuli i itu nei:

  1. Fa'agesegese le fa'avasegaina o le saosaoa a'o fa'atupula'ia le tele o fa'amaumauga i fa'amaumauga. Faatasi ai ma Elastic, o le saoasaoa e le faalagolago i le aofaʻi o faʻamatalaga.
  2. Leai se su'esu'ega atoa

O lea na matou filifilia ai le Elastic mo i matou lava ma saunia mo le suiga.

Su'e ile Elastic

1. Na matou amataina le suiga i se 'auʻaunaga suʻesuʻe faʻatau-faʻatau. O loʻo i ai i le matou tagata faʻatau le aofaʻi e tusa ma le 70 points o faʻatau, ma i le taimi lava e tasi e manaʻomia le tele o ituaiga o suʻesuʻega i luga o le upega tafaʻilagi ma le talosaga:

  • Su'e tusitusiga ile igoa ole nu'u
  • Geosearch i totonu o se radius ua tu'uina mai se vaega patino. Mo se faʻataʻitaʻiga, afai e manaʻo le tagata faʻaoga e vaʻai po o fea o faʻatauga e sili ona latalata i lona fale.
  • Su'esu'e i se sikuea tu'u mai - e fa'ailoa mai e le tagata fa'aoga se sikuea i luga o le fa'afanua, ma fa'aali atu ia te ia vaega uma o lenei radius.
  • Su'e e ala i isi filiga. O fa'atauga e 'ese'ese mai le tasi i le isi ile fa'avasegaga

I le tautala e uiga i le faʻalapotopotoga, i Postgres o loʻo i ai se faʻamatalaga faʻamatalaga mo le faʻafanua ma tala fou, ma i Elastic matou te faia Snapshots mai faʻamatalaga muamua. O le mea moni o le taimi muamua na le mafai ai e Postgres ona faʻafetaui le suʻeina o tulaga uma. E le gata o le tele o faʻasinomaga, e mafai foi ona latou faʻapipiʻi, o lea na leiloa ai le Postgres scheduler ma e leʻi malamalama po o le a le faasino igoa e faʻaoga.

2. Na sosoo ai ma le laina o le vaega o talafou. O faʻasalalauga e faʻaalia i luga o le upega tafaʻilagi i aso uma ina ia le leiloa le tagata faʻaoga i le tafe o faʻamatalaga, e tatau ona faʻavasega faʻamaumauga aʻo leʻi tuʻuina atu. Ole mea lea ole su'esu'ega: i luga ole saite e mafai ona e su'eina e ala i tusitusiga, ma i le taimi lava e tasi fa'afeso'ota'i isi filiga, talu ai e faia fo'i e ala ile Elastic.

3. Ona matou siitia lea o fefaʻatauaiga. E mafai e tagata faʻaoga ona faʻatau se oloa faʻapitoa i luga o le saite ma auai i se faʻailoga faʻailoga. A maeʻa ia faʻatauga, matou te faʻatautaia le tele o faʻamaumauga, aemaise lava i faaiuga o vaiaso ma aso malolo. Mo le faʻatusatusaga, afai i aso masani o le numera o faʻatauga e tusa ma le 1,5-2 miliona, ona oʻo lea i aso malolo e mafai ona oʻo i le 53 miliona.

I le taimi lava e tasi, o faʻamaumauga e tatau ona faʻatautaia i se taimi laʻititi-e le fiafia tagata faʻaoga e faʻatali mo ni nai aso mo iʻuga. E leai se auala e ausia ai ia tapulaa e ala i Postgres - e masani ona matou mauaina poloka, ma aʻo matou faʻatautaia uma talosaga, e le mafai e tagata faʻaoga ona siaki pe latou te mauaina ni taui pe leai. E le manaia tele lenei mo pisinisi, o lea na matou siitia ai le gaioiga i Elasticsearch.

Vaitaimi

Ole taimi nei ua fa'atulagaina fa'afouga e fa'atatau i mea tutupu, e tusa ai ma tulaga nei:

  1. Fa'atauga. O le taimi lava matou te maua ai faʻamatalaga mai se puna mai fafo, matou te vave faʻalauiloaina se faʻafouga.
  2. Tala Fou. O le taimi lava e faʻasaʻo ai soʻo se tala i luga o le saite, e otometi lava ona lafoina i Elastic.

O iinei foi e taua le taʻua o le lelei o le Elastic. I Postgres, pe a tuʻuina atu se talosaga, e tatau ona e faʻatali seʻia oʻo i le faʻamaoni e faʻagasolo uma faʻamaumauga. E mafai ona e lafoina 10 afe faʻamaumauga i Elastic ma amata galue vave, e aunoa ma le faʻatali mo faʻamaumauga e tufatufa atu i Shards uma. Ioe, o nisi Shard poʻo Replica atonu e le vaʻaia faʻamatalaga i le taimi lava lena, ae e le o toe mamao ae maua mea uma.

Auala fa'atasi

E 2 auala e faʻatasi ai ma Elastic:

  1. E ala atu i se tagata o tausia e ala ile TCP. Ua faasolosolo ona mate le aveta'avale a le atunu'u: ua le toe lagolagoina, ma o lona syntax ua matua le talafeagai. O le mea lea, matou te le faʻaaogaina ma taumafai e lafoai atoa.
  2. E ala i se HTTP interface e mafai ona e faʻaogaina uma talosaga JSON ma Lucene syntax. O le mea mulimuli o le text engine lea e fa'aogaina e Elastic. I lenei filifiliga, matou te maua le malosi e Batch e ala i talosaga JSON i luga o HTTP. O le filifiliga lea o loʻo matou taumafai e faʻaoga.

Faʻafetai i le HTTP interface, e mafai ona matou faʻaogaina faletusi e tuʻuina atu se faʻatinoga asynchronous o le HTTP client. E mafai ona matou faʻaogaina le Batch ma le API asynchronous, lea e iu ai ina maua ai le maualuga o le faʻatinoga, lea na fesoasoani tele i aso o se faʻalauiloa tele (sili atu i lalo ifo)

O nisi numera mo faʻatusatusaga:

  • Fa'asaoina tagata fa'aoga na maua fa'ailoga i Postgres i 20 filo e aunoa ma fa'avasegaga: 460713 fa'amaumauga i le 42 sekone
  • Elastic + reactive client mo 10 filo + batch mo 1000 elemene: 596749 faamaumauga i le 11 sekone
  • Elastic + reactive client mo filo e 10 + vaega mo le 1000 elemene: 23801684 faamaumauga i le 4 minute

O lea ua matou tusia se pule ole talosaga HTTP e fausia le JSON e pei o le Batch/non-Batch ma auina atu e ala i soʻo se tagata HTTP client, e tusa lava po o le a le faletusi. E mafai fo'i ona e filifili e lafo talosaga fa'atasi po'o fa'atasi.

I nisi tu'ufa'atasiga matou te fa'aogaina pea le tagata fa'atau fela'uaiga, ae na'o se mataupu o le toe fa'aleleia vave. I lenei tulaga, o lana lava tagata faʻatau, fausia i luga o le faavae o Spring WebClient, e faʻaaogaina mo le gaioiga.

Fa'atauga fa'atatau ile poloketi Highload ma ElasticSearch

Si'itia tele

E tasi i le tausaga, o le poloketi e faʻafeiloaʻi se faʻalauiloa tele mo tagata faʻaoga - o le Highload lava lea e tasi, talu ai o le taimi nei matou te galulue ai ma le fiasefulu miliona o tagata faʻaoga i le taimi e tasi.

E masani lava, o uta maualuga e tupu i taimi o aso malolo, ae o lenei faʻalauiloa e matua ese lava. O le tausaga na muamua atu, i le aso o le faalauiloa, na matou faatauina atu ai le 27 iunite o oloa. O faʻamaumauga e sili atu ma le afa itula na faʻagasolo ai, lea na mafua ai le faʻalavelave i tagata faʻaoga. Na maua e tagata fa'aoga taui mo le auai, ae na manino mai o le faagasologa e tatau ona faʻavave.

I le amataga o le 2019, na matou filifili ai e manaʻomia ElasticSearch. Mo le tausaga atoa, matou te faʻatulagaina le faʻagaioiina o faʻamatalaga maua i Elastic ma lona gaosiga i le API o le telefoni feaveaʻi ma le upega tafaʻilagi. O se taunuuga, o le tausaga na sosoo ai i le taimi o le faʻalauiloaina na matou faʻatautaia 15 fa'amatalaga i le 131 minute.

Talu ai e to'atele a tatou tagata e manana'o e fa'atau le oloa ma auai i le fa'ailoga fa'ailoga i a tatou fa'asalalauga, ose fua le tumau lea. O lea matou te lafoina faʻamatalaga o loʻo i ai nei i Elastic, ae i le lumanaʻi matou te fuafua e faʻafeiloaʻi faʻamatalaga faʻamaumauga mo masina ua tuanaʻi i Postgres o se teuina tumau. Ina ia aua neʻi poloka le Elastic index, lea e iai foʻi ona tapulaʻa.

Fa'ai'uga/Fa'ai'uga

I le taimi nei, ua matou tuʻuina atu auaunaga uma matou te manaʻo ai i Elastic ma ua malolo mo le taimi nei. O le taimi nei o loʻo matou fausiaina se faʻasinomaga i Elastic i luga o le faʻamaumauga autu tumau i Postgres, lea e ave ai le uta o tagata.

I le lumanaʻi, matou te fuafua e faʻafeiloaʻi auʻaunaga pe a matou malamalama o le talosaga faʻamatalaga ua amata ona eseese ma o loʻo suʻeina mo se numera le faʻatapulaʻaina o koluma. E le o se galuega lenei mo Postgres.

Afai tatou te manaʻomia suʻesuʻega atoa i totonu o le faʻatinoga pe afai e tele a tatou suʻesuʻega suʻesuʻega, ua uma ona tatou iloa e manaʻomia le faaliliuina i le Elastic.

⌘⌘⌘

Faafetai mo le faitau. Afai o loʻo faʻaogaina e lau kamupani le ElasticSearch ma e iai au lava faʻatinoga, faʻamolemole taʻu mai ia i matou. O le a manaia le iloa pe faapefea ona faia e isi :)

puna: www.habr.com

Faaopoopo i ai se faamatalaga