Π£Π΄ΠΎΠ±Π½Ρ‹Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹

ΠŸΡ€ΠΈΠ²Π΅Ρ‚, Π₯Π°Π±Ρ€!

Π’ свСтС Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… событий ΠΈΠ·-Π·Π° коронавируса ряд ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-сСрвисов стал ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π½ΡƒΡŽ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ. НапримСр, ΠΎΠ΄Π½Π° ΠΈΠ· Ρ‚ΠΎΡ€Π³ΠΎΠ²Ρ‹Ρ… сСтСй Π² Π’Π΅Π»ΠΈΠΊΠΎΠ±Ρ€ΠΈΡ‚Π°Π½ΠΈΠΈ просто остановила сайт с ΠΎΠ½Π»Π°ΠΉΠ½-Π·Π°ΠΊΠ°Π·Π°ΠΌΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ Ρ…Π²Π°Ρ‚ΠΈΠ»ΠΎ мощностСй. И Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ всСгда ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ сСрвСр, просто Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡ‰Π½ΠΎΠ΅ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΎΠ΄Π½Π°ΠΊΠΎ запросы ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½Π°Π΄ΠΎ (ΠΈΠ»ΠΈ ΠΎΠ½ΠΈ ΡƒΠΉΠ΄ΡƒΡ‚ ΠΊ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π°ΠΌ).

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я ΠΊΡ€Π°Ρ‚ΠΊΠΎ расскаТу ΠΎ популярных ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ позволят ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ быстрый ΠΈ отказоустойчивый сСрвис. Однако ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… схСм Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ я ΠΎΡ‚ΠΎΠ±Ρ€Π°Π» Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ сСйчас Π»Π΅Π³ΠΊΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡƒΠ½ΠΊΡ‚Π° Ρƒ вас ΠΈΠ»ΠΈ Π΅ΡΡ‚ΡŒ ΡƒΠΆΠ΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΈΠ»ΠΈ Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±Π»Π°Ρ‡Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹.

Π“ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

Π‘Π°ΠΌΡ‹ΠΉ простой ΠΈ всСм извСстный ΠΏΡƒΠ½ΠΊΡ‚. Условно, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ Π΄Π²Π΅ схСмы распрСдСлСния Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ β€” Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΈ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС Π²Ρ‹ позволяСтС сСрвисам Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ, Ρ‚Π΅ΠΌ самым распрСдСляя Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ. Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ Π·Π°ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡ‰Π½Ρ‹Π΅ сСрвСры ΠΈΠ»ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΊΠΎΠ΄.

Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° я Π²ΠΎΠ·ΡŒΠΌΡƒ абстрактноС ΠΎΠ±Π»Π°Ρ‡Π½ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ², Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π°Π½Π°Π»ΠΎΠ³ OwnCloud, OneDrive ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

Бтандартная ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ схСмы Π½ΠΈΠΆΠ΅, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½Π° лишь дСмонстрируСт ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ систСмы. Π’Π΅Π΄ΡŒ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ сСрвисы. Π§Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚, Ссли с ΠΏΠ»Π°Π½ΡˆΠ΅Ρ‚Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ сохранил Ρ„Π°ΠΉΠ», Π° ΠΏΠΎΡ‚ΠΎΠΌ Ρ…ΠΎΡ‡Π΅Ρ‚ Π΅Π³ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ с Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°?

Π£Π΄ΠΎΠ±Π½Ρ‹Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹
Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°ΠΌΠΈ: Π² Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΌ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΡ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ Π½Π°Ρ€Π°Ρ‰ΠΈΠ²Π°Ρ‚ΡŒ ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ ΡƒΠ·Π»ΠΎΠ², Π° Π² Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΌ β€” Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΡƒΠ·Π»Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ.

CQRS

Command Query Responsibility Segregation довольно Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ позволяСт Ρ€Π°Π·Π½Ρ‹ΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΊ Ρ€Π°Π·Π½Ρ‹ΠΌ сСрвисам, Π½ΠΎ ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ событий. Π•Π³ΠΎ бонусы Π½Π΅ ΡΡ‚ΠΎΠ»ΡŒ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ для простого прилоТСния, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ ΠΊΡ€Π°ΠΉΠ½Π΅ Π²Π°ΠΆΠ΅Π½ (ΠΈ прост) для Π½Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ сСрвиса. Π•Π³ΠΎ ΡΡƒΡ‚ΡŒ: входящиС ΠΈ исходящиС ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°Ρ‚ΡŒΡΡ. Π’ΠΎ Π΅ΡΡ‚ΡŒ Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ запрос ΠΈ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚, вмСсто этого Π²Ρ‹ отправляСтС запрос Π² сСрвис A, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ ΠΎΡ‚Π²Π΅Ρ‚ Π² сСрвисС Π‘.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ бонус этого ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° β€” Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π·Ρ€Ρ‹Π²Π° соСдинСния (Π² ΡˆΠΈΡ€ΠΎΠΊΠΎΠΌ смысла этого слова) Π² процСссС выполнСния Π΄ΠΎΠ»Π³ΠΎΠ³ΠΎ запроса. Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° возьмСм Π±ΠΎΠ»Π΅Π΅-ΠΌΠ΅Π½Π΅Π΅ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ:

  1. ΠšΠ»ΠΈΠ΅Π½Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ» запрос Π½Π° сСрвСр.
  2. Π‘Π΅Ρ€Π²Π΅Ρ€ запустил Π΄ΠΎΠ»Π³ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ.
  3. Π‘Π΅Ρ€Π²Π΅Ρ€ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΠ» ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΏΡƒΠ½ΠΊΡ‚Π΅ 2 ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π» ΠΎΠ±Ρ€Ρ‹Π² связи (ΠΈΠ»ΠΈ ΡΠ΅Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠ»Π°ΡΡŒ, ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΠ΅Ρ€Π΅ΡˆΡ‘Π» Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ страницу, ΠΎΠ±ΠΎΡ€Π²Π°Π² соСдинСниС). Π’ этом случаС сСрвСру Π±ΡƒΠ΄Π΅Ρ‚ слоТно ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎΡΡŒ. ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΡ CQRS, ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΠΎΠΉ:

  1. ΠšΠ»ΠΈΠ΅Π½Ρ‚ подписался Π½Π° обновлСния.
  2. ΠšΠ»ΠΈΠ΅Π½Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ» запрос Π½Π° сСрвСр.
  3. Π‘Π΅Ρ€Π²Π΅Ρ€ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΠ» «запрос принят».
  4. Π‘Π΅Ρ€Π²Π΅Ρ€ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΠ» Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠ°Π½Π°Π» ΠΈΠ· ΠΏΡƒΠ½ΠΊΡ‚Π° Β«1Β».

Π£Π΄ΠΎΠ±Π½Ρ‹Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹

Как Π²ΠΈΠ΄Π½ΠΎ, схСма Ρ‡ΡƒΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ слоТная. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ request-response здСсь отсутствуСт. Однако ΠΊΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ, ΠΎΠ±Ρ€Ρ‹Π² связи Π² процСссС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ запроса Π½Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Ссли Π½Π° самом Π΄Π΅Π»Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΊ сСрвису с Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… устройств (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с мобильного Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π° ΠΈ с ΠΏΠ»Π°Π½ΡˆΠ΅Ρ‚Π°), ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π²Π΅Ρ‚ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ» Π½Π° ΠΎΠ±Π° устройства.

Π§Ρ‚ΠΎ интСрСсно, ΠΊΠΎΠ΄ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ входящих сообщСний становится ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ (Π½Π΅ Π½Π° 100%) ΠΊΠ°ΠΊ для событий, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ повлиял сам ΠΊΠ»ΠΈΠ΅Π½Ρ‚, Ρ‚Π°ΠΊ ΠΈ для ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… событий, Π² Ρ‚ΠΎΠΌ числС ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ².

Однако Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ бонусы Π² связи с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ стилС (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ RX ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈ). И Π²ΠΎΡ‚ это ΡƒΠΆΠ΅ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹ΠΉ плюс, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎ сути ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π΅Ρ‰Π΅ с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°. Для ΠΆΠΈΡ€Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ это ΠΌΠΎΠΆΠ΅Ρ‚ сущСствСнно ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ рСсурсы Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ.

Если ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ с Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, Ρ‚ΠΎ бонусом ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ запросы Π½Π° ΠΎΠ΄ΠΈΠ½ сСрвСр, Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ сам Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ для Π½Π΅Π³ΠΎ сСрвис, Π° систСма Π²Π½ΡƒΡ‚Ρ€ΠΈ всё Ρ€Π°Π²Π½ΠΎ смоТСт ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ события.

Event Sourcing

Как Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· основных особСнностСй распрСдСлСнной систСмы являСтся отсутствиС ΠΎΠ±Ρ‰Π΅Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΎΠ±Ρ‰Π΅ΠΉ критичСской сСкции. Для ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ (Π½Π° Ρ‚Π΅Ρ… ΠΆΠ΅ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠ°Ρ…), Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ Π½ΠΈΠΊΡ‚ΠΎ большС Π½Π΅ выполняСт этот ΠΊΠΎΠ΄. Однако для распрСдСлСнной систСмы ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ опасно, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π° это ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ±ΡŒΠ΅Ρ‚ΡΡ вся ΠΏΡ€Π΅Π»Π΅ΡΡ‚ΡŒ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ β€” всё Ρ€Π°Π²Π½ΠΎ всС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΆΠ΄Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ.

ΠžΡ‚ΡΡŽΠ΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π²Π°ΠΆΠ½Ρ‹ΠΉ Ρ„Π°ΠΊΡ‚ β€” Π±Ρ‹ΡΡ‚Ρ€ΡƒΡŽ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ систСму нСльзя ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΠΈΠ±ΠΎ Ρ‚ΠΎΠ³Π΄Π° ΠΌΡ‹ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° опрСдСлСнная ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². И для этого ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ с eventual consistency, Π³Π΄Π΅ гарантируСтся, Ρ‡Ρ‚ΠΎ Π² отсутствиС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π΄Π°Π½Π½Ρ‹Ρ… Ρ‡Π΅Ρ€Π΅Π· ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ послС послСднСго обновлСния (Β«Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ счётС») всС запросы Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ послСднСС ΠΎΠ±Π½ΠΎΠ²Π»Ρ‘Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ для классичСских Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… довольно часто примСняСтся строгая ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΡƒΠ·Π΅Π» Π²Π»Π°Π΄Π΅Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ (ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ часто достигаСтся Π² случаС, ΠΊΠΎΠ³Π΄Π° транзакция считаСтся установлСнной Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС ΠΎΡ‚Π²Π΅Ρ‚Π° Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ сСрвСра). Π—Π΄Π΅ΡΡŒ Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ послаблСния ΠΈΠ·-Π·Π° ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ изоляции, ΠΎΠ΄Π½Π°ΠΊΠΎ общая ΡΡƒΡ‚ΡŒ остаСтся Ρ‚ΠΎΠΉ ΠΆΠ΅ β€” Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΆΠΈΡ‚ΡŒ Π² ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ согласованном ΠΌΠΈΡ€Π΅.

Однако вСрнСмся ΠΊ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅. Если Ρ‡Π°ΡΡ‚ΡŒ систСмы ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ построСна с eventual consistency, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ схСму.

Π£Π΄ΠΎΠ±Π½Ρ‹Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹

Π’Π°ΠΆΠ½Ρ‹Π΅ особСнности этого ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°:

  • ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ входящий запрос помСщаСтся Π² ΠΎΠ΄Π½Ρƒ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ.
  • Π’ процСссС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ запроса сСрвис ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π·Π°Π΄Π°Ρ‡ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ.
  • Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ входящСго события Π΅ΡΡ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ для Π΄Π΅Π΄ΡƒΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ).
  • ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ идСологичСски Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎ схСмС "append only". Из Π½Π΅Ρ‘ нСльзя ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ элСмСнты ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΈΡ….
  • ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎ схСмС FIFO (ΠΈΠ·Π²ΠΈΠ½ΠΈΡ‚Π΅ Π·Π° Ρ‚Π°Π²Ρ‚ΠΎΠ»ΠΎΠ³ΠΈΡŽ). Если Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, Ρ‚ΠΎ слСдуСт Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· этапов ΠΏΠ΅Ρ€Π΅ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² Ρ€Π°Π·Π½Ρ‹Π΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ.

Напомню, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ рассматриваСм случай ΠΎΠ½Π»Π°ΠΉΠ½ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°. Π’ этом случаС систСма Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ, ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ, Ρ‚Π°ΠΊ:

Π£Π΄ΠΎΠ±Π½Ρ‹Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹

Π’Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ сСрвисы Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ сСрвСр. Π”Π°ΠΆΠ΅ процСсс ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅. Π’Π°ΠΆΠ½ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ΅: идСологичСски эти Π²Π΅Ρ‰ΠΈ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

А для Π΄Π²ΡƒΡ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ схСма Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ (сСрвисы, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ Ρ€Π°Π·Π½Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Ρ‹ Ρ€Π°Π·Π½Ρ‹ΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ):

Π£Π΄ΠΎΠ±Π½Ρ‹Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹

Бонусы ΠΎΡ‚ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ:

  • БСрвисы ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹. ΠžΡ‡Π΅Ρ€Π΅Π΄ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹. Если Π½Π°ΠΌ потрСбуСтся ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ½ΡƒΡŽ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ систСмы, Ρ‚ΠΎ Π½Π°Π΄ΠΎ всСго лишь Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ большС сСрвисов Π½Π° большСм числС сСрвСров.
  • Когда ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π½Π°ΠΌ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ сохранСния Π΄Π°Π½Π½Ρ‹Ρ…. Наоборот, Π½Π°ΠΌ достаточно ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Β«ΠΎΠΊΒ», Π° ΠΏΠΎΡ‚ΠΎΠΌ постСпСнно Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ. Π—Π°ΠΎΠ΄Π½ΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ сглаТиваСт ΠΏΠΈΠΊΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° происходит быстро, Π° ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π° ΠΏΠΎ всСму Ρ†ΠΈΠΊΠ»Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΆΠ΄Π°Ρ‚ΡŒ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ.
  • Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° я Π΄ΠΎΠ±Π°Π²ΠΈΠ» сСрвис Π΄Π΅Π΄ΡƒΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ пытаСтся ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹. Если ΠΎΠ½ Π΄ΠΎΠ»Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² 1% случаСв, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ этого практичСски Π½Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ (см. Π²Ρ‹ΡˆΠ΅), Ρ‡Ρ‚ΠΎ являСтся большим плюсом, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΡ‚ нас ΡƒΠΆΠ΅ Π½Π΅ трСбуСтся стопроцСнтная ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ.

Однако сразу ΠΆΠ΅ Π²ΠΈΠ΄Π½Ρ‹ ΠΈ минусы:

  • Π£ нашСй систСмы ΠΏΡ€ΠΎΠΏΠ°Π»Π° строгая ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Ссли, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ ΠΊ Ρ€Π°Π·Π½Ρ‹ΠΌ сСрвисам, Ρ‚ΠΎ тСорСтичСски ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·Π½ΠΎΠ΅ состояниС (Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· сСрвисов ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΡƒΡΠΏΠ΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΎΡ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ). Как Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ слСдствиС, Ρƒ систСмы Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅Ρ‚ ΠΎΠ±Ρ‰Π΅Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π’ΠΎ Π΅ΡΡ‚ΡŒ нСльзя, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС события просто ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΡ€ΠΈΡ…ΠΎΠ΄Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ часы ΠΌΠ΅ΠΆΠ΄Ρƒ сСрвСрами ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ Π±Ρ‹Ρ‚ΡŒ синхронными (Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ врСмя Π½Π° Π΄Π²ΡƒΡ… сСрвСрах β€” это утопия).
  • НикакиС события нСльзя Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ просто ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚ΡŒ (ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…). ВмСсто этого Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ событиС β€” compensation event, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒ послСднСС состояниС Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅. Как ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· схоТСй области: Π±Π΅Π· пСрСзаписи истории (Ρ‡Ρ‚ΠΎ ΠΏΠ»ΠΎΡ…ΠΎ Π² рядС случаСв) Π² git нСльзя ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ rollback commit, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎ сути просто Π²Π΅Ρ€Π½Π΅Ρ‚ староС состояниС. Однако Π² истории сохранится ΠΈ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚, ΠΈ rollback.
  • Π‘Ρ…Π΅ΠΌΠ° Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΎΡ‚ Ρ€Π΅Π»ΠΈΠ·Π° ΠΊ Ρ€Π΅Π»ΠΈΠ·Ρƒ, ΠΎΠ΄Π½Π°ΠΊΠΎ старыС события Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ получится ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ стандарт (Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ события Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ нСльзя ΠΌΠ΅Π½ΡΡ‚ΡŒ).

Как Π²ΠΈΠ΄Π½ΠΎ, Event Sourcing ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ уТиваСтся с CQRS. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ систСму с эффСктивными ΠΈ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ очСрСдями, ΠΎΠ΄Π½Π°ΠΊΠΎ Π±Π΅Π· раздСлСния ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, ΡƒΠΆΠ΅ само ΠΏΠΎ сСбС слоТно, вСдь придСтся Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΠΈ синхронизации, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π½ΠΈΠ²Π΅Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ вСсь ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ эффСкт ΠΎΡ‚ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ. ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΡ ΠΎΠ±Π° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° сразу, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’ нашСм случаС, ΠΏΡ€ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ Ρ„Π°ΠΉΠ»Π° Π½Π° сСрвСр, Π² ΠΎΡ‚Π²Π΅Ρ‚Π΅ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Β«ΠΎΠΊΒ», Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚ лишь, Ρ‡Ρ‚ΠΎ «опСрация добавлСния Ρ„Π°ΠΉΠ»Π° сохранСна». Π€ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, это Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ ΡƒΠΆΠ΅ доступны Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… устройствах (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, сСрвис Π΄Π΅Π΄ΡƒΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ индСкс). Однако Ρ‡Π΅Ρ€Π΅Π· Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ ΠΏΡ€ΠΈΠ΄Π΅Ρ‚ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ Π² стилС Β«Ρ„Π°ΠΉΠ» Π₯ сохранСн».

Как Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

  • Число статусов ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² увСличиваСтся: вмСсто классичСского Β«Ρ„Π°ΠΉΠ» ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Β» ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π΄Π²Π°: Β«Ρ„Π°ΠΉΠ» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π½Π° сСрвСрС» ΠΈ Β«Ρ„Π°ΠΉΠ» сохранСн Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Β». ПослСднСС ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ устройства ΡƒΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» (с ΠΏΠΎΠΏΡ€Π°Π²ΠΊΠΎΠΉ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с Ρ€Π°Π·Π½ΠΎΠΉ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ).
  • Из-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ информация ΠΎΠ± ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ ΠΊΠ°Π½Π°Π»Π°ΠΌ, Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΡ‹Π²Π°Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ статус ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ„Π°ΠΉΠ»Π°. Как слСдствиС ΠΈΠ· этого: Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ классичСского request-response, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡ‰Π΅Π½ Π² процСссС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ„Π°ΠΉΠ»Π°, ΠΎΠ΄Π½Π°ΠΊΠΎ статус этой самой ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π΅Π½. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ этот ΠΏΡƒΠ½ΠΊΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΏΠΎ сути, ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ. Как слСдствиС: ΠΌΡ‹ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ»Π΅Ρ€Π°Π½Ρ‚Π½Ρ‹ ΠΊ ΠΎΡ‚ΠΊΠ°Π·Π°ΠΌ.

Sharding

Как ΡƒΠΆΠ΅ ΠΎΠΏΠΈΡΡ‹Π²Π°Π»ΠΎΡΡŒ Π²Ρ‹ΡˆΠ΅, Π² систСмах с event sourcing отсутствуСт строгая ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ. А Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰ Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ синхронизации ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ. ΠŸΡ€ΠΈΠ±Π»ΠΈΠΆΠ°ΡΡΡŒ ΠΊ нашСй Π·Π°Π΄Π°Ρ‡Π΅, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ:

  • Π Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΠΎ Ρ‚ΠΈΠΏΠ°ΠΌ. НапримСр, ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ/Π²ΠΈΠ΄Π΅ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ эффСктивный Ρ„ΠΎΡ€ΠΌΠ°Ρ‚.
  • Π Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Ρ‹ ΠΏΠΎ странам. Из-Π·Π° ΠΌΠ½ΠΎΠ³ΠΈΡ… Π·Π°ΠΊΠΎΠ½ΠΎΠ² ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ, ΠΎΠ΄Π½Π°ΠΊΠΎ эта схСма Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ Π΄Π°Π΅Ρ‚ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡƒΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ автоматичСски

Π£Π΄ΠΎΠ±Π½Ρ‹Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ пСрСнСсти Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π² Π΄Ρ€ΡƒΠ³ΠΎΠ΅, Ρ‚ΠΎ здСсь ΡƒΠΆΠ΅ стандартными срСдствами Π½Π΅ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ. К соТалСнию, Π² Ρ‚Π°ΠΊΠΎΠΌ случаС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΡŽ, Π° ΠΏΠΎΡ‚ΠΎΠΌ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Ρ‘. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС Β«Π½Π° Π»Π΅Ρ‚ΡƒΒ» Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ пСрСнСсти, ΠΎΠ΄Π½Π°ΠΊΠΎ, Ссли ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ событий хранится ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ, ΠΈ Ρƒ вас Π΅ΡΡ‚ΡŒ слСпки ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… состояний Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°, Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΏΡ€ΠΎΠΈΠ³Ρ€Π°Ρ‚ΡŒ события ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  • Π’ Event Source ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ событиС ΠΈΠΌΠ΅Π΅Ρ‚ свой ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ (Π² ΠΈΠ΄Π΅Π°Π»Π΅ β€” Π½Π΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°ΡŽΡ‰ΠΈΠΉΡΡ). А Π·Π½Π°Ρ‡ΠΈΡ‚ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π΅ β€” id послСднСго ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠ³ΠΎ элСмСнта.
  • Π”ΡƒΠ±Π»ΠΈΡ€ΡƒΠ΅ΠΌ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС события ΠΌΠΎΠ³Π»ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ для Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… нСзависимых Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰ (ΠΏΠ΅Ρ€Π²ΠΎΠ΅ β€” это Ρ‚ΠΎ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΡƒΠΆΠ΅ сСйчас хранятся Π΄Π°Π½Π½Ρ‹Π΅, Π° Π²Ρ‚ΠΎΡ€ΠΎΠ΅ β€” Π½ΠΎΠ²ΠΎΠ΅, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΠΎΠΊΠ° пустоС). Вторая ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, СстСствСнно, ΠΏΠΎΠΊΠ° Π½Π΅ обрабатываСтся.
  • ЗапускаСм Π²Ρ‚ΠΎΡ€ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΏΡ€ΠΎΠΈΠ³Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ событий).
  • Когда новая ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ пуста (Ρ‚.Π΅. срСдняя Ρ€Π°Π·Π½ΠΈΡ†Π° Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ элСмСнта ΠΈ Π΅Π³ΠΎ ΠΆΠ΅ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠ°), ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° Π½ΠΎΠ²ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅.

Как Π²ΠΈΠ΄Π½ΠΎ, Ρƒ нас Π² систСмС ΠΊΠ°ΠΊ Π½Π΅ Π±Ρ‹Π»ΠΎ, Ρ‚Π°ΠΊ ΠΈ Π½Π΅Ρ‚ строгой согласованности. Π•ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ eventual constistency, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ гарантия Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ события ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΌ порядкС (ΠΎΠ΄Π½Π°ΠΊΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, с Ρ€Π°Π·Π½ΠΎΠΉ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ). И, ΠΏΠΎΠ»ΡŒΠ·ΡƒΡΡΡŒ этим, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ пСрСнСсти Π΄Π°Π½Π½Ρ‹Π΅ Π±Π΅Π· остановки систСмы Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠ½Π΅Ρ† Π·Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡˆΠ°Ρ€Π°.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, продолТая наш ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎ ΠΎΠ½Π»Π°ΠΉΠ½ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ для Ρ„Π°ΠΉΠ»ΠΎΠ², подобная Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° ΡƒΠΆΠ΅ Π΄Π°Π΅Ρ‚ Π½Π°ΠΌ ряд бонусов:

  • ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π±Π»ΠΈΠΆΠ΅ ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ динамичСским ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Π’Π΅ΠΌ самым ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ качСство сСрвиса.
  • ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ. НапримСр, Enterprise ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΡ… Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΏΠΎΠ΄ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Ρ… Π΄Π°Ρ‚Π°Ρ†Π΅Π½Ρ‚Ρ€Π°Ρ… (Π²ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ Π΄Π°Π½Π½Ρ‹Ρ…). Π—Π° счСт sharding ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Π»Π΅Π³ΠΊΡƒΡŽ это ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ. И Π·Π°Π΄Π°Ρ‡Π° Π΅Ρ‰Π΅ упрощаСтся, Ссли Ρƒ Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠ° Π΅ΡΡ‚ΡŒ совмСстимоС ΠΎΠ±Π»Π°ΠΊΠΎ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Azure self hosted).
  • А самоС Π²Π°ΠΆΠ½ΠΎΠ΅ β€” ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ этого Π½Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ. Π’Π΅Π΄ΡŒ для Π½Π°Ρ‡Π°Π»Π° нас Π²ΠΏΠΎΠ»Π½Π΅ Π±Ρ‹ устроило ΠΎΠ΄Π½ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ для всСх Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ΠΎΠ² (Ρ‡Ρ‚ΠΎΠ±Ρ‹ побыстрСС Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ). И ΠΊΠ»ΡŽΡ‡Π΅Π²Π°Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ этой систСмы β€” Ρ…ΠΎΡ‚ΡŒ ΠΎΠ½Π° ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΠ°, Π½Π° Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌ этапС ΠΎΠ½Π° достаточно проста. ΠŸΡ€ΠΎΡΡ‚ΠΎ Π½Π΅ Π½Π°Π΄ΠΎ сразу ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ с ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠΌ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… нСзависимых ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ ΠΈ Ρ‚.Π΄. Если понадобится, Ρ‚ΠΎ это ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ.

Static Content Hosting

Π­Ρ‚ΠΎΡ‚ ΠΏΡƒΠ½ΠΊΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ совсСм ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ всС Ρ€Π°Π²Π½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ для Π±ΠΎΠ»Π΅Π΅-ΠΌΠ΅Π½Π΅Π΅ стандартного Π½Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ прилоТСния. Π•Π³ΠΎ ΡΡƒΡ‚ΡŒ проста: вСсь статичСский ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ раздаСтся Π½Π΅ с Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ сСрвСра, Π³Π΄Π΅ находится ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π° со ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ…, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠ΄ это Π΄Π΅Π»ΠΎ. Как слСдствиС, эти ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ быстрСС (условный nginx ΠΎΡ‚Π΄Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Π΅Π΅, ΠΈ ΠΌΠ΅Π½Π΅Π΅ Π·Π°Ρ‚Ρ€Π°Ρ‚Π½ΠΎ, Ρ‡Π΅ΠΌ Java-сСрвСр). Плюс Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° CDN (Content Delivery Network) позволяСт Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ наши Ρ„Π°ΠΉΠ»Ρ‹ Π±Π»ΠΈΠΆΠ΅ ΠΊ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сказываСтся Π½Π° удобствС Ρ€Π°Π±ΠΎΡ‚Ρ‹ с сСрвисом.

Π‘Π°ΠΌΡ‹ΠΉ простой ΠΈ стандартный ΠΏΡ€ΠΈΠΌΠ΅Ρ€ статичСского ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° β€” это Π½Π°Π±ΠΎΡ€ скриптов ΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ для сайта. Π‘ Π½ΠΈΠΌΠΈ всё просто β€” ΠΎΠ½ΠΈ извСстны Π·Π°Ρ€Π°Π½Π΅Π΅, Π΄Π°Π»Π΅Π΅ Π°Ρ€Ρ…ΠΈΠ² выгруТаСтся Π½Π° CDN сСрвСры, ΠΎΡ‚ΠΊΡƒΠ΄Π° Ρ€Π°Π·Π΄Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ.

Однако Π½Π° Π΄Π΅Π»Π΅ для статичСского ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Ρ‡Π΅ΠΌ-Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ Π½Π° лямбда Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ. ВСрнСмся ΠΊ нашСй Π·Π°Π΄Π°Ρ‡Π΅ (ΠΎΠ½Π»Π°ΠΉΠ½ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²), Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°Π·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ. Π‘Π°ΠΌΠΎΠ΅ простоС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π² Π»ΠΎΠ± β€” ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ сСрвис, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ запроса ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π΄Π΅Π»Π°Π΅Ρ‚ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ (авторизация ΠΈ Ρ‚Π΄), Π° ΠΏΠΎΡ‚ΠΎΠΌ скачиваСт Ρ„Π°ΠΉΠ» нСпосрСдствСнно с нашСго Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°. Π“Π»Π°Π²Π½Ρ‹ΠΉ минус Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° β€” статичСский ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ (Π° Ρ„Π°ΠΉΠ» с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Ρ€Π΅Π²ΠΈΠ·ΠΈΠ΅ΠΉ, ΠΏΠΎ сути, являСтся статичСским ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ΠΎΠΌ) раздаСтся Ρ‚Π΅ΠΌ ΠΆΠ΅ сСрвСром, Ρ‡Ρ‚ΠΎ ΠΈ содСрТит бизнСс-Π»ΠΎΠ³ΠΈΠΊΡƒ. ВмСсто этого, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ схСму:

  • Π‘Π΅Ρ€Π²Π΅Ρ€ Π²Ρ‹Π΄Π°Π΅Ρ‚ URL для скачивания. Он ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²ΠΈΠ΄Π° file_id + key, Π³Π΄Π΅ key β€” ΠΌΠΈΠ½ΠΈ-цифровая подпись, Π΄Π°ΡŽΡ‰Π°Ρ ΠΏΡ€Π°Π²ΠΎ Π½Π° доступ ΠΊ рСсурсу Π½Π° блиТайшиС сутки.
  • Π Π°Π·Π΄Π°Ρ‡Π΅ΠΉ Ρ„Π°ΠΉΠ»Π° занимаСтся простой nginx со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ опциями:
    • ΠšΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°. Π’Π°ΠΊ ΠΊΠ°ΠΊ этот сСрвис ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ сСрвСрС, ΠΌΡ‹ оставили сСбС Π·Π°Π΄Π΅Π» Π½Π° Π±ΡƒΠ΄ΡƒΡ‰Π΅Π΅ с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ всС послСдниС скачанныС Ρ„Π°ΠΉΠ»Ρ‹ Π½Π° дискС.
    • ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΊΠ»ΡŽΡ‡Π° Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ создания соСдинСния
  • ΠžΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ: потоковая ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°. НапримСр, Ссли ΠΌΡ‹ сТимаСм всС Ρ„Π°ΠΉΠ»Ρ‹ Π² сСрвисС, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ€Π°Π·Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ нСпосрСдствСнно Π² этом ΠΌΠΎΠ΄ΡƒΠ»Π΅. Как слСдствиС: IO ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ сдСланы Ρ‚Π°ΠΌ, Π³Π΄Π΅ ΠΈΠΌ самоС мСсто. Архиватор Π½Π° Java Π»Π΅Π³ΠΊΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ лишнСй памяти, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ сСрвис с бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ Π½Π° условныС Rust/C++ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠΆΠ΅ нСэффСктивным. Π’ нашСм ΠΆΠ΅ случаС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ€Π°Π·Π½Ρ‹Π΅ процСссы (ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ сСрвисы), Π° ΠΏΠΎΡ‚ΠΎΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ довольно эффСктивно Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ бизнСс Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΈ IO ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.

Π£Π΄ΠΎΠ±Π½Ρ‹Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹

Подобная схСма Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° Ρ€Π°Π·Π΄Π°Ρ‡Ρƒ статичСского ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° (Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ Π½Π΅ Π²Ρ‹Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ вСсь ΠΏΠ°ΠΊΠ΅Ρ‚ статики ΠΊΡƒΠ΄Π°-Ρ‚ΠΎ), ΠΎΠ΄Π½Π°ΠΊΠΎ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈ занимаСтся Ρ€Π°Π·Π΄Π°Ρ‡Π΅ΠΉ нСизмСняСмых Π΄Π°Π½Π½Ρ‹Ρ…. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, эту схСму ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠ±Ρ‰Π°Ρ‚ΡŒ ΠΈ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ случаи, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ Π½Π΅ просто статичСский, Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ прСдставлСн Π² Π²ΠΈΠ΄Π΅ Π½Π°Π±ΠΎΡ€Π° нСизмСняСмых ΠΈ нСудаляСмых Π±Π»ΠΎΠΊΠΎΠ² (хотя ΠΎΠ½ΠΈ ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒΡΡ).

Как Π΅Ρ‰Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ (для закрСплСния): Ссли Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ с Jenkins/TeamCity, Ρ‚ΠΎ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ написаны Π½Π° Java. Оба ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Java-процСсс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ занимаСтся ΠΊΠ°ΠΊ оркСстрациСй Π±ΠΈΠ»Π΄ΠΎΠ², Ρ‚Π°ΠΊ ΠΈ ΠΌΠ΅Π½Π΅Π΄ΠΆΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°. Π’ частности, Ρƒ Π½ΠΈΡ… ΠΎΠ±ΠΎΠΈΡ… Π΅ΡΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡ΠΈ Π²ΠΈΠ΄Π° "ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»/ΠΏΠ°ΠΏΠΊΡƒ с сСрвСра". Как ΠΏΡ€ΠΈΠΌΠ΅Ρ€: Π²Ρ‹Π΄Π°Ρ‡Π° Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΎΠ², ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° исходного ΠΊΠΎΠ΄Π° (ΠΊΠΎΠ³Π΄Π° Π°Π³Π΅Π½Ρ‚ Π½Π΅ скачиваСт ΠΊΠΎΠ΄ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΠ· рСпозитория, Π° Π·Π° Π½Π΅Π³ΠΎ это Π΄Π΅Π»Π°Π΅Ρ‚ сСрвСр), доступ ΠΊ Π»ΠΎΠ³Π°ΠΌ. ВсС эти Π·Π°Π΄Π°Ρ‡ΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ Π½Π° IO. Π’ΠΎ Π΅ΡΡ‚ΡŒ получаСтся, Ρ‡Ρ‚ΠΎ сСрвСр, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ бизнСс-Π»ΠΎΠ³ΠΈΠΊΡƒ, Π·Π°ΠΎΠ΄Π½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΌΠ΅Ρ‚ΡŒ эффСктивно ΠΏΡ€ΠΎΡ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· сСбя большиС ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. И Ρ‡Ρ‚ΠΎ самоС интСрСсноС, ΠΏΠΎΠ΄ΠΎΠ±Π½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ nginx’Ρƒ ΠΏΠΎ Ρ€ΠΎΠ²Π½ΠΎ Ρ‚ΠΎΠΉ ΠΆΠ΅ схСмС (Ρ€Π°Π·Π²Π΅ Ρ‡Ρ‚ΠΎ Π² запрос слСдуСт Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡ Π΄Π°Π½Π½Ρ‹Ρ…).

Однако Ссли Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ нашСй систСмС, Ρ‚ΠΎ получаСтся подобная схСма:

Π£Π΄ΠΎΠ±Π½Ρ‹Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹

Как Π²ΠΈΠ΄Π½ΠΎ, систСма Ρ€Π°Π΄ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ ΡƒΡΠ»ΠΎΠΆΠ½ΠΈΠ»Π°ΡΡŒ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ это Π½Π΅ просто ΠΌΠΈΠ½ΠΈ-процСсс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…Ρ€Π°Π½ΠΈΡ‚ Ρ„Π°ΠΉΠ»Ρ‹ локально. Π’Π΅ΠΏΠ΅Ρ€ΡŒ трСбуСтся ΡƒΠΆΠ΅ Π½Π΅ самая простая ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ°, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π·Π° вСрсиями API ΠΈ Ρ‚.Π΄. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ всС Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ нарисованы, Π»ΡƒΡ‡ΡˆΠ΅ всСго Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ, стоит Π»ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… Π·Π°Ρ‚Ρ€Π°Ρ‚. Однако Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ систСму (Π² Ρ‚ΠΎΠΌ числС ΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΅Ρ‰Π΅ большим числом ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ), Ρ‚ΠΎ придСтся ΠΏΠΎΠΉΡ‚ΠΈ Π½Π° ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. Π—Π°Ρ‚ΠΎ, ΠΊΠ°ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, систСма Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Π° Π³ΠΎΡ‚ΠΎΠ²Π° ΠΊ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΡŽ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ (практичСски ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ для Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ). БистСму ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ Π±Π΅Π· Π΅Ρ‘ остановки (просто-напросто Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ затормозятся).

Как я ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ» Π² самом Π½Π°Ρ‡Π°Π»Π΅, сСйчас ряд ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-сСрвисов стал ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π½ΡƒΡŽ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ. И Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ… просто стали ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. По сути систСмы ΠΎΡ‚ΠΊΠ°Π·Π°Π»ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° бизнСс ΠΊΠ°ΠΊ Ρ€Π°Π· Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄Π΅Π»Π°Ρ‚ΡŒ дСньги. Π’ΠΎ Π΅ΡΡ‚ΡŒ вмСсто ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ доставки, вмСсто прСдлоТСния ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ «распланируйтС поставку Π½Π° блиТайшиС мСсяцы», систСма просто сказала Β«ΠΈΠ΄ΠΈΡ‚Π΅ ΠΊ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π°ΠΌΒ». БобствСнно, это ΠΈ Π΅ΡΡ‚ΡŒ Ρ†Π΅Π½Π° Π½ΠΈΠ·ΠΊΠΎΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ: ΠΏΠΎΡ‚Π΅Ρ€ΠΈ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΠ±Ρ‹Π»ΡŒ Π±Ρ‹Π»Π° Π±Ρ‹ Π½Π°ΠΈΠ²Ρ‹ΡΡˆΠ΅ΠΉ.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ВсС эти ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ Π±Ρ‹Π»ΠΈ извСстны ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅. Π’ΠΎΡ‚ ΠΆΠ΅ VK Π΄Π°Π²Π½ΠΎ ΡƒΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ идСю Static Content Hosting для Π²Ρ‹Π΄Π°Ρ‡ΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ. ΠšΡƒΡ‡Π° ΠΎΠ½Π»Π°ΠΉΠ½-ΠΈΠ³Ρ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Sharding схСму для раздСлСния ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ² ΠΏΠΎ Ρ€Π΅Π³ΠΈΠΎΠ½Π°ΠΌ ΠΈΠ»ΠΈ ΠΆΠ΅ для раздСлСния ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Ρ… Π»ΠΎΠΊΠ°Ρ†ΠΈΠΉ (Ссли сам ΠΌΠΈΡ€ Π΅Π΄ΠΈΠ½Ρ‹ΠΉ). Event Sourcing ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² элСктронной ΠΏΠΎΡ‡Ρ‚Π΅. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ‚Ρ€Π΅ΠΉΠ΄Π΅Ρ€ΠΎΠ², Π³Π΄Π΅ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎ приходят Π΄Π°Π½Π½Ρ‹Π΅, Π½Π° самом Π΄Π΅Π»Π΅ построСны Π½Π° CQRS ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. Ну ΠΈ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ достаточно Π΄Π°Π²Π½ΠΎ примСняСтся Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… сСрвисах.

Однако, Ρ‡Ρ‚ΠΎ самоС Π²Π°ΠΆΠ½ΠΎΠ΅, всС эти ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ стало ΠΎΡ‡Π΅Π½ΡŒ Π»Π΅Π³ΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π² соврСмСнных прилоТСниях (Ссли ΠΎΠ½ΠΈ ΠΊ мСсту, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ). Облака ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ Sharding ΠΈ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сразу, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π»Π΅Π³Ρ‡Π΅, Ρ‡Π΅ΠΌ Π·Π°ΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ сСрвСры Π² Ρ€Π°Π·Π½Ρ‹Ρ… Π΄Π°Ρ‚Π°Ρ†Π΅Π½Ρ‚Ρ€Π°Ρ… ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ. CQRS стал Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π»Π΅Π³Ρ‡Π΅ хотя Π±Ρ‹ ΠΈΠ·-Π·Π° развития Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ RX. Π›Π΅Ρ‚ 10 Π½Π°Π·Π°Π΄ Ρ€Π΅Π΄ΠΊΠΈΠΉ web сайт смог Π±Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅. Event Sourcing настраиваСтся Ρ‚ΠΎΠΆΠ΅ нСвСроятно Π»Π΅Π³ΠΊΠΎ Π·Π° счСт ΡƒΠΆΠ΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² с Apache Kafka. Π›Π΅Ρ‚ 10 Π½Π°Π·Π°Π΄ это Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΈΠ½Π½ΠΎΠ²Π°Ρ†ΠΈΠ΅ΠΉ, сСйчас это ΠΎΠ±Ρ‹Π΄Π΅Π½Π½ΠΎΡΡ‚ΡŒ. Аналогично ΠΈ с Static Content Hosting: ΠΈΠ·-Π·Π° Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹Ρ… Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ (Π² Ρ‚ΠΎΠΌ числС ΠΈ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ подробная докумСнтация ΠΈ большая Π±Π°Π·Π° ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ²), ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ стал Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ простым.

Как ΠΈΡ‚ΠΎΠ³, рСализация ряда довольно слоТных Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Ρ… ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ² Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ стала Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅, Π° Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΊ Π½Π΅ΠΉ Π»ΡƒΡ‡ΡˆΠ΅ Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΏΡ€ΠΈΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒΡΡ. Если Π² дСсятилСтнСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΎΡ‚ΠΊΠ°Π·Π°Π»ΠΈΡΡŒ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ Π²Ρ‹ΡˆΠ΅ ΠΏΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ высокой Ρ†Π΅Π½Ρ‹ внСдрСния ΠΈ эксплуатации, Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ, Π² Π½ΠΎΠ²ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, ΠΈΠ»ΠΈ ΠΆΠ΅ послС Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π°, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ сСрвис, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½ΠΎ ΡƒΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠ°ΠΊ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΡ‹ΠΌ (с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ), Ρ‚Π°ΠΊ ΠΈ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΌ ΠΊ Π½ΠΎΠ²Ρ‹ΠΌ запросам ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…).

И самоС Π²Π°ΠΆΠ½ΠΎΠ΅: Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅, поТалуйста, эти ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹, Ссли Ρƒ вас простоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π”Π°, ΠΎΠ½ΠΈ красивыС ΠΈ интСрСсныС, ΠΎΠ΄Π½Π°ΠΊΠΎ для сайта с ΠΏΠΈΠΊΠΎΠ²Ρ‹ΠΌ посСщСниСм Π² 100 Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ классичСским ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚ΠΎΠΌ (ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ снаруТи, Π²Π½ΡƒΡ‚Ρ€ΠΈ всё ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈ Ρ‚.Π΄.).

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