ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, микросСрвисы ΠΈ сСрвис-мСши

Π’ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅ ΠΊΡƒΡ‡Π° статСй ΠΎ сСрвис-ΠΌΠ΅ΡˆΠ°Ρ… (service mesh), ΠΈ Π²ΠΎΡ‚ Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½Π°. Π£Ρ€Π°! Но Π·Π°Ρ‡Π΅ΠΌ? Π—Π°Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ я Ρ…ΠΎΡ‡Ρƒ ΠΈΠ·Π»ΠΎΠΆΠΈΡ‚ΡŒ своё ΠΌΠ½Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ Π±Ρ‹ сСрвис-мСши появились 10 Π»Π΅Ρ‚ Π½Π°Π·Π°Π΄, Π΄ΠΎ появлСния ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Docker ΠΈ Kubernetes. Π― Π½Π΅ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°ΡŽ, Ρ‡Ρ‚ΠΎ моя Ρ‚ΠΎΡ‡ΠΊΠ° зрСния Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΠ»ΠΈ Ρ…ΡƒΠΆΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΡ…, Π½ΠΎ ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ сСрвис-ΠΌΠ΅ΡˆΠΈΒ β€” довольно слоТныС ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Π΅, ΠΌΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΡ‡Π΅ΠΊ зрСния ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡ… ΠΏΠΎΠ½ΡΡ‚ΡŒ.

Π― расскаТу ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ dotCloud, которая Π±Ρ‹Π»Π° построСна Π½Π° Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ сотнС микросСрвисах ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π»Π° тысячи ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ…. Π― объясню ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΡ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ ΠΏΡ€ΠΈ Π΅Ρ‘ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΈ запускС, ΠΈ ΠΊΠ°ΠΊ сСрвис-мСши ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΏΠΎΠΌΠΎΡ‡ΡŒ (ΠΈΠ»ΠΈ Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ).

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ dotCloud

Π― ΡƒΠΆΠ΅ писал ΠΎΠ± истории dotCloud ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ для этой ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, Π½ΠΎ ΠΌΠ°Π»ΠΎ рассказывал ΠΎ сСтСвом ΡƒΡ€ΠΎΠ²Π½Π΅. Если Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ Π² Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΎ dotCloud, Ρ‚ΠΎ Π²ΠΊΡ€Π°Ρ‚Ρ†Π΅ Π²ΠΎΡ‚ ΡΡƒΡ‚ΡŒ: это ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°-ΠΊΠ°ΠΊ-сСрвис PaaS, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΡˆΠΈΡ€ΠΎΠΊΠΈΠΉ спСктр ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Java, PHP, Python…), c ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ ΡˆΠΈΡ€ΠΎΠΊΠΎΠ³ΠΎ спСктра слуТб Π΄Π°Π½Π½Ρ‹Ρ… (MongoDB, MySQL, Redis…) ΠΈ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌ процСссом ΠΊΠ°ΠΊ Ρƒ Heroku: Π²Ρ‹ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚Π΅ свой ΠΊΠΎΠ΄ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ, ΠΎΠ½Π° строит ΠΎΠ±Ρ€Π°Π·Ρ‹ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΈ Ρ€Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΈΡ….

Π― расскаТу, ΠΊΠ°ΠΊ направлялся Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ dotCloud. НС ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ это Π±Ρ‹Π»ΠΎ особСнно Π·Π΄ΠΎΡ€ΠΎΠ²ΠΎ (хотя для своСго Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ систСма Ρ€Π°Π±ΠΎΡ‚Π°Π»Π° Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ!), Π½ΠΎ ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ соврСмСнных инструмСнтов Ρ‚Π°ΠΊΠΎΠΉ Π΄ΠΈΠ·Π°ΠΉΠ½ Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π° ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ΅ врСмя скромная ΠΊΠΎΠΌΠ°Π½Π΄Π°, Ссли ΠΈΠΌ Π½ΡƒΠΆΠ΅Π½ способ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΡƒΡ‡Π΅ΠΉ микросСрвисов ΠΈΠ»ΠΈ ΠΊΡƒΡ‡Π΅ΠΉ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹: Ρ‡Ρ‚ΠΎ получаСтся, Ссли Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ всё самим ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ сСрвис-мСш. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π±ΠΎΡ€: ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ самим ΠΈΠ»ΠΈ ΠΊΡƒΠΏΠΈΡ‚ΡŒ.

ΠœΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° для hosted-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° dotCloud ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ HTTP ΠΈ TCP.

ΠšΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ HTTP динамичСски Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ кластСра балансировщиков Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Hipache. Π­Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ сСгодня Π΄Π΅Π»Π°ΡŽΡ‚ рСсурсы Ingress Π² Kubernetes ΠΈ балансировщик Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π²Ρ€ΠΎΠ΄Π΅ Traefik.

ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ ΠΊ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌ HTTP Ρ‡Π΅Ρ€Π΅Π· ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π΄ΠΎΠΌΠ΅Π½Ρ‹ ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠ΅ имя ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° балансировщики Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ dotCloud. НичСго особСнного.

ΠšΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ TCP связаны с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ ΠΏΠΎΡ€Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Ρ‚Π΅ΠΌ пСрСдаётся всСм ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌ этого стСка Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ срСды.

ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΊ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌ TCP, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ имя хоста (Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ gateway-X.dotcloud.com) ΠΈ Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΡ€Ρ‚Π°.

Π­Ρ‚ΠΎ имя хоста рСзолвится Π½Π° кластСр сСрвСров β€œnatsβ€œ (Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΊ NATS), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ входящиС TCP-соСдинСния Π² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ (ΠΈΠ»ΠΈ, Π² случаС слуТб с балансировкой Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, Π² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹).

Если Π²Ρ‹ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с Kubernetes, вСроятно, это Π½Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ Π²Π°ΠΌ слуТбы NodePort.

На ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ dotCloud Π½Π΅ Π±Ρ‹Π»ΠΎ эквивалСнта слуТб ClusterIP: для простоты доступ ΠΊ слуТбам происходил ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ ΠΊΠ°ΠΊ ΠΈΠ·Π½ΡƒΡ‚Ρ€ΠΈ, Ρ‚Π°ΠΊ ΠΈ снаруТи ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹.

Всё Π±Ρ‹Π»ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ достаточно просто: ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ сСтСй ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ HTTP ΠΈ TCP, вСроятно, всСго ΠΏΠΎ нСсколько сотСн строк Python. ΠŸΡ€ΠΎΡΡ‚Ρ‹Π΅ (я Π±Ρ‹ сказал, Π½Π°ΠΈΠ²Π½Ρ‹Π΅) Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΡ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»ΠΈΡΡŒ с ростом ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ появлСниСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ.

ΠžΠ±ΡˆΠΈΡ€Π½Ρ‹ΠΉ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π° Π½Π΅ трСбовался. Π’ частности, 12-Ρ„Π°ΠΊΡ‚ΠΎΡ€Π½Ρ‹Π΅ прилоТСния ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ адрСс, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния.

Π§Π΅ΠΌ это отличаСтся ΠΎΡ‚ соврСмСнного сСрвис-мСша?

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Π°Ρ ΠΎΠ±Π·ΠΎΡ€Π½ΠΎΡΡ‚ΡŒ. Π£ нас Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ Π±Ρ‹Π»ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ для сСтки ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ TCP. Π§Ρ‚ΠΎ касаСтся ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ HTTP, Ρ‚ΠΎ Π² Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΡ… вСрсиях появились ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ HTTP-ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ с ΠΊΠΎΠ΄Π°ΠΌΠΈ ошибок ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠ°, Π½ΠΎ соврСмСнныС сСрвис-мСши ΠΈΠ΄ΡƒΡ‚ Π΅Ρ‰Ρ‘ дальшС, обСспСчивая ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ с систСмами сбора ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ, ΠΊΠ°ΠΊ Prometheus, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

ΠžΠ±Π·ΠΎΡ€Π½ΠΎΡΡ‚ΡŒ Π²Π°ΠΆΠ½Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния (Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠΎΠ³Π°Ρ‚ΡŒ Π² устранСнии ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ), Π½ΠΎ ΠΈ ΠΏΡ€ΠΈ выпускС Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π Π΅Ρ‡ΡŒ ΠΎ бСзопасном синС-Π·Π΅Π»Ρ‘Π½ΠΎΠΌ Π΄Π΅ΠΏΠ»ΠΎΠ΅ ΠΈ Π΄Π΅ΠΏΠ»ΠΎΠ΅ ΠΊΠ°Π½Π°Ρ€Π΅Π΅ΠΊ.

Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚ΠΎΠΆΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π°. Π’ сСткС ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ dotCloud вСсь Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Π» ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· кластСр Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΡƒΠ·Π»ΠΎΠ² ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π»ΠΎ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ пСрСсСчСниС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π³Ρ€Π°Π½ΠΈΡ† AZ (Π·ΠΎΠ½Ρ‹ доступности) ΠΈ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ. Помню, ΠΊΠ°ΠΊ устранял ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΊΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π΅Π»Π°Π» Π±ΠΎΠ»Π΅Π΅ сотни SQL-запросов Π½Π° страницу ΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ запроса ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π» Π½ΠΎΠ²ΠΎΠ΅ соСдинСниС с SQL-сСрвСром. ΠŸΡ€ΠΈ локальном запускС страница загруТаСтся ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ, Π½ΠΎ Π² dotCloud Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ нСсколько сСкунд, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ TCP-соСдинСния (ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ SQL-запроса) трСбуСтся дСсятки миллисСкунд. Π’ этом ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ случаС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Ρ€Π΅ΡˆΠΈΠ»ΠΈ постоянныС соСдинСния.

Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ сСрвис-мСши Π»ΡƒΡ‡ΡˆΠ΅ ΡΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ с Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ. ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго, ΠΎΠ½ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚, Ρ‡Ρ‚ΠΎ соСдинСния ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² источникС. ЛогичСский ΠΏΠΎΡ‚ΠΎΠΊ Ρ‚ΠΎΡ‚ ΠΆΠ΅: ΠΊΠ»ΠΈΠ΅Π½Ρ‚ β†’ мСш β†’ сСрвис, Π½ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ мСш Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ локально, Π° Π½Π΅ Π½Π° ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹Ρ… ΡƒΠ·Π»Π°Ρ…, поэтому соСдинСниС ΠΊΠ»ΠΈΠ΅Π½Ρ‚ β†’ мСш являСтся Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ ΠΎΡ‡Π΅Π½ΡŒ быстрым (микросСкунды вмСсто миллисСкунд).

Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ сСрвис-мСши Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ Π±ΠΎΠ»Π΅Π΅ ΡƒΠΌΠ½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ балансировки Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ. ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΡ Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ бэкСндов, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ большС Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° Π½Π° Π±ΠΎΠ»Π΅Π΅ быстрыС бэкСнды, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡŽ ΠΎΠ±Ρ‰Π΅ΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠΆΠ΅ Π»ΡƒΡ‡ΡˆΠ΅. Π‘Π΅Ρ‚ΠΊΠ° ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ dotCloud Ρ€Π°Π±ΠΎΡ‚Π°Π»Π° ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π½Π° EC2 Classic ΠΈ Π½Π΅ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π»Π° Ρ‚Ρ€Π°Ρ„ΠΈΠΊ (исходя ΠΈΠ· прСдполоТСния, Ρ‡Ρ‚ΠΎ Ссли ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ сниффСр Π½Π° сСтСвой Ρ‚Ρ€Π°Ρ„ΠΈΠΊ EC2, Ρƒ вас ΡƒΠΆΠ΅ большиС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹). Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ сСрвис-мСши ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎ Π·Π°Ρ‰ΠΈΡ‰Π°ΡŽΡ‚ вСсь наш Ρ‚Ρ€Π°Ρ„ΠΈΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с Π²Π·Π°ΠΈΠΌΠ½ΠΎΠΉ TLS-Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ.

ΠœΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° для слуТб ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹

Π₯ΠΎΡ€ΠΎΡˆΠΎ, ΠΌΡ‹ обсудили Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΌΠ΅ΠΆΠ΄Ρƒ прилоТСниями, Π½ΠΎ ΠΊΠ°ΠΊ насчёт самой ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ dotCloud?

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

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

Π­Ρ‚ΠΈ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅, Π²Π°ΠΆΠ½Ρ‹Π΅ слуТбы Π±Ρ‹Π»ΠΈ Ρ€Π°Π·Π²Ρ‘Ρ€Π½ΡƒΡ‚Ρ‹ ΠΏΡƒΡ‚Ρ‘ΠΌ запуска ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² нСпосрСдствСнно Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… ΡƒΠ·Π»Π°Ρ…. ΠŸΡ€ΠΈ этом Π½Π΅ Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Π»ΠΈΡΡŒ стандартныС слуТбы ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹: ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ, ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ ΠΈ runner. Если Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ с соврСмСнными ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹ΠΌΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°ΠΌΠΈ, это ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° запуск плоскости управлСния с docker run нСпосрСдствСнно Π½Π° ΡƒΠ·Π»Π°Ρ…, вмСсто дСлСгирования Π·Π°Π΄Π°Ρ‡ΠΈ Kubernetes. Π­Ρ‚ΠΎ довольно ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ статичСских ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ (ΠΏΠΎΠ΄ΠΎΠ²), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ kubeadm ΠΈΠ»ΠΈ bootkube ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½ΠΎΠ³ΠΎ кластСра.

Π­Ρ‚ΠΈ слуТбы ΡΠΊΡΠΏΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ простым ΠΈ Π³Ρ€ΡƒΠ±Ρ‹ΠΌ способом: Π² Ρ„Π°ΠΉΠ»Π΅ YAML Π±Ρ‹Π»ΠΈ пСрСчислСны ΠΈΡ… ΠΈΠΌΠ΅Π½Π° ΠΈ адрСса; Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Π» для дСплоя Π²Π·ΡΡ‚ΡŒ копию этого YAML-Ρ„Π°ΠΉΠ»Π°.

Π‘ ΠΎΠ΄Π½ΠΎΠΉ стороны, это Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ внСшнСго Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° ΠΊΠ»ΡŽΡ‡Π΅ΠΉ/Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Zookeeper (Π½Π΅ Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅, Π² Ρ‚ΠΎ врСмя Π΅Ρ‰Ρ‘ Π½Π΅ сущСствовало etcd ΠΈΠ»ΠΈ Consul). Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, это затрудняло ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ слуТб. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ всС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΠ±Π½ΠΎΠ²Π»Ρ‘Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» YAML (ΠΈ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒΡΡ). НС ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ!

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

(Π’Π°ΠΊΠΆΠ΅ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π»ΠΎΡΡŒ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Π² TLS-соСдинСниях ΠΈ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ прокси-сСрвСр Π½Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π΅ΠΉ сторонС, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ сСртификаты TLS Π±Π΅Π· участия ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π΅ΠΉ слуТбы, которая настроСна Π½Π° ΠΏΡ€ΠΈΡ‘ΠΌ соСдинСний Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° localhost. Об этом ΠΏΠΎΠ·ΠΆΠ΅).

Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° SmartStack ΠΎΡ‚ Airbnb, Π½ΠΎ сущСствСнная Ρ€Π°Π·Π½ΠΈΡ†Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ SmartStack Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΈ Ρ€Π°Π·Π²Ρ‘Ρ€Π½ΡƒΡ‚ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ систСму ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ dotCloud ΡƒΠ±Ρ€Π°Π»ΠΈ Π² ящик, ΠΊΠΎΠ³Π΄Π° dotCloud прСвратился Π² Docker.

Π― Π»ΠΈΡ‡Π½ΠΎ ΡΡ‡ΠΈΡ‚Π°ΡŽ SmartStack ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΈΠΊΠΎΠ² Ρ‚Π°ΠΊΠΈΡ… систСм, ΠΊΠ°ΠΊ Istio, Linkerd ΠΈ Consul Connect, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ всС ΠΎΠ½ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ:

  • Запуск прокси Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡƒΠ·Π»Π΅.
  • ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ ΠΊ прокси.
  • ΠŸΠ»ΠΎΡΠΊΠΎΡΡ‚ΡŒ управлСния обновляСт ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ прокси-сСрвСра ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ бэкСндов.
  • … ΠŸΡ€ΠΎΡ„ΠΈΡ‚!

БоврСмСнная рСализация сСрвис-мСша

Если Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡƒΡŽ сСтку сСгодня, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹. НапримСр, Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ Π·ΠΎΠ½Ρƒ DNS, сопоставляя ΠΈΠΌΠ΅Π½Π° слуТб адрСсам Π² пространствС 127.0.0.0/8. Π—Π°Ρ‚Π΅ΠΌ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ HAProxy Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡƒΠ·Π»Π΅ кластСра, принимая соСдинСния ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ адрСсу слуТбы (Π² этой подсСти 127.0.0.0/8) ΠΈ пСрСнаправляя/балансируя Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ бэкСнды. ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ HAProxy ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ confd, позволяя Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ бэкСндС Π² etcd ΠΈΠ»ΠΈ Consul ΠΈ автоматичСски ΠΏΡƒΡˆΠΈΡ‚ΡŒ ΠΎΠ±Π½ΠΎΠ²Π»Ρ‘Π½Π½ΡƒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ Π½Π° HAProxy, ΠΊΠΎΠ³Π΄Π° это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Istio! Но с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ отличиями:

  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Envoy Proxy вмСсто HAProxy.
  • БохраняСт ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ бэкСнда Ρ‡Π΅Ρ€Π΅Π· Kubernetes API вмСсто etcd ΠΈΠ»ΠΈ Consul.
  • Π‘Π»ΡƒΠΆΠ±Π°ΠΌ Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ΡΡ адрСса Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ подсСти (адрСса Kubernetes ClusterIP) вмСсто 127.0.0.0/8.
  • Π˜ΠΌΠ΅Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ (Citadel) для добавлСния Π²Π·Π°ΠΈΠΌΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ подлинности TLS ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΈ сСрвСрами.
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Ρ€Π°Π·Ρ€Ρ‹Π² Ρ†Π΅ΠΏΠΈ (circuit breaking), распрСдСлённая трассировка, Π΄Π΅ΠΏΠ»ΠΎΠΉ ΠΊΠ°Π½Π°Ρ€Π΅Π΅ΠΊ ΠΈ Π΄Ρ€.

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π²ΠΊΡ€Π°Ρ‚Ρ†Π΅ рассмотрим Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ различия.

Envoy Proxy

Envoy Proxy написала компания Lyft [ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚ Uber Π½Π° Ρ€Ρ‹Π½ΠΊΠ΅ такси — ΠΏΡ€ΠΈΠΌ.Β ΠΏΠ΅Ρ€.]. Он Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ прокси (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, HAProxy, Nginx, Traefik…), Π½ΠΎ Lyft написала свой, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΈΠΌ Π±Ρ‹Π»ΠΈ Π½ΡƒΠΆΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… прокси, ΠΈ Ρ€Π°Π·ΡƒΠΌΠ½Π΅Π΅ показалось ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ, Ρ‡Π΅ΠΌ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ.

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

Но Envoy Ρ‚Π°ΠΊΠΆΠ΅ способСн Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… (data plane) для сСрвис-мСша. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ для Π΄Π°Π½Π½ΠΎΠ³ΠΎ сСрвис-мСша Envoy настраиваСтся ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΡŒΡŽ управлСния (control plane).

ΠŸΠ»ΠΎΡΠΊΠΎΡΡ‚ΡŒ управлСния

Π’ плоскости управлСния Istio полагаСтся Π½Π° Kubernetes API. Π­Ρ‚ΠΎ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ отличаСтся ΠΎΡ‚ использования confd, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ полагаСтся Π½Π° etcd ΠΈΠ»ΠΈ Consul для просмотра Π½Π°Π±ΠΎΡ€Π° ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Istio Ρ‡Π΅Ρ€Π΅Π· Kubernetes API просматриваСт Π½Π°Π±ΠΎΡ€ рСсурсов Kubernetes.

ΠœΠ΅ΠΆΠ΄Ρƒ Π΄Π΅Π»ΠΎΠΌ: Π»ΠΈΡ‡Π½ΠΎ ΠΌΠ½Π΅ показалось ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ это описаниС Kubernetes API, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ гласит:

Π‘Π΅Ρ€Π²Π΅Ρ€ Kubernetes API β€” это Β«Π³Π»ΡƒΠΏΡ‹ΠΉ сСрвСр», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅, ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ вСрсиями, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ сСмантику рСсурсов API.

Istio Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Kubernetes; ΠΈ Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ Kubernetes, Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ экзСмпляр сСрвСра Kubernetes API (ΠΈ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ слуТбы etcd).

АдрСса слуТб

Istio полагаСтся Π½Π° адрСса ClusterIP, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ выдСляСт Kubernetes, поэтому слуТбы Istio ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ адрСс (Π½Π΅ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ 127.0.0.0/8).

Π’Ρ€Π°Ρ„ΠΈΠΊ Π½Π° адрСс ClusterIP для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ слуТбы Π² кластСрС Kubernetes Π±Π΅Π· Istio пСрСхватываСтся kube-proxy ΠΈ отправляСтся Π½Π° ΡΠ΅Ρ€Π²Π΅Ρ€Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ этого прокси. Если вас ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‚ тСхничСскиС Π΄Π΅Ρ‚Π°Π»ΠΈ, Ρ‚ΠΎ kube-proxy устанавливаСт ΠΏΡ€Π°Π²ΠΈΠ»Π° iptables (ΠΈΠ»ΠΈ балансировщики Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ IPVS, Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ настроили), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ IP-адрСса назначСния соСдинСний, ΠΈΠ΄ΡƒΡ‰ΠΈΡ… ΠΏΠΎ адрСсу ClusterIP.

ПослС установки Istio Π² кластСрС Kubernetes Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ мСняСтся, ΠΏΠΎΠΊΠ° ΠΎΠ½ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ явно Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½ для Π΄Π°Π½Π½ΠΎΠ³ΠΎ потрСбитСля ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ всСго пространства ΠΈΠΌΡ‘Π½, ΠΏΡƒΡ‚Ρ‘ΠΌ ввСдСния ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° sidecar Π² кастомныС ΠΏΠΎΠ΄Ρ‹. Π­Ρ‚ΡŒΠΎΡ‚ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ запустит экзСмпляр Envoy ΠΈ установит ряд ΠΏΡ€Π°Π²ΠΈΠ» iptables для ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Π° Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°, ΠΈΠ΄ΡƒΡ‰Π΅Π³ΠΎ Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ слуТбы, ΠΈ пСрСнаправлСния этого Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° Π½Π° Envoy.

ΠŸΡ€ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с Kubernetes DNS это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ наш ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ слуТбы, ΠΈ всё «просто Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Β». Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, наш ΠΊΠΎΠ΄ Π²Ρ‹Π΄Π°Ρ‘Ρ‚ запросы Ρ‚ΠΈΠΏΠ° http://api/v1/users/4242, Ρ‚ΠΎΠ³Π΄Π° api Ρ€Π΅Π·ΠΎΠ»Π²ΠΈΡ‚ запрос Π½Π° 10.97.105.48, ΠΏΡ€Π°Π²ΠΈΠ»Π° iptables ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ соСдинСния с 10.97.105.48 ΠΈ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ ΠΈΡ… Π½Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ прокси Envoy, Π° этот Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ прокси Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚ запрос Π½Π° фактичСский бэкСнд API. Π€ΡƒΡ…!

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ€ΡŽΡˆΠ΅Ρ‡ΠΊΠΈ

Istio Ρ‚Π°ΠΊΠΆΠ΅ обСспСчиваСт сквозноС ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ Ρ‡Π΅Ρ€Π΅Π· mTLS (mutual TLS). Π—Π° это ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Citadel.

Π’Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Mixer, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Envoy ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ запроса, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎΠ± этом запросС Π² зависимости ΠΎΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° бэкСнда ΠΈ Ρ‚. д… (Π½Π΅ Π²ΠΎΠ»Π½ΡƒΠΉΡ‚Π΅ΡΡŒ: Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ срСдств ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ Mixer, ΠΈ Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ слСтит, Envoy ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ прокси).

И, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΡ‹ упомянули ΠΎΠ±Π·ΠΎΡ€Π½ΠΎΡΡ‚ΡŒ: Envoy собираСт ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ количСство ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ, обСспСчивая ΠΏΡ€ΠΈ этом Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΡƒΡŽ трассировку. Π’ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ микросСрвисов, Ссли ΠΎΠ΄ΠΈΠ½ запрос API Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ Ρ‡Π΅Ρ€Π΅Π· микросСрвисы A, B, C ΠΈ D, Ρ‚ΠΎ ΠΏΡ€ΠΈ Π²Ρ…ΠΎΠ΄Π΅ Π² систСму распрСдСлённая трассировка Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ ΠΊ запросу ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΈ сохранит Π΄Π°Π½Π½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‡Π΅Ρ€Π΅Π· подзапросы ΠΊΠΎ всСм этим микросСрвисам, позволяя Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС связанныС Π²Ρ‹Π·ΠΎΠ²Ρ‹, ΠΈΡ… Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΈ Ρ‚.Β Π΄.

Π Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΊΡƒΠΏΠΈΡ‚ΡŒ

Π£ Istio рСпутация слоТной систСмы. Напротив, построСниС сСтки ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ я описал Π² Π½Π°Ρ‡Π°Π»Π΅ этого поста, ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ просто с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… инструмСнтов. Π˜Ρ‚Π°ΠΊ, Π΅ΡΡ‚ΡŒ Π»ΠΈ смысл вмСсто этого ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ собствСнный сСрвис-мСш?

Если Ρƒ нас скромныС потрСбности (Π½Π΅ Π½ΡƒΠΆΠ½Π° ΠΎΠ±Π·ΠΎΡ€Π½ΠΎΡΡ‚ΡŒ, ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Ρ‚Π΅Π»ΡŒ Ρ†Π΅ΠΏΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ тонкости), Ρ‚ΠΎ приходят мысли ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ собствСнного инструмСнта. Но Ссли ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Kubernetes, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Kubernetes ΡƒΠΆΠ΅ прСдоставляСт Π±Π°Π·ΠΎΠ²Ρ‹Π΅ инструмСнты для обнаруТСния слуТб ΠΈ балансировки Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ.

Но Ссли Ρƒ нас ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ трСбования, Ρ‚ΠΎ Β«ΠΏΠΎΠΊΡƒΠΏΠΊΠ°Β» сСрвис-мСша прСдставляСтся Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π»ΡƒΡ‡ΡˆΠΈΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ. (Π­Ρ‚ΠΎ Π½Π΅ всСгда ΠΈΠΌΠ΅Π½Π½ΠΎ Β«ΠΏΠΎΠΊΡƒΠΏΠΊΠ°Β», ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Istio поставляСтся с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ, Π½ΠΎ Π½Π°ΠΌ всё Ρ€Π°Π²Π½ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ½Π²Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π½ΠΎΠ΅ врСмя, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅, Π·Π°Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒ ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠΌ).

Π§Ρ‚ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ: Istio, Linkerd ΠΈΠ»ΠΈ Consul Connect?

Пока ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ± Istio, Π½ΠΎ это Π½Π΅ СдинствСнный сСрвис-мСш. ΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½Π°Ρ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π°Β β€” Linkerd, Π° Π΅ΡΡ‚ΡŒ Π΅Ρ‰Ρ‘ Consul Connect.

Π§Ρ‚ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ?

ЧСстно говоря, Π½Π΅ знаю. Π’ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ я Π½Π΅ ΡΡ‡ΠΈΡ‚Π°ΡŽ сСбя достаточно ΠΊΠΎΠΌΠΏΠ΅Ρ‚Π΅Π½Ρ‚Π½Ρ‹ΠΌ для ΠΎΡ‚Π²Π΅Ρ‚Π° Π½Π° этот вопрос. Π•ΡΡ‚ΡŒ нСсколько интСрСсных статСй со сравнСниСм этих инструмСнтов ΠΈ Π΄Π°ΠΆΠ΅ Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈ.

Один ΠΈΠ· ΠΌΠ½ΠΎΠ³ΠΎΠΎΠ±Π΅Ρ‰Π°ΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ²Β β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ инструмСнт Π²Ρ€ΠΎΠ΄Π΅ SuperGloo. Он Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ слой абстракции для упрощСния ΠΈ ΡƒΠ½ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ API, прСдоставляСмых сСрвис-мСшами. ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ (ΠΈ, Π½Π° ΠΌΠΎΠΉ взгляд, ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ слоТныС) API Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… сСрвис-мСшСй, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ простыС конструкции SuperGlooΒ β€” ΠΈ Π»Π΅Π³ΠΊΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ с ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ, словно Ρƒ нас ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ HTTP-интСрфСйсы ΠΈ бэкСнды, способный Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ для Nginx, HAProxy, Traefik, Apache…

Π― Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ побаловался с Istio ΠΈ SuperGloo, Π° Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Ρ…ΠΎΡ‡Ρƒ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Istio ΠΈΠ»ΠΈ Linkerd Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ кластСр с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ SuperGloo, ΠΈ насколько послСдний справится со своСй Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ позволяСт ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ с ΠΎΠ΄Π½ΠΎΠ³ΠΎ сСрвис-мСша Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π±Π΅Π· пСрСзаписи ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ.

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