ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° Highload-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ElasticSearch

ΠŸΡ€ΠΈΠ²Π΅Ρ‚, Π₯Π°Π±Ρ€! МСня Π·ΠΎΠ²ΡƒΡ‚ Максим Π’Π°ΡΠΈΠ»ΡŒΠ΅Π², я Ρ€Π°Π±ΠΎΡ‚Π°ΡŽ Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠΎΠΌ ΠΈ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π² FINCH. БСгодня я Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ElasticSearch, ΠΌΡ‹ смогли ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ 15 ΠΌΠ»Π½ запросов Π·Π° 6 ΠΌΠΈΠ½ΡƒΡ‚ ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½Ρ‹Π΅ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° сайтС ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π½Π°ΡˆΠΈΡ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ². К соТалСнию, придётся ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π±Π΅Π· ΠΈΠΌΡ‘Π½, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρƒ нас NDA, надССмся, Ρ‡Ρ‚ΠΎ содСрТаниС ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΎΡ‚ этого Π½Π΅ пострадаСт. Let`s go.

Как устроСн ΠΏΡ€ΠΎΠ΅ΠΊΡ‚

На нашСм бэкСндС ΠΌΡ‹ создаСм сСрвисы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ сайтов ΠΈ мобильного прилоТСния нашСго ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. ΠžΠ±Ρ‰ΡƒΡŽ структуру ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π½Π° схСмС:

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° Highload-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ElasticSearch

Π’ процСссС Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΌΡ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ большоС ΠΊΠΎΠ»-Π²ΠΎ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ: ΠΏΠΎΠΊΡƒΠΏΠΎΠΊ, Π²Ρ‹ΠΏΠ»Π°Ρ‚, ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с балансами ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Ρ…Ρ€Π°Π½ΠΈΠΌ ΠΌΠ½ΠΎΠ³ΠΎ Π»ΠΎΠ³ΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ ΠΈ экспортируСм эти Π΄Π°Π½Π½Ρ‹Π΅ Π²ΠΎ внСшниС систСмы.

Π’Π°ΠΊΠΆΠ΅ ΠΈΠ΄ΡƒΡ‚ ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ процСссы, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ ΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ. Помимо этого Π΅Ρ‰Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ процСссы ΠΏΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ°ΠΌΠΈ ΠΈ бонусными ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ.

ΠšΠΎΡ€ΠΎΡ‚ΠΊΠ°Ρ прСдыстория

Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π² качСствС СдинствСнного Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΡ‹ использовали PostgreSQL. Π•Π³ΠΎ стандартныС для Π‘Π£Π‘Π” прСимущСства: Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, Ρ€Π°Π·Π²ΠΈΡ‚Ρ‹ΠΉ язык Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, ΡˆΠΈΡ€ΠΎΠΊΠΈΠΉ инструмСнтарий для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ; Π² сочСтании с Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ довольного Π΄ΠΎΠ»Π³ΠΎ удовлСтворяли наши потрСбности.

ΠœΡ‹ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈ Π² Postgres Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ всС Π΄Π°Π½Π½Ρ‹Π΅: ΠΎΡ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π΄ΠΎ новостСй. Но количСство ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ росло, Π° вмСстС с Π½ΠΈΠΌ ΠΈ количСство запросов.

Для понимания, Π³ΠΎΠ΄ΠΎΠ²ΠΎΠ΅ количСство сСансов Π² 2017 Π³ΠΎΠ΄Ρƒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° дСсктопном сайтС β€” 131 ΠΌΠ»Π½. Π—Π° 2018 β€” 125 ΠΌΠ»Π½. 2019 снова 130 ΠΌΠ»Π½. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Ρ‚ΡƒΠ΄Π° Π΅Ρ‰Π΅ 100-200 ΠΌΠ»Π½ ΠΎΡ‚ мобильной вСрсии сайта ΠΈ мобильного прилоТСния, ΠΈ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ колоссальноС количСство запросов.

Π‘ ростом ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Postgres пСрСстал ΡΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ с Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ, ΠΌΡ‹ Π½Π΅ успСвали β€” появилось большоС количСство Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Ρ… запросов, ΠΏΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Π½Π΅ смогли ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ достаточноС количСство индСксов.

ΠœΡ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π»ΠΈ, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹ обСспСчили наш потрСбности ΠΈ сняли Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ с PostgreSQL. Π’ качСствС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² рассматривали Elasticsearch ΠΈ MongoDB. ПослСдний ΠΏΡ€ΠΎΠΈΠ³Ρ€Ρ‹Π²Π°Π» ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΡƒΠ½ΠΊΡ‚Π°ΠΌ:

  1. МСдлСнная ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ индСксации с ростом объСма Π΄Π°Π½Π½Ρ‹Ρ… Π² индСксах. Π£ Elastic ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π½Π΅ зависит ΠΎΡ‚ объСма Π΄Π°Π½Π½Ρ‹Ρ….
  2. НСт полнотСкстового поиска

Π’Π°ΠΊ ΠΌΡ‹ Π²Ρ‹Π±Ρ€Π°Π»ΠΈ для сСбя Elastic ΠΈ ΠΏΡ€ΠΈΠ³ΠΎΡ‚ΠΎΠ²ΠΈΠ»ΠΈΡΡŒ ΠΊ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρƒ.

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° Elastic

1. ΠœΡ‹ Π½Π°Ρ‡Π°Π»ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ с сСрвиса поиска Ρ‚ΠΎΡ‡Π΅ΠΊ ΠΏΡ€ΠΎΠ΄Π°ΠΆ. Π£ нашСго ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° суммарно Π΅ΡΡ‚ΡŒ ΠΎΠΊΠΎΠ»ΠΎ 70 000 Ρ‚ΠΎΡ‡Π΅ΠΊ ΠΏΡ€ΠΎΠ΄Π°ΠΆ, ΠΈ ΠΏΡ€ΠΈ этом трСбуСтся нСсколько Ρ‚ΠΈΠΏΠΎΠ² поиска Π½Π° сайтС ΠΈ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ:

  • ВСкстовый поиск ΠΏΠΎ названию насСлённого ΠΏΡƒΠ½ΠΊΡ‚Π°
  • ГСопоиск Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΌ радиусС ΠΎΡ‚ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Ρ‚ΠΎΡ‡ΠΊΠΈ. НапримСр, Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Ρ…ΠΎΡ‡Π΅Ρ‚ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΏΡ€ΠΎΠ΄Π°ΠΆ Π±Π»ΠΈΠΆΠ΅ всСго ΠΊ Π΅Π³ΠΎ Π΄ΠΎΠΌΡƒ.
  • Поиск ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Ρƒ – ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΎΡ‡Π΅Ρ€Ρ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ Π½Π° ΠΊΠ°Ρ€Ρ‚Π΅, ΠΈ Π΅ΠΌΡƒ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ всС Ρ‚ΠΎΡ‡ΠΊΠΈ Π² этом радиусС.
  • Поиск ΠΏΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°ΠΌ. Π’ΠΎΡ‡ΠΊΠΈ ΠΏΡ€ΠΎΠ΄Π°ΠΆ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° ΠΏΠΎ ассортимСнту

Если Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΏΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡŽ, Ρ‚ΠΎ Π² Postgres Ρƒ нас Π»Π΅ΠΆΠΈΡ‚ источник Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠ°ΠΊ ΠΏΠΎ ΠΊΠ°Ρ€Ρ‚Π΅, Ρ‚Π°ΠΊ ΠΈ ΠΏΠΎ новостям, Π° Π² Elastic Π΄Π΅Π»Π°ΡŽΡ‚ΡΡ Snapshot’ы ΠΎΡ‚ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Postgres Π½Π΅ справлялся с поиском ΠΏΠΎ всСм критСриям. Мало Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ индСксов, ΠΎΠ½ΠΈ ΠΌΠΎΠ³Π»ΠΈ Π΅Ρ‰Π΅ ΠΈ ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°Ρ‚ΡŒΡΡ, поэтому ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Postgres тСрялся ΠΈ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π» ΠΊΠ°ΠΊΠΎΠΉ индСкс Π΅ΠΌΡƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

2. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π½Π° ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π±Ρ‹Π» Ρ€Π°Π·Π΄Π΅Π» новостСй. На сайтС ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ дСнь ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ потСрялся Π² ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π΄Π°Π½Π½Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π΄Π°Ρ‡Π΅ΠΉ. Для этого ΠΈ Π½ΡƒΠΆΠ΅Π½ поиск: Π½Π° сайтС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΏΠΎ тСкстовому совпадСнию, Π° Π·Π°ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ‚ΠΎΠΆΠ΅ сдСланы Ρ‡Π΅Ρ€Π΅Π· Elastic.

3. ΠŸΠΎΡ‚ΠΎΠΌ ΠΌΡ‹ пСрСнСсли ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΊΡƒΠΏΠ°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Ρ‚ΠΎΠ²Π°Ρ€ Π½Π° сайтС ΠΈ ΡƒΡ‡Π°ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ€ΠΎΠ·Ρ‹Π³Ρ€Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠ·ΠΎΠ². ПослС Ρ‚Π°ΠΊΠΈΡ… ΠΏΠΎΠΊΡƒΠΏΠΎΠΊ, ΠΌΡ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ большоС количСство Π΄Π°Π½Π½Ρ‹Ρ…, особСнно Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΈ ΠΏΡ€Π°Π·Π΄Π½ΠΈΠΊΠΈ. Для сравнСния, Ссли Π² ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Π΄Π½ΠΈ количСство ΠΏΠΎΠΊΡƒΠΏΠΎΠΊ составляСт Π³Π΄Π΅-Ρ‚ΠΎ 1,5-2 ΠΌΠ»Π½, Ρ‚ΠΎ Π² ΠΏΡ€Π°Π·Π΄Π½ΠΈΠΊΠΈ Ρ†ΠΈΡ„Ρ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΡΡ‚ΠΈΠ³Π°Ρ‚ΡŒ 53 ΠΌΠ»Π½.

ΠŸΡ€ΠΈ этом Π΄Π°Π½Π½Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π·Π° минимальноС врСмя β€” ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π½Π΅ Π»ΡŽΠ±ΡΡ‚ ΠΆΠ΄Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° нСсколько Π΄Π½Π΅ΠΉ. Π§Π΅Ρ€Π΅Π· Postgres Ρ‚Π°ΠΊΠΈΡ… сроков Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ добьСшься β€” ΠΌΡ‹ часто ΠΏΠΎΠ»ΡƒΡ‡Π°Π»ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, ΠΈ ΠΏΠΎΠΊΠ° ΠΌΡ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»ΠΈ всС запросы, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΠ·Ρ‹ ΠΈΠ»ΠΈ Π½Π΅Ρ‚. Π­Ρ‚ΠΎ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ приятно для бизнСса, поэтому ΠΌΡ‹ пСрСнСсли ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π² Elasticsearch.

ΠŸΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ

БСйчас обновлСния настроСны событийно, ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ условиям:

  1. Π’ΠΎΡ‡ΠΊΠΈ ΠΏΡ€ΠΎΠ΄Π°ΠΆ. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ Π½Π°ΠΌ приходят Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· внСшнСго источника, ΠΌΡ‹ сразу ΠΆΠ΅ запускаСм ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅.
  2. Новости. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° сайтС Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΡŽΡ‚ ΠΊΠ°ΠΊΡƒΡŽ-Π»ΠΈΠ±ΠΎ Π½ΠΎΠ²ΠΎΡΡ‚ΡŒ, ΠΎΠ½Π° автоматичСски отправляСтся Π² Elastic.

Π—Π΄Π΅ΡΡŒ Π΅Ρ‰Π΅ Ρ€Π°Π· стоит ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ ΠΏΠ»ΡŽΡΠ°Ρ… Elastic. Π’ Postgres Π²ΠΎ врСмя ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ запроса, Π½ΡƒΠΆΠ½ΠΎ ΠΆΠ΄Π°Ρ‚ΡŒ ΠΏΠΎΠΊΠ° ΠΎΠ½ чСстно ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ всС записи. Π’ Elastic ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ 10 тыс. записСй, ΠΈ сразу Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Π½Π΅ доТидаясь, ΠΏΠΎΠΊΠ° записи разойдутся ΠΏΠΎ всСм Shards. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Shard ΠΈΠ»ΠΈ Replica ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ сразу, Π½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ скоро всС Π±ΡƒΠ΄Π΅Ρ‚ доступно.

Бпособы ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ

Π•ΡΡ‚ΡŒ 2 способа ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с Elastic:

  1. Π§Π΅Ρ€Π΅Π· Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠΎ TCP. Нативный Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ постСпСнно Π²Ρ‹ΠΌΠΈΡ€Π°Π΅Ρ‚: Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°ΡŽΡ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ, Π½Π° Π½Π΅ΠΌ ΠΎΡ‡Π΅Π½ΡŒ Π½Π΅ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ синтаксис. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ Π΅Π³ΠΎ практичСски Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΈ стараСмся ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ Π½Π΅Π³ΠΎ.
  2. Π§Π΅Ρ€Π΅Π· HTTP интСрфСйс, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ JSON запросы, Ρ‚Π°ΠΊ ΠΈ синтаксис Lucene. ПослСднСС β€” тСкстовый Π΄Π²ΠΈΠΆΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Elastic. Π’ Ρ‚Π°ΠΊΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Batch Ρ‡Π΅Ρ€Π΅Π· JSON-запросы ΠΏΠΎ HTTP. ИмСнно этот Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΌΡ‹ стараСмся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

Благодаря HTTP-интСрфСйсу ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°ΡŽΡ‚ Π°ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ HTTP ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ прСимущСство Batch ΠΈ асинхронного API, Ρ‡Ρ‚ΠΎ Π² ΠΈΡ‚ΠΎΠ³Π΅ Π΄Π°Ρ‘Ρ‚ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, которая ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠΌΠΎΠ³Π»Π° Π² Π΄Π½ΠΈ ΠΊΡ€ΡƒΠΏΠ½ΠΎΠΉ Π°ΠΊΡ†ΠΈΠΈ (ΠΎΠ± этом Π½ΠΈΠΆΠ΅)

НСмного Ρ†ΠΈΡ„Ρ€ для сравнСния:

  • Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠΈΡ… ΠΏΡ€ΠΈΠ·Ρ‹ Π² Postgres Π² 20 ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π±Π΅Π· Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΎΠΊ: 460713 записСй Π·Π° 42 сСкунды
  • Elastic + Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π½Π° 10 ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² + batch Π½Π° 1000 элСмСнтов: 596749 записСй Π·Π° 11 сСкунд
  • Elastic + Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π½Π° 10 ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² + batch Π½Π° 1000 элСмСнтов: 23801684 записСй Π·Π° 4 ΠΌΠΈΠ½ΡƒΡ‚Ρ‹

БСйчас ΠΌΡ‹ написали ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ запросов ΠΏΠΎ HTTP, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ строит JSON, ΠΊΠ°ΠΊ Batch/Π½Π΅ Batch ΠΈ отправляСт Ρ‡Π΅Ρ€Π΅Π· любой HTTP ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π²Π½Π΅ зависимости ΠΎΡ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Π’Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ синхронно ΠΈΠ»ΠΈ асинхронно ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ запросы.

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… интСграциях ΠΌΡ‹ всС Π΅Ρ‰Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ transport client, Π½ΠΎ это лишь вопрос блиТайшСго Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π°. ΠŸΡ€ΠΈ этом для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ собствСнный ΠΊΠ»ΠΈΠ΅Π½Ρ‚, построСнный Π½Π° Π±Π°Π·Π΅ Spring WebClient.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° Highload-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ElasticSearch

Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ акция

Π Π°Π· Π² Π³ΠΎΠ΄ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ большая акция для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ β€” это Ρ‚ΠΎΡ‚ самый Highload, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² это врСмя ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ с дСсятками ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠΈΠΊΠΈ Π½Π°Π³Ρ€ΡƒΠ·ΠΎΠΊ Π±Ρ‹Π²Π°ΡŽΡ‚ Π² ΠΏΡ€Π°Π·Π΄Π½ΠΈΡ‡Π½Ρ‹Π΅ Π΄Π½ΠΈ, Π½ΠΎ эта акция β€” совсСм Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π’ ΠΏΠΎΠ·Π°ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ Π³ΠΎΠ΄Ρƒ Π² дСнь Π°ΠΊΡ†ΠΈΠΈ ΠΌΡ‹ ΠΏΡ€ΠΎΠ΄Π°Π»ΠΈ 27 580 890 Π΅Π΄ΠΈΠ½ΠΈΡ† Ρ‚ΠΎΠ²Π°Ρ€Π°. Π”Π°Π½Π½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»ΠΈΡΡŒ Π±ΠΎΠ»Π΅Π΅ получаса, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π»ΠΎ нСудобство Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ·Ρ‹ Π·Π° участиС, Π½ΠΎ стало понятно, Ρ‡Ρ‚ΠΎ процСсс Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΠΊΠΎΡ€ΡΡ‚ΡŒ.

Π’ Π½Π°Ρ‡Π°Π»Π΅ 2019 Π³ΠΎΠ΄Π° ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ΅Π½ ElasticSearch. Π¦Π΅Π»Ρ‹ΠΉ Π³ΠΎΠ΄ ΠΌΡ‹ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Π»ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π² Elastic ΠΈ ΠΈΡ… Π²Ρ‹Π΄Π°Ρ‡Ρƒ Π² api мобильного прилоТСния ΠΈ сайта. Π’ ΠΈΡ‚ΠΎΠ³Π΅ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π³ΠΎΠ΄ Π²ΠΎ врСмя Π°ΠΊΡ†ΠΈΠΈ ΠΌΡ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ 15 131 783 записСй Π·Π° 6 ΠΌΠΈΠ½ΡƒΡ‚.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ, ΠΆΠ΅Π»Π°ΡŽΡ‰ΠΈΡ… ΠΊΡƒΠΏΠΈΡ‚ΡŒ Ρ‚ΠΎΠ²Π°Ρ€ ΠΈ ΡƒΡ‡Π°ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ€ΠΎΠ·Ρ‹Π³Ρ€Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠ·ΠΎΠ² Π² акциях Ρƒ нас ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ, Ρ‚ΠΎ это врСмСнная ΠΌΠ΅Ρ€Π°. БСйчас ΠΌΡ‹ отправляСм Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² Elastic, Π½ΠΎ Π² дальнСйшСм ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅ΠΌ Π°Ρ€Ρ…ΠΈΠ²Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π·Π° ΠΏΡ€ΠΎΡˆΠ»Ρ‹Π΅ мСсяцы ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΡ‚ΡŒ Π² Postgres, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€ΠΌΠ°Π½Π΅Π½Ρ‚Π½ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π·Π°ΡΠΎΡ€ΡΡ‚ΡŒ индСкс Elastic, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚ΠΎΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ свои ограничСния.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅/Π²Ρ‹Π²ΠΎΠ΄Ρ‹

На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΡ‹ пСрСнСсли Π½Π° Elastic всС сСрвисы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΈ ΠΈ Π½Π° этом ΠΏΠΎΠΊΠ° сдСлали ΠΏΠ°ΡƒΠ·Ρƒ. БСйчас ΠΌΡ‹ ΠΏΠΎΠ²Π΅Ρ€Ρ… основного пСрсистСнтного Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π² Postgres строим индСкс Π² Elastic, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π° сСбя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΡƒΡŽ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ.

Π’ дальнСйшСм ΠΌΡ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΡ‚ΡŒ сСрвисы Ссли ΠΌΡ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ запрос Π΄Π°Π½Π½Ρ‹Ρ… становится слишком ΠΌΠ½ΠΎΠ³ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹ΠΌ ΠΈ ищСтся ΠΏΠΎ Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠΌΡƒ количСству ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ. Π­Ρ‚ΠΎ ΡƒΠΆΠ΅ Π·Π°Π΄Π°Ρ‡Π° Π½Π΅ для Postgres.

Если Π½Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π½ΡƒΠΆΠ΅Π½ полнотСкстовый поиск Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π΅ ΠΈΠ»ΠΈ Ссли Ρƒ нас появится ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Ρ… ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠ΅Π² поиска Ρ‚ΠΎ ΠΌΡ‹ ΡƒΠΆΠ΅ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ это Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π² Elastic.

⌘⌘⌘

Бпасибо, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π»ΠΈ. Если Ρƒ вас Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Ρ‚ΠΎΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ElasticSearch ΠΈ Π΅ΡΡ‚ΡŒ собствСнныС кСйсы Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Ρ‚ΠΎ расскаТитС. Π‘ΡƒΠ΄Π΅Ρ‚ интСрСсно ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρƒ Π΄Ρ€ΡƒΠ³ΠΈΡ… πŸ™‚

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com