Π‘Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊ Π·Π° ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ Π½Π° ЦП Π·Π° Istio ΠΈ Linkerd

Π‘Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊ Π·Π° ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ Π½Π° ЦП Π·Π° Istio ΠΈ Linkerd

Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅

НиС Π² Shopify Π·Π°ΠΏΠΎΡ‡Π½Π°Ρ…ΠΌΠ΅ внСдряванСто Π½Π° Istio ΠΊΠ°Ρ‚ΠΎ service mesh. Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ всичко Π΅ Π½Π°Ρ€Π΅Π΄, освСн Π΅Π΄Π½Π° Π²Π΅Ρ‰: Ρ‚ΠΎΠ²Π° Π΅ скъпо.

Π’ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½ΠΈ Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΎΠ²Π΅ Π·Π° Istio сС ΠΊΠ°Π·Π²Π°:

Π‘ Istio 1.1 прокси консумира ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎ 0,6 vCPU (Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ ядра) Π½Π° 1000 заявки Π² сСкунда.

Π—Π° ΠΏΡŠΡ€Π²ΠΈΡ Ρ€Π΅Π³ΠΈΠΎΠ½ Π² service mesh (ΠΏΠΎ 2 прокси ΠΎΡ‚ всяка страна Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π°) Ρ‰Π΅ ΠΈΠΌΠ°ΠΌΠ΅ 1200 ядра само Π·Π° прокси, ΠΏΡ€ΠΈ изчислСниС ΠΎΡ‚ Π΅Π΄ΠΈΠ½ ΠΌΠΈΠ»ΠΈΠΎΠ½ заявки Π² сСкунда. Π‘ΠΏΠΎΡ€Π΅Π΄ цСновия ΠΊΠ°Π»ΠΊΡƒΠ»Π°Ρ‚ΠΎΡ€ Π½Π° Google ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎ 40 $/мСсСц/ядро Π·Π° конфигурацията n1-standard-64, тоСст само Ρ‚ΠΎΠ·ΠΈ Ρ€Π΅Π³ΠΈΠΎΠ½ Ρ‰Π΅ Π½ΠΈ струва Π½Π°Π΄ 50 хиляди Π΄ΠΎΠ»Π°Ρ€Π° Π½Π° мСсСц Π·Π° 1 ΠΌΠΈΠ»ΠΈΠΎΠ½ заявки Π² сСкунда.

АйвСн Π‘ΠΈΠΌ (Ivan Sim) Π½Π°Π³Π»Π΅Π΄Π½ΠΎ сравни Π·Π°ΠΊΡŠΡΠ½Π΅Π½ΠΈΡΡ‚Π° Π½Π° service mesh ΠΌΠΈΠ½Π°Π»Π°Ρ‚Π° Π³ΠΎΠ΄ΠΈΠ½Π° ΠΈ ΠΎΠ±Π΅Ρ‰Π° ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π·Π° ΠΏΠ°ΠΌΠ΅Ρ‚ ΠΈ процСсор, Π½ΠΎ Π½Π΅ успя:

Π―Π²Π½ΠΎ values-istio-test.yaml сСриозно Ρ‰Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈ заявкитС към процСсора. Ако съм Π½Π°ΠΏΡ€Π°Π²ΠΈΠ» ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ изчислСнията, Ρ‰Π΅ са Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ ΠΎΠΊΠΎΠ»ΠΎ 24 процСсорни ядра Π·Π° контролния ΠΏΠ°Π½Π΅Π» ΠΈ 0,5 ЦП Π·Π° всяко прокси. Нямам Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π°. Π©Π΅ повторя тСстовСтС, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΌΠΈ изчСрпят ΠΏΠΎΠ²Π΅Ρ‡Π΅ рСсурси.

Π˜ΡΠΊΠ°Ρ… сам Π΄Π° сС увСря ΠΊΠΎΠ»ΠΊΠΎ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° Istio са сходни с Π΄Ρ€ΡƒΠ³Π° service mesh с ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄: Linkerd.

Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Π½Π΅ Π½Π° service mesh

ΠŸΡŠΡ€Π²ΠΎΡ‚ΠΎ Π½Π΅Ρ‰ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ…, бСшС Π΄Π° инсталирам Π² кластСра SuperGloo:

$ supergloo init
инсталиранС Π½Π° supergloo вСрсия 0.3.12
ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ chart uri https://storage.googleapis.com/supergloo-helm/charts/supergloo-0.3.12.tgz
configmap/sidecar-injection-resources създадСн
serviceaccount/supergloo създадСн
serviceaccount/discovery създадСн
serviceaccount/mesh-discovery създадСн
clusterrole.rbac.authorization.k8s.io/discovery създадСн
clusterrole.rbac.authorization.k8s.io/mesh-discovery създадСн
clusterrolebinding.rbac.authorization.k8s.io/supergloo-role-binding създадСн
clusterrolebinding.rbac.authorization.k8s.io/discovery-role-binding създадСн
clusterrolebinding.rbac.authorization.k8s.io/mesh-discovery-role-binding създадСн
deployment.extensions/supergloo създадСн
deployment.extensions/discovery създадСн
deployment.extensions/mesh-discovery създадСн
инсталацията Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½Π°!

Π˜Π·ΠΏΠΎΠ»Π·Π²Π°Ρ… SuperGloo, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ улСснява Π½Π°Ρ‡Π°Π»Π½ΠΎΡ‚ΠΎ Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° service mesh. ΠŸΠΎΡ‡Ρ‚ΠΈ Π½Π΅ ΠΌΠΈ сС Π½Π°Π»ΠΎΠΆΠΈ Π΄Π° правя Π½ΠΈΡ‰ΠΎ. Π’ продукция Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ SuperGloo, Π½ΠΎ Π·Π° ΠΏΠΎΠ΄ΠΎΠ±Π½Π° Π·Π°Π΄Π°Ρ‡Π° Ρ‚ΠΎΠΉ Π΅ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ подходящ. НалоТи сС Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ° Π±ΡƒΠΊΠ²Π°Π»Π½ΠΎ няколко ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π·Π° всяка service mesh. Π˜Π·ΠΏΠΎΠ»Π·Π²Π°Ρ… Π΄Π²Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Π·Π° изолация - ΠΏΠΎ Π΅Π΄ΠΈΠ½ Π·Π° Istio ΠΈ Linkerd.

Π•ΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ΡŠΡ‚ бСшС ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ Π½Π° Google Kubernetes Engine. Π˜Π·ΠΏΠΎΠ»Π·Π²Π°Ρ… Kubernetes 1.12.7-gke.7 ΠΈ ΠΏΡƒΠ» ΠΎΡ‚ Π½ΠΎΠ΄ΠΎΠ²Π΅ n1-standard-4 с Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°Π½Π΅ Π½Π° Π½ΠΎΠ΄ΠΎΠ²Π΅Ρ‚Π΅ (ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ 4, максимум 16).

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° инсталирах ΠΈ Π΄Π²Π΅Ρ‚Π΅ service mesh ΠΎΡ‚ командния Ρ€Π΅Π΄.

ΠŸΡŠΡ€Π²ΠΎ Linkerd:

$ supergloo install linkerd --name linkerd
+---------+--------------+---------+---------------------------+
| INSTALL |     TYPE     | STATUS  |          DETAILS          |
+---------+--------------+---------+---------------------------+
| linkerd | Linkerd Mesh | Pending | enabled: true             |
|         |              |         | version: stable-2.3.0     |
|         |              |         | namespace: linkerd        |
|         |              |         | mtls enabled: true        |
|         |              |         | auto inject enabled: true |
+---------+--------------+---------+---------------------------+

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Istio:

$ supergloo install istio --name istio --installation-namespace istio-system --mtls=true --auto-inject=true
+---------+------------+---------+---------------------------+
| INSTALL |    TYPE    | STATUS  |          DETAILS          |
+---------+------------+---------+---------------------------+
| istio   | Istio Mesh | Pending | enabled: true             |
|         |            |         | version: 1.0.6            |
|         |            |         | namespace: istio-system   |
|         |            |         | mtls enabled: true        |
|         |            |         | auto inject enabled: true |
|         |            |         | grafana enabled: true     |
|         |            |         | prometheus enabled: true  |
|         |            |         | jaeger enabled: true      |
+---------+------------+---------+---------------------------+

Crash-loop ΠΎΡ‚Π½Π΅ няколко ΠΌΠΈΠ½ΡƒΡ‚ΠΈ, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ контролният ΠΏΠ°Π½Π΅Π» сС стабилизира.

(Π‘Π΅Π»Π΅ΠΆΠΊΠ°. SuperGloo Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° само Istio 1.0.x. ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ… СкспСримСнта с Istio 1.1.3, Π½ΠΎ Π½Π΅ забСлязах Π½ΠΈΠΊΠ°ΠΊΠ²Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²Π΅Π½Π° Ρ€Π°Π·Π»ΠΈΠΊΠ°.)

Настройка Π½Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ внСдряванС Π½Π° Istio

Π—Π° Π΄Π° инсталира Istio sidecar Envoy, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ sidecar-ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΎΡ€ β€” MutatingAdmissionWebhook. Няма Π΄Π° Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° Π½Π΅Π³ΠΎ Π² Ρ‚Π°Π·ΠΈ статия. Π©Π΅ ΠΊΠ°ΠΆΠ° само, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Π΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€, ΠΊΠΎΠΉΡ‚ΠΎ слСди Π΄ΠΎΡΡ‚ΡŠΠΏΠ° Π½Π° всички Π½ΠΎΠ²ΠΈ ΠΏΠΎΠ΄ΠΎΠ²Π΅ ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ добавя sidecar ΠΈ initContainer, отговарящ Π·Π° Π·Π°Π΄Π°Ρ‡ΠΈΡ‚Π΅ iptables.

НиС Π² Shopify написахмС свой ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€ Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π·Π° внСдряванС Π½Π° sidecar, Π½ΠΎ Π·Π° Ρ‚ΠΎΠ·ΠΈ Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ… ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€Π°, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ΄Π²Π° с Istio. ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€ΡŠΡ‚ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ внСдрява sidecar, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π² пространството Π½Π° ΠΈΠΌΠ΅Π½Π°Ρ‚Π° ΠΈΠΌΠ° Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ istio-injection: enabled:

$ kubectl label namespace irs-client-dev istio-injection=enabled
namespace/irs-client-dev labeled

$ kubectl label namespace irs-server-dev istio-injection=enabled
namespace/irs-server-dev labeled

Настройка Π½Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ внСдряванС Π½Π° Linkerd

Π—Π° Π΄Π° настроим внСдряванСто Π½Π° sidecar Π½Π° Linkerd, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π°Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ (Π΄ΠΎΠ±Π°Π²ΠΈΡ… Π³ΠΈ Ρ€ΡŠΡ‡Π½ΠΎ Ρ‡Ρ€Π΅Π· kubectl edit):

metadata:
  annotations:
    linkerd.io/inject: enabled

$ k edit ns irs-server-dev 
namespace/irs-server-dev edited

$ k get ns irs-server-dev -o yaml
apiVersion: v1
kind: Namespace
metadata:
  annotations:
    linkerd.io/inject: enabled
  name: irs-server-dev
spec:
  finalizers:
  - kubernetes
status:
  phase: Active

Π‘ΠΈΠΌΡƒΠ»Π°Ρ‚ΠΎΡ€ Π½Π° отказоустойчивост Istio

Π‘ΡŠΠ·Π΄Π°Π΄ΠΎΡ…ΠΌΠ΅ симулатор Π·Π° устойчивост Π½Π° Istio, Π·Π° Π΄Π° СкспСримСнтирамС с Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°, ΡƒΠ½ΠΈΠΊΠ°Π»Π΅Π½ Π·Π° Shopify. НуТдаСхмС сС ΠΎΡ‚ инструмСнт, Π·Π° Π΄Π° ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½Π° топология, която Π΄Π° прСдставя ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° част ΠΎΡ‚ Π³Ρ€Π°Ρ„Π° Π½Π° нашия сСрвис с Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ настройванС Π·Π° ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ натоварвания.

Π˜Π½Ρ„Ρ€Π°ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° Π½Π° Shopify ΠΈΠ·ΠΏΠΈΡ‚Π²Π° голямо Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ„Π»Π°Ρˆ-ΠΏΡ€ΠΎΠ΄Π°ΠΆΠ±ΠΈ. Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Shopify ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π° Π½Π° ΠΏΡ€ΠΎΠ΄Π°Π²Π°Ρ‡ΠΈΡ‚Π΅ ΠΏΠΎ-чСсто Π΄Π° ΠΏΡ€ΠΎΠ²Π΅ΠΆΠ΄Π°Ρ‚ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Ρ€Π°Π·ΠΏΡ€ΠΎΠ΄Π°ΠΆΠ±ΠΈ. Π“ΠΎΠ»Π΅ΠΌΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ понякога Π½ΠΈ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°Π²Π°Ρ‚ Π·Π° ΠΏΠ»Π°Π½ΠΈΡ€Π°Π½Π° Ρ„Π»Π°Ρˆ-ΠΏΡ€ΠΎΠ΄Π°ΠΆΠ±Π°. Π”Ρ€ΡƒΠ³ΠΈ ΠΏΡ€ΠΎΠ²Π΅ΠΆΠ΄Π°Ρ‚ Ρ‚Π°ΠΊΠΈΠ²Π° ΠΈΠ·Π½Π΅Π½Π°Π΄Π²Π°Ρ‰ΠΎ Π·Π° нас ΠΏΠΎ всяко Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Π΄Π΅Π½ΠΎΠ½ΠΎΡ‰ΠΈΠ΅Ρ‚ΠΎ.

Π˜ΡΠΊΠ°Ρ…ΠΌΠ΅ Π½Π°ΡˆΠΈΡΡ‚ симулатор Π½Π° устойчивост Π΄Π° ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€Π° Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ процСси, ΠΊΠΎΠΈΡ‚ΠΎ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π°Ρ‚ Π½Π° Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ натоварвания, Π²ΠΎΠ΄Π΅Ρ‰ΠΈ Π΄ΠΎ ΠΏΡ€Π΅Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅ Π½Π° инфраструктурата Π½Π° Shopify Π² ΠΌΠΈΠ½Π°Π»ΠΎΡ‚ΠΎ. ΠžΡΠ½ΠΎΠ²Π½Π°Ρ‚Π° Ρ†Π΅Π» Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° service mesh β€” Π½ΠΈ Π΅ Π½ΡƒΠΆΠ½Π° надСТдност ΠΈ устойчивост Π½Π° Π½ΠΈΠ²ΠΎΡ‚ΠΎ Π½Π° ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π°, ΠΈ Π½ΠΈ Π΅ Π²Π°ΠΆΠ½ΠΎ service mesh Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ Π΄Π° сС справя с натоварванията, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΈ са Π½Π°Ρ€ΡƒΡˆΠ°Π²Π°Π»ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° сСрвиситС.

Π’ основата Π½Π° симулатора Π·Π° устойчивост Π»Π΅ΠΆΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅Π½ възСл, ΠΊΠΎΠΉΡ‚ΠΎ дСйства ΠΊΠ°Ρ‚ΠΎ възСл Π½Π° service mesh. Работният възСл ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½ статично ΠΏΡ€ΠΈ стартиранС ΠΈΠ»ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ Ρ‡Ρ€Π΅Π· REST API. ИзползвамС Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ настройванС Π½Π° Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ възли, Π·Π° Π΄Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°ΠΌΠ΅ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ процСси ΠΏΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° рСгрСсивни тСстовС.

Π•Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° Ρ‚Π°ΠΊΡŠΠ² процСс:

  • Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΌΠ΅ 10 ΡΡŠΡ€Π²ΡŠΡ€Π° ΠΊΠ°Ρ‚ΠΎ bar услуга, която Π²Ρ€ΡŠΡ‰Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ 200/OK Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° 100 мс.
  • Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΌΠ΅ 10 ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° β€” всСки ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° 100 заявки Π² сСкунда към bar.
  • На всСки 10 сСкунди ΠΏΡ€Π΅ΠΌΠ°Ρ…Π²Π°ΠΌΠ΅ 1 ΡΡŠΡ€Π²ΡŠΡ€, наблюдавамС Π³Ρ€Π΅ΡˆΠΊΠΈΡ‚Π΅ 5xx Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.

Π’ края Π½Π° работния процСс ΠΈΠ·ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅ ΠΈ ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅ ΠΈ провСрявамС Π΄Π°Π»ΠΈ Ρ‚Π΅ΡΡ‚ΡŠΡ‚ Π΅ ΡƒΡΠΏΠ΅ΡˆΠ΅Π½. Π’Π°ΠΊΠ° Ρ€Π°Π·Π±Ρ€Π°Ρ…ΠΌΠ΅ Π·Π° производитСлността Π½Π° Π½Π°ΡˆΠ°Ρ‚Π° service mesh ΠΈ ΠΏΡ€ΠΎΠ²Π΅ΠΆΠ΄Π°ΠΌΠ΅ рСгрСсивСн тСст, Π·Π° Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ прСдполоТСнията си относно устойчивостта.

(Π‘Π΅Π»Π΅ΠΆΠΊΠ°. ОбмислямС Π΄Π° ΠΎΡ‚Π²ΠΎΡ€ΠΈΠΌ ΠΊΠΎΠ΄Π° Π½Π° симулатора Π·Π° устойчивост Π½Π° Istio, Π½ΠΎ всС ΠΎΡ‰Π΅ Π½Π΅ смС Π³ΠΎΡ‚ΠΎΠ²ΠΈ Π·Π° Ρ‚ΠΎΠ²Π°.)

Π‘ΠΈΠΌΡƒΠ»Π°Ρ‚ΠΎΡ€ Π½Π° устойчивост Π½Π° Istio Π·Π° Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊ Π½Π° service mesh

НастройвамС няколко Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ възли Π½Π° симулатора:

  • irs-client-loadgen: 3 Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Ρ‚ ΠΏΠΎ 100 заявки Π² сСкунда към irs-client.
  • irs-client: 3 Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‚ заявка, Ρ‡Π°ΠΊΠ°Ρ‚ 100 мс ΠΈ прСнасочват заявката към irs-server.
  • irs-server: 3 Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π²Ρ€ΡŠΡ‰Π°Ρ‚ 200/OK Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° 100 мс.

Π‘ Ρ‚Π°ΠΊΠ°Π²Π° конфигурация ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΠΌ стабилСн ΠΏΠΎΡ‚ΠΎΠΊ Π½Π° Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΌΠ΅ΠΆΠ΄Ρƒ 9 ΠΊΡ€Π°ΠΉΠ½ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ. Sidecar-ΠΈΡ‚Π΅ Π² irs-client-loadgen ΠΈ irs-server ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‚ ΠΏΠΎ 100 заявки Π² сСкунда, Π° irs-client β€” 200 (входящи ΠΈ изходящи).

Π‘Π»Π΅Π΄ΠΈΠΌ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° рСсурситС Ρ‡Ρ€Π΅Π· DataDog, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ нямамС кластСр Π½Π° Prometheus.

Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ

ПанСли Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅

ΠŸΡŠΡ€Π²ΠΎ ΠΏΡ€ΠΎΡƒΡ‡ΠΈΡ…ΠΌΠ΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ЦП.

Π‘Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊ Π·Π° ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ Π½Π° ЦП Π·Π° Istio ΠΈ Linkerd
ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½ΠΈΡΡ‚ ΠΏΠ°Π½Π΅Π» Π½Π° Linkerd ~22 ΠΌΠΈΠ»ΠΈΠ°Ρ€Π΄Π°

Π‘Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊ Π·Π° ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ Π½Π° ЦП Π·Π° Istio ΠΈ Linkerd
ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½ΠΈΡΡ‚ ΠΏΠ°Π½Π΅Π» Π½Π° Istio: ~750 ΠΌΠΈΠ»ΠΈΠ°Ρ€Π΄Π°

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½ΠΈΡΡ‚ ΠΏΠ°Π½Π΅Π» Π½Π° Istio ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎ с 35 ΠΏΡŠΡ‚ΠΈ ΠΏΠΎΠ²Π΅Ρ‡Π΅ процСсорни рСсурси, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Linkerd. Π Π°Π·Π±ΠΈΡ€Π° сС, всичко Π΅ настроСно ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ процСсорни рСсурси Ρ‚ΡƒΠΊ консумира istio-telemetry (ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½, ΠΎΡ‚ΠΊΠ°Π·Π²Π°ΠΉΠΊΠΈ сС ΠΎΡ‚ някои Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ). Π”ΠΎΡ€ΠΈ Π°ΠΊΠΎ ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π΅Ρ‚Π΅ Ρ‚ΠΎΠ·ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, всС ΠΏΠ°ΠΊ сС ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° Π½Π°Π΄ 100 ΠΌΠΈΠ»ΠΈΠ°Ρ€Π΄Π°, тоСст Π² 4 ΠΏΡŠΡ‚ΠΈ ΠΏΠΎΠ²Π΅Ρ‡Π΅, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΏΡ€ΠΈ Linkerd.

Proxy Π½Π° Sidecar

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ…ΠΌΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° проксито. Π’ΡƒΠΊ трябва Π΄Π° ΠΈΠΌΠ° Π»ΠΈΠ½Π΅ΠΉΠ½Π° зависимост ΠΎΡ‚ броя Π½Π° заявкитС, Π½ΠΎ Π·Π° всСки sidecar ΠΈΠΌΠ° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ Ρ€Π°Π·Ρ…ΠΎΠ΄ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ влияят Π½Π° ΠΊΡ€ΠΈΠ²Π°Ρ‚Π°.

Π‘Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊ Π·Π° ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ Π½Π° ЦП Π·Π° Istio ΠΈ Linkerd
Linkerd: ~100 ΠΌΠΈΠ»ΠΈΠ°Ρ€Π΄Π° Π·Π° irs-client, ~50 ΠΌΠΈΠ»ΠΈΠ°Ρ€Π΄Π° Π·Π° irs-client-loadgen

Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°Ρ‚ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ proxy ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° Π΄Π²Π° ΠΏΡŠΡ‚ΠΈ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ proxy loadgen: Π·Π° всяка изходяща заявка ΠΎΡ‚ loadgen Π½Π° client сС ΠΏΠ°Π΄Π° Π΅Π΄Π½Π° входяща ΠΈ Π΅Π΄Π½Π° изходяща.

Π‘Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊ Π·Π° ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ Π½Π° ЦП Π·Π° Istio ΠΈ Linkerd
Istio/Envoy: ~155 ΠΌΠΈΠ»ΠΈΠ°Ρ€Π΄Π° Π·Π° irs-client, ~75 ΠΌΠΈΠ»ΠΈΠ°Ρ€Π΄Π° Π·Π° irs-client-loadgen

Π’ΠΈΠΆΠ΄Π°ΠΌΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ Π·Π° sidecar-ΠΈΡ‚Π΅ Π½Π° Istio.

Но ΠΊΠ°Ρ‚ΠΎ цяло proxy-ΠΈΡ‚Π΅ Istio/Envoy консумират ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎ с 50% ΠΏΠΎΠ²Π΅Ρ‡Π΅ процСсорни рСсурси, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Linkerd.

Π‘ΡŠΡ‰Π°Ρ‚Π° схСма Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ ΠΈ Π½Π° страната Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π°:

Π‘Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊ Π·Π° ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ Π½Π° ЦП Π·Π° Istio ΠΈ Linkerd
Linkerd: ~50 ΠΌΠΈΠ»ΠΈΠ°Ρ€Π΄Π° Π·Π° irs-server

Π‘Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊ Π·Π° ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ Π½Π° ЦП Π·Π° Istio ΠΈ Linkerd
Istio/Envoy: ~80 ΠΌΠΈΠ»ΠΈΠ°Ρ€Π΄Π° Π·Π° irs-server

На страната Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° sidecar Istio/Envoy консумира ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎ с 60% ΠΏΠΎΠ²Π΅Ρ‡Π΅ процСсорни рСсурси, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Linkerd.

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

Proxy Π½Π° Istio Envoy консумира с 50+% ΠΏΠΎΠ²Π΅Ρ‡Π΅ ЦП, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Linkerd, ΠΏΡ€ΠΈ Π½Π°ΡˆΠ΅Ρ‚ΠΎ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€Π°Π½ΠΎ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅. ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½ΠΈΡΡ‚ ΠΏΠ°Π½Π΅Π» Π½Π° Linkerd консумира Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ рСсурси, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Istio, особСно Ρ‰ΠΎ сС отнася Π΄ΠΎ основнитС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ.

ВсС ΠΎΡ‰Π΅ обмислямС ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΠΌΠ°Π»ΠΈΠΌ Ρ‚Π΅Π·ΠΈ Ρ€Π°Π·Ρ…ΠΎΠ΄ΠΈ. Ако ΠΈΠΌΠ°Ρ‚Π΅ ΠΈΠ΄Π΅ΠΈ, сподСлСтС!

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

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster