Наш ΠΎΠΏΡ‹Ρ‚ создания API Gateway

НСкоторыС ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, Π² Ρ‚ΠΎΠΌ числС наш Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊ, Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ°Ρ€Ρ‚Π½Π΅Ρ€ΡΠΊΡƒΡŽ ΡΠ΅Ρ‚ΡŒ. НапримСр, ΠΊΡ€ΡƒΠΏΠ½Ρ‹Π΅ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-ΠΌΠ°Π³Π°Π·ΠΈΠ½Ρ‹ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ со слуТбой доставки β€” Π²Ρ‹ Π·Π°ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ Ρ‚ΠΎΠ²Π°Ρ€ ΠΈ вскорС ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ Ρ‚Ρ€Π΅ΠΊΠΈΠ½Π³ΠΎΠ²Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€ посылки. Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€” вмСстС с Π°Π²ΠΈΠ°Π±ΠΈΠ»Π΅Ρ‚ΠΎΠΌ Π²Ρ‹ ΠΏΠΎΠΊΡƒΠΏΠ°Π΅Ρ‚Π΅ страховку ΠΈΠ»ΠΈ Π±ΠΈΠ»Π΅Ρ‚ Π½Π° аэроэкспрСсс.

Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠ΄ΠΈΠ½ API, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π΄Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Ρ‚Π½Π΅Ρ€Π°ΠΌ Ρ‡Π΅Ρ€Π΅Π· API Gateway. Π­Ρ‚Ρƒ Π·Π°Π΄Π°Ρ‡Ρƒ ΠΌΡ‹ ΠΈ Ρ€Π΅ΡˆΠΈΠ»ΠΈ. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ расскаТСм подробности.

Π”Π°Π½ΠΎ: экосистСма ΠΈ API-ΠΏΠΎΡ€Ρ‚Π°Π» с интСрфСйсом, Π³Π΄Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ зарСгистрированы, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈ Ρ‚.ΠΏ. Нам Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΈ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΉ API Gateway. Π’ процСссС Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ

  • Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ,
  • ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ API,
  • ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ систСму,
  • ΡƒΡ‡Ρ‘Ρ‚ бизнСс-ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ.

Наш ΠΎΠΏΡ‹Ρ‚ создания API Gateway

Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ расскаТСм ΠΎ нашСм ΠΎΠΏΡ‹Ρ‚Π΅ создания API Gateway, Π² Ρ…ΠΎΠ΄Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ Ρ€Π΅ΡˆΠ°Π»ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ:

  • аутСнтификация ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ,
  • авторизация ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ,
  • модификация исходного запроса,
  • проксированиС запроса,
  • постобработка ΠΎΡ‚Π²Π΅Ρ‚Π°.


Π•ΡΡ‚ΡŒ Π΄Π²Π° Π²ΠΈΠ΄Π° API-ΠΌΠ΅Π½Π΅Π΄ΠΆΠΌΠ΅Π½Ρ‚Π°:

1. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. ΠŸΠ΅Ρ€Π΅Π΄ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ тСстируСт возмоТности, Π·Π°Ρ‚Π΅ΠΌ ΠΎΠΏΠ»Π°Ρ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΈ встраиваСт Π½Π° свой сайт. Π§Π°Ρ‰Π΅ всСго ΠΈΠΌ ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² ΠΌΠ°Π»ΠΎΠΌ ΠΈ срСднСм бизнСсС.

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

Наш ΠΎΠΏΡ‹Ρ‚ создания API Gateway

НашС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

Π’ этой части расскаТСм ΠΎ создании API Gateway.

ΠšΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ создаваСмого шлюза ΠΊ API β€” ΠΏΠ°Ρ€Ρ‚Π½Ρ‘Ρ€Ρ‹ нашСго Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠ°. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ… Ρƒ нас ΡƒΠΆΠ΅ хранятся Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Ρ‹. Нам Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ лишь Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, отмСчая прСдоставлСнный доступ ΠΊ ΡˆΠ»ΡŽΠ·Ρƒ. БоотвСтствСнно, Π½ΡƒΠΆΠ΅Π½ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ процСсс ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈ управлСния.

БСзусловно, ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π²Π·ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠ΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ API Management ΠΈ создания API Gateway Π² частности. НапримСр, Ρ‚Π°ΠΊΠΈΠΌ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹Ρ‚ΡŒ Azure API Management. Нам ΠΎΠ½ΠΎ Π½Π΅ подошло, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π² нашСм случаС Ρƒ нас ΡƒΠΆΠ΅ Π±Ρ‹Π» API-ΠΏΠΎΡ€Ρ‚Π°Π» ΠΈ огромная экосистСма, построСнная Π²ΠΎΠΊΡ€ΡƒΠ³ Π½Π΅Π³ΠΎ. ВсС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΈ зарСгистрированы, ΠΎΠ½ΠΈ ΡƒΠΆΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π»ΠΈ, Π³Π΄Π΅ ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½ΡƒΠΆΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. Π’ API-ΠΏΠΎΡ€Ρ‚Π°Π»Π΅ ΡƒΠΆΠ΅ сущСствовали Π½ΡƒΠΆΠ½Ρ‹Π΅ интСрфСйсы, Π½Π°ΠΌ лишь Π±Ρ‹Π» Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ API Gateway. БобствСнно, Π΅Π³ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ ΠΌΡ‹ ΠΈ занялись.

Π’ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌ API Gateway β€” своСго Ρ€ΠΎΠ΄Π° прокси. Π’ΡƒΡ‚ Ρƒ нас ΠΎΠΏΡΡ‚ΡŒ Π±Ρ‹Π» Π²Ρ‹Π±ΠΎΡ€ β€” ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ свой прокси, Π° ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΡƒΠΆΠ΅ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ΅. Π’ этом случаС ΠΌΡ‹ пошли Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΡƒΡ‚Ρ‘ΠΌ ΠΈ Π²Ρ‹Π±Ρ€Π°Π»ΠΈ связку nginx+Lua. ΠŸΠΎΡ‡Π΅ΠΌΡƒ? Нам Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π±Ρ‹Π» Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΉ, протСстированный software, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. ΠœΡ‹ Π½Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΈ послС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΈ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ, ΠΈ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ прокси.

Π£ любого Π²Π΅Π±-сСрвСра Π΅ΡΡ‚ΡŒ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ запроса. Π’ случаС nginx ΠΎΠ½ выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Наш ΠΎΠΏΡ‹Ρ‚ создания API Gateway

(схСма ΠΈΠ· GitHub Lua Nginx)

НашСй Ρ†Π΅Π»ΡŒΡŽ Π±Ρ‹Π»ΠΎ Π²ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒΡΡ Π² этот ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ Π² Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚, Π³Π΄Π΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ исходный запрос.

ΠœΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ transparent proxy, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ запрос оставался Ρ‚Π°ΠΊΠΈΠΌ, ΠΊΠ°ΠΊΠΈΠΌ ΠΈ ΠΏΡ€ΠΈΡˆΡ‘Π». ΠœΡ‹ лишь ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌ доступ ΠΊ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌΡƒ API, ΠΏΠΎΠΌΠΎΠ³Π°Π΅ΠΌ запросу Π΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π΄ΠΎ Π½Π΅Π³ΠΎ. Π’ случаС, Ссли запрос Π±Ρ‹Π» Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ, ΠΎΡˆΠΈΠ±ΠΊΡƒ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ API, Π½ΠΎ Π½Π΅ ΠΌΡ‹. ЕдинствСнная ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡ‚ΠΊΠ»ΠΎΠ½ΠΈΡ‚ΡŒ запрос β€” ΠΈΠ·-Π·Π° отсутствия доступа Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.

Для nginx ΡƒΠΆΠ΅ сущСствуСт Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π½Π° Lua. Lua β€” скриптовый язык, ΠΎΠ½ ΠΎΡ‡Π΅Π½ΡŒ лСгковСсный ΠΈ Π»Ρ‘Π³ΠΊΠΈΠΉ Π² освоСнии. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΌΡ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Lua.

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ nginx’a (аналогия route прилоТСния), Π³Π΄Π΅ ΠΈ выполняСтся вся Ρ€Π°Π±ΠΎΡ‚Π°, Π²ΠΏΠΎΠ»Π½Π΅ понятная. ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Π° здСсь послСдняя Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° β€” post_action.

location /middleware {
      more_clear_input_headers Accept-Encoding;
      lua_need_request_body on;
      rewrite_by_lua_file 'middleware/rewrite.lua';
      access_by_lua_file 'middleware/access.lua';
      proxy_pass https://someurl.com;
      body_filter_by_lua_file 'middleware/body_filter.lua';
      post_action /process_session;
}

Рассмотрим, Ρ‡Ρ‚ΠΎ происходит Π² этой ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ:
more_clear_input_headers β€” ΠΎΡ‡ΠΈΡ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… послС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ хэдСров.
lua_need_request_body β€” Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΡƒΠ΅Ρ‚, слСдуСт Π»ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ исходноС Ρ‚Π΅Π»ΠΎ запроса ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ rewrite/access/access_by_lua ΠΈΠ»ΠΈ Π½Π΅Ρ‚. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ nginx Π½Π΅ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ Ρ‚Π΅Π»ΠΎ запроса ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, ΠΈ Ссли Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊ Π½Π΅ΠΌΡƒ доступ, Ρ‚ΠΎ данная Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ on.
rewrite_by_lua_file β€” ΠΏΡƒΡ‚ΡŒ Π΄ΠΎ скрипты, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ описана Π»ΠΎΠ³ΠΈΠΊΠ° для ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ запроса
access_by_lua_file β€” ΠΏΡƒΡ‚ΡŒ Π΄ΠΎ скрипта, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ описана Π»ΠΎΠ³ΠΈΠΊΠ°, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‰Π°Ρ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ доступа ΠΊ рСсурсу.
proxy_pass β€” url, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ запрос.
body_filter_by_lua_file β€” ΠΏΡƒΡ‚ΡŒ Π΄ΠΎ скрипта, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ описана Π»ΠΎΠ³ΠΈΠΊΠ° для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ запроса ΠΏΠ΅Ρ€Π΅Π΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ.
И, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, post_action β€” ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎ нСдокумСнтированная Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π΅Ρ‰Ρ‘ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ дСйствия послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΡ‚Π²Π΅Ρ‚ ΠΎΡ‚Π΄Π°Π½ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ.

Π”Π°Π»Π΅Π΅ расскаТСм ΠΏΠΎ порядку, ΠΊΠ°ΠΊ ΠΌΡ‹ Ρ€Π΅ΡˆΠ°Π»ΠΈ свои Π·Π°Π΄Π°Ρ‡ΠΈ.

Авторизация/аутСнтификация ΠΈ модификация запроса

Авторизация

ΠΠ²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΌΡ‹ построили с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ доступов ΠΏΠΎ сСртификату. Π•ΡΡ‚ΡŒ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ сСртификат. ΠšΠ°ΠΆΠ΄ΠΎΠΌΡƒ Π½ΠΎΠ²ΠΎΠΌΡƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠ° гСнСрируСтся Π΅Π³ΠΎ Π»ΠΈΡ‡Π½Ρ‹ΠΉ сСртификат, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ API. Π­Ρ‚ΠΎΡ‚ сСртификат настраиваСтся Π² сСкции server настроСк nginx.

ssl on;
ssl_certificate /usr/local/openresty/nginx/ssl/cert.pem;
ssl_certificate_key /usr/local/openresty/nginx/ssl/cert.pem;
ssl_client_certificate /usr/local/openresty/nginx/ssl/ca.crt;
ssl_verify_client on;

ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ

ΠœΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ справСдливый вопрос: Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ с сСртифицированным ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ, Ссли ΠΌΡ‹ Π²Π½Π΅Π·Π°ΠΏΠ½ΠΎ Π·Π°Ρ…ΠΎΡ‚Π΅Π»ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΎΡ‚ систСмы? НС ΠΏΠ΅Ρ€Π΅Π²Ρ‹ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΆΠ΅ сСртификаты для всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ².

Π’Π°ΠΊ ΠΌΡ‹ ΠΏΠ»Π°Π²Π½ΠΎ ΠΈ подошли ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π·Π°Π΄Π°Ρ‡Π΅ β€” модификация исходного запроса. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ запрос ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Π²ΠΎΠΎΠ±Ρ‰Π΅ говоря, Π½Π΅ являСтся Π²Π°Π»ΠΈΠ΄Π½Ρ‹ΠΌ для ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ систСмы. Одна ΠΈΠ· Π·Π°Π΄Π°Ρ‡ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π² запрос Π½Π΅Π΄ΠΎΡΡ‚Π°ΡŽΡ‰ΠΈΠ΅ части, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π²Π°Π»ΠΈΠ΄Π½Ρ‹ΠΌ. Боль Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅Π΄ΠΎΡΡ‚Π°ΡŽΡ‰ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ β€” Ρ€Π°Π·Π½Ρ‹Π΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. ΠœΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ ΠΊ Π½Π°ΠΌ с сСртификатом, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Π·ΡΡ‚ΡŒ ΠΎΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚ΠΎΠΊ ΠΈ Π²Ρ‹Ρ‚ΡΠ½ΡƒΡ‚ΡŒ ΠΈΠ· Π±Π°Π·Ρ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.

Если Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ потрСбуСтся ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΎΡ‚ нашСго сСрвиса, Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠΏΠ°Π΄ΡƒΡ‚ ΠΈΠ· Π±Π°Π·Ρ‹ ΠΈ ΠΎΠ½ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ смоТСт Π΄Π΅Π»Π°Ρ‚ΡŒ.

Π Π°Π±ΠΎΡ‚Π° с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

Нам Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, особСнно Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ пСрвоисточник этих Π΄Π°Π½Π½Ρ‹Ρ… β€” сторонний сСрвис, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π±Π΅ΡΠΏΠ΅Ρ€Π΅Π±ΠΎΠΉΠ½ΡƒΡŽ ΠΈ достаточно Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ². Π’ качСствС инструмСнта ΠΌΡ‹ Π²Ρ‹Π±Ρ€Π°Π»ΠΈ Hazelcast, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдоставляСт Π½Π°ΠΌ:

  • быстрый доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ,
  • Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ кластСр ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π½ΠΎΠ΄ с Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… Π½ΠΎΠ΄Π°Ρ… Π΄Π°Π½Π½Ρ‹ΠΌΠΈ.

ΠœΡ‹ пошли ΠΏΠΎ самой простой стратСгии доставки Π΄Π°Π½Π½Ρ‹Ρ… Π² кэш:

Наш ΠΎΠΏΡ‹Ρ‚ создания API Gateway

Π Π°Π±ΠΎΡ‚Π° с ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ систСмой происходит Π² Ρ€Π°ΠΌΠΊΠ°Ρ… сСссий ΠΈ Π΅ΡΡ‚ΡŒ Π»ΠΈΠΌΠΈΡ‚ Π½Π° максимальноС количСство. Если ΠΆΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π½Π΅ Π·Π°ΠΊΡ€Ρ‹Π» сСссию, это придётся Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π°ΠΌ.

Π”Π°Π½Π½Ρ‹Π΅ ΠΎΠ± ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ сСссии приходят ΠΎΡ‚ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ систСмы ΠΈ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π° сторонС Lua. ΠœΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Hazelcast для сохранСния этих Π΄Π°Π½Π½Ρ‹Ρ… Π΄ΠΆΠΎΠ±ΠΈΠΊΠΎΠΌ, написанным Π½Π° .NET. Π—Π°Ρ‚Π΅ΠΌ с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ ΠΌΡ‹ провСряСм ΠΏΡ€Π°Π²ΠΎ Π½Π° Тизнь ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… сСссий ΠΈ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ ΠΏΡ€ΠΎΡ‚ΡƒΡ…ΡˆΠΈΠ΅.

Доступ ΠΊ Hazelcast ΠΈ ΠΈΠ· Lua, ΠΈ ΠΈΠ· .NET

ΠšΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² Π½Π° Lua для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Hazelcast Π½Π΅Ρ‚, Π½ΠΎ Ρƒ Hazelcast Π΅ΡΡ‚ΡŒ REST API, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΡ‹ ΠΈ Ρ€Π΅ΡˆΠΈΠ»ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ. Для .NET ΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚, Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ Hazelcast Π½Π° сторонС .NET. Но Π½Π΅ Ρ‚ΡƒΡ‚-Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ.

Наш ΠΎΠΏΡ‹Ρ‚ создания API Gateway

ΠŸΡ€ΠΈ сохранСнии Π΄Π°Π½Π½Ρ‹Ρ… Ρ‡Π΅Ρ€Π΅Π· REST ΠΈ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠΈ Ρ‡Π΅Ρ€Π΅Π· .NET ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ€Π°Π·Π½Ρ‹Π΅ сСриализаторыдСсСриализаторы. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‡Π΅Ρ€Π΅Π· REST, Π° Π΄ΠΎΡΡ‚Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· .NET client ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚.

Если Π±ΡƒΠ΄ΡƒΡ‚ заинтСрСсованныС, Ρ‚ΠΎ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ расскаТСм ΠΎΠ± этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅. Π‘ΠΏΠΎΠΉΠ»Π΅Ρ€ β€” Π½Π° схСмкС.

Наш ΠΎΠΏΡ‹Ρ‚ создания API Gateway

Π›ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³

Наш ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ стандарт для логирования Ρ‡Π΅Ρ€Π΅Π· .NET β€” Serilog, всС Π»ΠΎΠ³ΠΈ Π² ΠΈΡ‚ΠΎΠ³Π΅ ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Π² Elasticsearch, ΠΈΡ… Π°Π½Π°Π»ΠΈΠ· Π²Π΅Π΄Ρ‘ΠΌ Ρ‡Π΅Ρ€Π΅Π· KibanΠ°. НСчто ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈ Π² этом случаС. ЕдинствСнный ΠΊΠ»ΠΈΠ΅Π½Ρ‚ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Elastic Π½Π° Lua, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» Π½Π°ΠΉΠ΄Π΅Π½, сломался Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΆΠ΅ require. И ΠΌΡ‹ использовали Fluentd.

Fluentd β€” open source Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для обСспСчСния Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ слоя логирования прилоТСния. ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈ с Ρ€Π°Π·Π½Ρ‹Ρ… слоёв прилоТСния, Π° ΠΏΠΎΡ‚ΠΎΠΌ Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² Π΅Π΄ΠΈΠ½Ρ‹ΠΉ источник.

API Gateway Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² K8S, поэтому ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с fluentd Π² Ρ‚Ρƒ ΠΆΠ΅ ΡΠ°ΠΌΡƒΡŽ ΠΏΠΎΠ΄y, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈ Π² ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉΡΡ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ tcp port fluentd.

ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ исслСдовали, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ вСсти сСбя fluentd, Ссли Ρƒ Π½Π΅Π³ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ связи с Elasticsearch. Π’ Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… суток Π² шлюз Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎ шли запросы, Π²ΠΎ fluentd ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΠ»ΠΈΡΡŒ Π»ΠΎΠ³ΠΈ, Π½ΠΎ Ρƒ fluentd Π±Ρ‹Π» Π·Π°Π±Π°Π½Π΅Π½ IP Elastic. ПослС восстановлСния связи fluentd ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π³Π½Π°Π» Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ всС Π»ΠΎΠ³ΠΈ Π² Elastic.

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

Π’Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ» Π½Π°ΠΌ Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ Π² Π±ΠΎΠ΅Π²ΡƒΡŽ срСду всСго Π·Π° 2.5 мСсяца.

Если ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π²Π°ΠΌ довСдётся Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ Π²Π΅Ρ‰Π°ΠΌΠΈ, совСтуСм Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ Π²Ρ‹ Ρ€Π΅ΡˆΠ°Π΅Ρ‚Π΅ ΠΈ Ρ‡Ρ‚ΠΎ ΠΈΠ· рСсурсов Ρƒ вас ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ. Π‘ΡƒΠ΄ΡŒΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ ΠΊ слоТностям ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ систСмами управлСния API.

ΠŸΠΎΠΉΠΌΠΈΡ‚Π΅ для сСбя, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ β€” Ρ‚ΠΎΠ»ΡŒΠΊΠΎ бизнСс-Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ запросов ΠΈΠ»ΠΈ, ΠΊΠ°ΠΊ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹Ρ‚ΡŒ Π² нашСм случаС, прокси Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ. НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ всё, Ρ‡Ρ‚ΠΎ Π²Ρ‹ сдСлаСтС сами, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ впослСдствии Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ протСстировано.

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