Π‘Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊ Π·Π° консумация Π½Π° процСсора Π·Π° Istio ΠΈ Linkerd

Π‘Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊ Π·Π° консумация Π½Π° процСсора Π·Π° Istio ΠΈ Linkerd

въвСдСниС

Π’ΡŠΡ‚Ρ€Π΅ смС Shopify Π·Π°ΠΏΠΎΡ‡Π½Π° Π΄Π° внСдрява Istio ΠΊΠ°Ρ‚ΠΎ сСрвизна ΠΌΡ€Π΅ΠΆΠ°. По ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ всичко Π΅ Π½Π°Ρ€Π΅Π΄, с ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° Π΅Π΄Π½ΠΎ Π½Π΅Ρ‰ΠΎ: скъпо Π΅.

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

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

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

Иван Π‘ΠΈΠΌ (Иван Π‘ΠΈΠΌ) Π²ΠΈΠ·ΡƒΠ°Π»Π½ΠΎ сравнСни service mesh Π·Π°Π±Π°Π²ΠΈ ΠΌΠΈΠ½Π°Π»Π°Ρ‚Π° Π³ΠΎΠ΄ΠΈΠ½Π° ΠΈ ΠΎΠ±Π΅Ρ‰Π° ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π·Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° ΠΈ процСсора, Π½ΠΎ Π½Π΅ сС ΠΏΠΎΠ»ΡƒΡ‡ΠΈ:

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

Π˜ΡΠΊΠ°Ρ… сам Π΄Π° видя ΠΊΠΎΠ»ΠΊΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π΅ прСдставянСто Π½Π° Istio Π½Π° Π΄Ρ€ΡƒΠ³Π° услуга с ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄: Linkerd.

Π‘Π΅Ρ€Π²ΠΈΠ·Π΅Π½ ΠΌΠΎΠ½Ρ‚Π°ΠΆ Π½Π° ΠΌΡ€Π΅ΠΆΠΈ

ΠŸΡŠΡ€Π²ΠΎ, инсталирах Π³ΠΎ Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ SuperGloo:

$ supergloo init
installing supergloo version 0.3.12
using chart uri https://storage.googleapis.com/supergloo-helm/charts/supergloo-0.3.12.tgz
configmap/sidecar-injection-resources created
serviceaccount/supergloo created
serviceaccount/discovery created
serviceaccount/mesh-discovery created
clusterrole.rbac.authorization.k8s.io/discovery created
clusterrole.rbac.authorization.k8s.io/mesh-discovery created
clusterrolebinding.rbac.authorization.k8s.io/supergloo-role-binding created
clusterrolebinding.rbac.authorization.k8s.io/discovery-role-binding created
clusterrolebinding.rbac.authorization.k8s.io/mesh-discovery-role-binding created
deployment.extensions/supergloo created
deployment.extensions/discovery created
deployment.extensions/mesh-discovery created
install successful!

Π˜Π·ΠΏΠΎΠ»Π·Π²Π°Ρ… SuperGloo, Π·Π°Ρ‰ΠΎΡ‚ΠΎ ΠΏΡ€Π°Π²ΠΈ Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° Π½Π° услугата ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-лСсно. НС Ρ‚Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π΄Π° правя ΠΌΠ½ΠΎΠ³ΠΎ. НиС Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ SuperGloo Π² производството, Π½ΠΎ Π΅ ΠΈΠ΄Π΅Π°Π»Π΅Π½ Π·Π° Ρ‚Π°ΠΊΠ°Π²Π° Π·Π°Π΄Π°Ρ‡Π°. Π’Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ Π±ΡƒΠΊΠ²Π°Π»Π½ΠΎ няколко ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π·Π° всяка сСрвизна ΠΌΡ€Π΅ΠΆΠ°. Π˜Π·ΠΏΠΎΠ»Π·Π²Π°Ρ… Π΄Π²Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Π·Π° изолация - ΠΏΠΎ Π΅Π΄ΠΈΠ½ Π·Π° Istio ΠΈ Linkerd.

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

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° инсталирах ΠΈ Π΄Π²Π΅Ρ‚Π΅ сСрвизни ΠΌΡ€Π΅ΠΆΠΈ ΠΎΡ‚ командния Ρ€Π΅Π΄.

ΠŸΡŠΡ€Π²ΠΈ 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      |
+---------+------------+---------+---------------------------+

Π‘Ρ€ΠΈΠ²ΡŠΡ‚ ΠΎΡ‚Π½Π΅ няколко ΠΌΠΈΠ½ΡƒΡ‚ΠΈ ΠΈ слСд Ρ‚ΠΎΠ²Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΏΠ°Π½Π΅Π»ΠΈ сС стабилизираха.

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

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

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

НиС ΠΎΡ‚ Shopify написахмС наш собствСн ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€ Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ, Π·Π° Π΄Π° Π²Π½Π΅Π΄Ρ€ΠΈΠΌ странични ΠΊΠΎΠ»ΠΈ, Π½ΠΎ Π·Π° Ρ‚ΠΎΠ·ΠΈ Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ… ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€Π°, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ΄Π²Π° с Istio. ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€ΡŠΡ‚ ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΈΡ€Π° странични ΠΊΠΎΠ»ΠΈ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠΌΠ° пряк ΠΏΡŠΡ‚ Π² пространството Π½Π° ΠΈΠΌΠ΅Π½Π°Ρ‚Π° 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

Π—Π° Π΄Π° настроим Π²Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° Linkerd sidecar, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π°Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ (Π΄ΠΎΠ±Π°Π²ΠΈΡ… Π³ΠΈ Ρ€ΡŠΡ‡Π½ΠΎ Ρ‡Ρ€Π΅Π· 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 Fault Tolerance Simulator

Π‘ΡŠΠ·Π΄Π°Π΄ΠΎΡ…ΠΌΠ΅ симулатор Π·Π° устойчивост Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ, Π½Π°Ρ€Π΅Ρ‡Π΅Π½ Istio, Π·Π° Π΄Π° СкспСримСнтирамС с ΡƒΠ½ΠΈΠΊΠ°Π»Π΅Π½ Π·Π° Shopify Ρ‚Ρ€Π°Ρ„ΠΈΠΊ. Π˜ΠΌΠ°Ρ…ΠΌΠ΅ Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ инструмСнт Π·Π° създаванС Π½Π° пСрсонализирана топология, която Π΄Π° прСдставлява ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Π° част ΠΎΡ‚ Π½Π°ΡˆΠ°Ρ‚Π° Π³Ρ€Π°Ρ„ΠΈΠΊΠ° Π½Π° услугата, Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π° Π΄Π° ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€Π° спСцифични Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ натоварвания.

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

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

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

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

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

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

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

Π‘ΠΈΠΌΡƒΠ»Π°Ρ‚ΠΎΡ€ Π½Π° толСрантност към Π³Ρ€Π΅ΡˆΠΊΠΈ Π½Π° Istio Π·Π° Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊ Π½Π° ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° Π½Π° услугата

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

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

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

ΠŸΡ€ΠΎΡΠ»Π΅Π΄ΡΠ²Π°ΠΌΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° рСсурси Ρ‡Ρ€Π΅Π· DataDogΠ·Π°Ρ‰ΠΎΡ‚ΠΎ нямамС ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ ΠŸΡ€ΠΎΠΌΠ΅Ρ‚Π΅ΠΉ.

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

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½ΠΈ ΠΏΠ°Π½Π΅Π»ΠΈ

ΠŸΡŠΡ€Π²ΠΎ, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ…ΠΌΠ΅ консумацията Π½Π° процСсора.

Π‘Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊ Π·Π° консумация Π½Π° процСсора Π·Π° Istio ΠΈ Linkerd
ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Π½ ΠΏΠ°Π½Π΅Π» Π½Π° Linkerd ~22 милиядра

Π‘Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊ Π·Π° консумация Π½Π° процСсора Π·Π° Istio ΠΈ Linkerd
Istio ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Π½ ΠΏΠ°Π½Π΅Π»: ~750 милиядра

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

Sidecar прокси

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

Π‘Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊ Π·Π° консумация Π½Π° процСсора Π·Π° Istio ΠΈ Linkerd
Linkerd: ~100 милиядрСни Π·Π° irs-ΠΊΠ»ΠΈΠ΅Π½Ρ‚, ~50 милиядрСни Π·Π° irs-client-loadgen

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

Π‘Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊ Π·Π° консумация Π½Π° процСсора Π·Π° Istio ΠΈ Linkerd
Istio/Envoy: ~155 милиядра Π·Π° irs-client, ~75 милиядра Π·Π° irs-client-loadgen

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

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

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

Π‘Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊ Π·Π° консумация Π½Π° процСсора Π·Π° Istio ΠΈ Linkerd
Linkerd: ~50 millicore Π·Π° irs-ΡΡŠΡ€Π²ΡŠΡ€

Π‘Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊ Π·Π° консумация Π½Π° процСсора Π·Π° Istio ΠΈ Linkerd
Istio/Envoy: ~80 millicore Π·Π° irs-ΡΡŠΡ€Π²ΡŠΡ€

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

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

ΠŸΡ€ΠΎΠΊΡΠΈΡ‚ΠΎ Istio Envoy консумира 50+% ΠΏΠΎΠ²Π΅Ρ‡Π΅ CPU ΠΎΡ‚ Linkerd ΠΏΡ€ΠΈ Π½Π°ΡˆΠ΅Ρ‚ΠΎ симулирано Ρ€Π°Π±ΠΎΡ‚Π½ΠΎ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅. ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½ΠΈΡΡ‚ ΠΏΠ°Π½Π΅Π» Π½Π° Linkerd консумира ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ рСсурси ΠΎΡ‚ Istio, особСно Π·Π° основнитС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ.

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

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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€