Π Π΅ΠΏΠ΅Ρ€ Π·Π° ΠΏΠΎΡ‚Ρ€ΠΎΡˆΡƒΠ²Π°Ρ‡ΠΊΠ° Π½Π° процСсорот Π·Π° Istio ΠΈ Linkerd

Π Π΅ΠΏΠ΅Ρ€ Π·Π° ΠΏΠΎΡ‚Ρ€ΠΎΡˆΡƒΠ²Π°Ρ‡ΠΊΠ° Π½Π° процСсорот Π·Π° Istio ΠΈ Linkerd

Π’ΠΎΠ²Π΅Π΄

НиС смС Π²ΠΎ Shopify ΠΏΠΎΡ‡Π½Π° Π΄Π° Π³ΠΎ распорСдува Istio ΠΊΠ°ΠΊΠΎ сСрвисна ΠΌΡ€Π΅ΠΆΠ°. Π’ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, сè Π΅ Π²ΠΎ Ρ€Π΅Π΄, освСн Π΅Π΄Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°: скапо Π΅.

Π’ објавСни ΠΎΠ΄Ρ€Π΅Π΄Π½ΠΈΡ†ΠΈ Π·Π° Π˜ΡΡ‚ΠΈΠΎ Π²Π΅Π»ΠΈ:

Π‘ΠΎ Istio 1.1, проксито Ρ‚Ρ€ΠΎΡˆΠΈ ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ½ΠΎ 0,6 vCPU (Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½ΠΈ Ρ˜Π°Π΄Ρ€Π°) Π½Π° 1000 Π±Π°Ρ€Π°ΡšΠ° Π²ΠΎ сСкунда.

Π—Π° ΠΏΡ€Π²ΠΈΠΎΡ‚ Ρ€Π΅Π³ΠΈΠΎΠ½ Π²ΠΎ сСрвисната ΠΌΡ€Π΅ΠΆΠ° (2 прокси Π½Π° сСкоја страна ΠΎΠ΄ врската), ќС ΠΈΠΌΠ°ΠΌΠ΅ 1200 Ρ˜Π°Π΄Ρ€Π° само Π·Π° прокси, со Π±Ρ€Π·ΠΈΠ½Π° ΠΎΠ΄ Π΅Π΄Π΅Π½ ΠΌΠΈΠ»ΠΈΠΎΠ½ Π±Π°Ρ€Π°ΡšΠ° Π²ΠΎ сСкунда. Π‘ΠΏΠΎΡ€Π΅Π΄ ΠΊΠ°Π»ΠΊΡƒΠ»Π°Ρ‚ΠΎΡ€ΠΎΡ‚ Π·Π° Ρ‚Ρ€ΠΎΡˆΠΎΡ†ΠΈ Π½Π° Google, сС Ρ‡ΠΈΠ½ΠΈ Π΄Π΅ΠΊΠ° Π΅ ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ½ΠΎ 40 Π΄ΠΎΠ»Π°Ρ€ΠΈ/мСсСц/Ρ˜Π°Π΄Ρ€ΠΎ Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° n1-standard-64, односно само овој Ρ€Π΅Π³ΠΈΠΎΠ½ ќС Π½Π΅ Ρ‡ΠΈΠ½ΠΈ повСќС ΠΎΠ΄ 50 илјади Π΄ΠΎΠ»Π°Ρ€ΠΈ мСсСчно Π·Π° 1 ΠΌΠΈΠ»ΠΈΠΎΠ½ Π±Π°Ρ€Π°ΡšΠ° Π²ΠΎ сСкунда.

Иван Π‘ΠΈΠΌ (Иван Π‘ΠΈΠΌ) Π²ΠΈΠ·ΡƒΠ΅Π»Π½ΠΎ спорСдСни БСрвисната ΠΌΡ€Π΅ΠΆΠ° Π΄ΠΎΡ†Π½ΠΈ ΠΌΠΈΠ½Π°Ρ‚Π°Ρ‚Π° Π³ΠΎΠ΄ΠΈΠ½Π° ΠΈ Π³ΠΎ Π²Π΅Ρ‚ΠΈ истото Π·Π° ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°Ρ‚Π° ΠΈ процСсорот, Π½ΠΎ Π½Π΅ успСа:

ΠžΡ‡ΠΈΠ³Π»Π΅Π΄Π½ΠΎ, values-istio-test.yaml сСриозно ќС Π³ΠΈ Π·Π³ΠΎΠ»Π΅ΠΌΠΈ Π±Π°Ρ€Π°ΡšΠ°Ρ‚Π° Π·Π° процСсорот. Ако ја Π½Π°ΠΏΡ€Π°Π²ΠΈΠ² ΠΌΠΎΡ˜Π°Ρ‚Π° ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ° ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ, ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ Π²ΠΈ сС ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ½ΠΎ 24 Ρ˜Π°Π΄Ρ€Π° Π½Π° процСсорот Π·Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½Π°Ρ‚Π° Ρ‚Π°Π±Π»Π° ΠΈ 0,5 процСсор Π·Π° сСкој прокси. НСмам Ρ‚ΠΎΠ»ΠΊΡƒ ΠΌΠ½ΠΎΠ³Ρƒ. ЌС Π³ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π°ΠΌ тСстовитС ΠΊΠΎΠ³Π° ќС ΠΌΠΈ Π±ΠΈΠ΄Π°Ρ‚ Π΄ΠΎΠ΄Π΅Π»Π΅Π½ΠΈ повСќС рСсурси.

Π‘Π°ΠΊΠ°Π² сам Π΄Π° Π²ΠΈΠ΄Π°ΠΌ ΠΊΠΎΠ»ΠΊΡƒ пСрформанситС Π½Π° Istio сС слични со Π΄Ρ€ΡƒΠ³Π° ΠΌΡ€Π΅ΠΆΠ° Π·Π° услуги со ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄: Π›ΠΈΠ½ΠΊΠ΅Ρ€Π΄.

Π˜Π½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Π° Π½Π° сСрвисна ΠΌΡ€Π΅ΠΆΠ°

ΠŸΡ€Π²ΠΎ, Π³ΠΎ инсталирав Π²ΠΎ кластСр Π‘ΡƒΠΏΠ΅Ρ€Π“Π»Ρƒ:

$ 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 Π²ΠΎ производството, Π½ΠΎ Π΅ ΠΈΠ΄Π΅Π°Π»Π΅Π½ Π·Π° Ρ‚Π°ΠΊΠ²Π° Π·Π°Π΄Π°Ρ‡Π°. ΠœΠΎΡ€Π°Π² Π΄Π° користам Π±ΡƒΠΊΠ²Π°Π»Π½ΠΎ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π·Π° сСкоја сСрвисна ΠΌΡ€Π΅ΠΆΠ°. ΠšΠΎΡ€ΠΈΡΡ‚Π΅Π² Π΄Π²Π° кластСри Π·Π° ΠΈΠ·ΠΎΠ»Π°Ρ†ΠΈΡ˜Π° - ΠΏΠΎ Π΅Π΄Π΅Π½ Π·Π° Π˜ΡΡ‚ΠΈΠΎ ΠΈ Π›ΠΈΠ½ΠΊΠ΅Ρ€Π΄.

ЕкспСримСнтот бСшС спровСдСн Π½Π° Google Kubernetes Engine. Јас користСв Kubernetes 1.12.7-gke.7 ΠΈ Π±Π°Π·Π΅Π½ ΠΎΠ΄ јазли n1-standard-4 со автоматско ΡΠΊΠ°Π»ΠΈΡ€Π°ΡšΠ΅ Π½Π° Ρ˜Π°Π·Π»ΠΈΡ‚Π΅ (ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ 4, максимум 16).

ΠŸΠΎΡ‚ΠΎΠ° Π³ΠΈ инсталирав Π΄Π²Π΅Ρ‚Π΅ сСрвисни ΠΌΡ€Π΅ΠΆΠΈ ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°Ρ‚Π° линија.

ΠŸΡ€Π²ΠΈΠΎΡ‚ Π»ΠΈΠ½ΠΊΠ΅Ρ€:

$ 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 |
+---------+--------------+---------+---------------------------+

ΠŸΠΎΡ‚ΠΎΠ° Π˜ΡΡ‚ΠΈΠΎ:

$ 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, користимС ΠΏΡ€ΠΈΠ±Π΅Π»Π΅ΡˆΠΊΠΈ (Π³ΠΈ Π΄ΠΎΠ΄Π°Π΄ΠΎΠ² Ρ€Π°Ρ‡Π½ΠΎ ΠΏΡ€Π΅ΠΊΡƒ 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 Π²ΠΎ ΠΌΠΈΠ½Π°Ρ‚ΠΎΡ‚ΠΎ. Π“Π»Π°Π²Π½Π°Ρ‚Π° Ρ†Π΅Π» Π½Π° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅Ρ‚ΠΎ Π½Π° сСрвисната ΠΌΡ€Π΅ΠΆΠ° Π΅ Π΄Π΅ΠΊΠ° Π½ΠΈ Ρ‚Ρ€Π΅Π±Π° довСрливост ΠΈ Ρ‚ΠΎΠ»Π΅Ρ€Π°Π½Ρ†ΠΈΡ˜Π° Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ Π½Π° Π½ΠΈΠ²ΠΎ Π½Π° ΠΌΡ€Π΅ΠΆΠ° ΠΈ Π·Π° нас Π΅ Π²Π°ΠΆΠ½ΠΎ сСрвисната ΠΌΡ€Π΅ΠΆΠ° Сфикасно Π΄Π° сС справува со ΠΎΠΏΡ‚ΠΎΠ²Π°Ρ€ΡƒΠ²Π°ΡšΠ°Ρ‚Π° ΠΊΠΎΠΈ ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΎ Π³ΠΈ ΠΏΡ€Π΅ΠΊΠΈΠ½Π°Π»Π΅ услугитС.

Π’ΠΎ срцСто Π½Π° симулаторот Π·Π° Ρ‚ΠΎΠ»Π΅Ρ€Π°Π½Ρ†ΠΈΡ˜Π° Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ Π΅ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΠΊ јазол, кој Π΄Π΅Π»ΡƒΠ²Π° ΠΊΠ°ΠΊΠΎ сСрвисСн ΠΌΡ€Π΅ΠΆΠ΅Π½ јазол. Π Π°Π±ΠΎΡ‚Π½ΠΈΡ‡ΠΊΠΈΠΎΡ‚ јазол ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π° статички ΠΏΡ€ΠΈ ΡΡ‚Π°Ρ€Ρ‚ΡƒΠ²Π°ΡšΠ΅ ΠΈΠ»ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡ΠΊΠΈ ΠΏΡ€Π΅ΠΊΡƒ 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
Π›ΠΈΠ½ΠΊΠ΅Ρ€Π΄ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Π½ ΠΏΠ°Π½Π΅Π» ~22 ΠΌΠΈΠ»ΠΈΠΊΠΎΡ€ΠΈ

Π Π΅ΠΏΠ΅Ρ€ Π·Π° ΠΏΠΎΡ‚Ρ€ΠΎΡˆΡƒΠ²Π°Ρ‡ΠΊΠ° Π½Π° процСсорот Π·Π° Istio ΠΈ Linkerd
Istio ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Π½ ΠΏΠ°Π½Π΅Π»: ~ 750 ΠΌΠΈΠ»ΠΈΠΊΠΎΡ€ΠΈ

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½Π°Ρ‚Π° Ρ‚Π°Π±Π»Π° Istio користи ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ½ΠΎ 35 ΠΏΠ°Ρ‚ΠΈ повСќС рСсурси Π½Π° процСсорототколку Π›ΠΈΠ½ΠΊΠ΅Ρ€Π΄. Π‘Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°, сè Π΅ стандардно инсталирано, Π° istio-telemetry Ρ‚Ρ€ΠΎΡˆΠΈ ΠΌΠ½ΠΎΠ³Ρƒ рСсурси Π½Π° процСсорот ΠΎΠ²Π΄Π΅ (ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΎΠ½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠΈ со ΠΎΠ½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π°ΡšΠ΅ Π½Π° Π½Π΅ΠΊΠΎΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ). Ако ја отстранимС ΠΎΠ²Π°Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, сСпак Π΄ΠΎΠ±ΠΈΠ²Π°ΠΌΠ΅ повСќС ΠΎΠ΄ 100 ΠΌΠΈΠ»ΠΈΠΊΠΎΡ€ΠΈ, Ρ‚.Π΅ 4 ΠΏΠ°Ρ‚ΠΈ ΠΏΠΎΠ²Π΅ΡœΠ΅ΠΎΡ‚ΠΊΠΎΠ»ΠΊΡƒ Π›ΠΈΠ½ΠΊΠ΅Ρ€Π΄.

ΠŸΡ€ΠΎΠΊΡΠΈ Π·Π° странична ΠΊΠΎΠ»Π°

ΠŸΠΎΡ‚ΠΎΠ° ја тСстиравмС ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°Ρ‚Π° Π½Π° прокси. Π’Ρ€Π΅Π±Π° Π΄Π° ΠΈΠΌΠ° Π»ΠΈΠ½Π΅Π°Ρ€Π½Π° врска со Π±Ρ€ΠΎΡ˜ΠΎΡ‚ Π½Π° Π±Π°Ρ€Π°ΡšΠ°, Π½ΠΎ Π·Π° сСкоја странична ΠΊΠΎΠ»Π° ΠΈΠΌΠ° Π½Π΅ΠΊΠΎΠΈ Π½Π°Π΄Π·Π΅ΠΌΠ½ΠΈ Ρ‚Ρ€ΠΎΡˆΠΎΡ†ΠΈ ΡˆΡ‚ΠΎ влијаС Π½Π° ΠΊΡ€ΠΈΠ²Π°Ρ‚Π°.

Π Π΅ΠΏΠ΅Ρ€ Π·Π° ΠΏΠΎΡ‚Ρ€ΠΎΡˆΡƒΠ²Π°Ρ‡ΠΊΠ° Π½Π° процСсорот Π·Π° Istio ΠΈ Linkerd
Π›ΠΈΠ½ΠΊΠ΅Ρ€Π΄: ~ 100 ΠΌΠΈΠ»ΠΈΠΊΠΎΡ€ΠΈ Π·Π° irs-client, ~50 ΠΌΠΈΠ»ΠΈΠΊΠΎΡ€ΠΈ Π·Π° irs-client-loadgen

Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΈΠ·Π³Π»Π΅Π΄Π°Π°Ρ‚ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ, бидСјќи ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΡ‚ прокси Π΄ΠΎΠ±ΠΈΠ²Π° двојно повСќС ΡΠΎΠΎΠ±Ρ€Π°ΡœΠ°Ρ˜ ΠΎΠ΄ проксито Π·Π° Π²Ρ‡ΠΈΡ‚ΡƒΠ²Π°ΡšΠ΅: Π·Π° сСкоС појдовно Π±Π°Ρ€Π°ΡšΠ΅ ΠΎΠ΄ loadgen, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΡ‚ ΠΈΠΌΠ° Π΅Π΄Π΅Π½ дојдовСн ΠΈ Π΅Π΄Π΅Π½ појдовСн.

Π Π΅ΠΏΠ΅Ρ€ Π·Π° ΠΏΠΎΡ‚Ρ€ΠΎΡˆΡƒΠ²Π°Ρ‡ΠΊΠ° Π½Π° процСсорот Π·Π° Istio ΠΈ Linkerd
Istio/Envoy: ~155 ΠΌΠΈΠ»ΠΈΠΊΠΎΡ€ΠΈ Π·Π° irs-client, ~75 millicores Π·Π° irs-client-loadgen

Π“Π»Π΅Π΄Π°ΠΌΠ΅ слични Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ Π·Π° страничнитС ΠΊΠΎΠ»ΠΈ Istio.

Но, Π³Π΅Π½Π΅Ρ€Π°Π»Π½ΠΎ, ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡˆΠ½ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° Istio/Envoy консумираат ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ½ΠΎ 50% повСќС рСсурси Π½Π° процСсорототколку Π›ΠΈΠ½ΠΊΠ΅Ρ€Π΄.

Ја Π³Π»Π΅Π΄Π°ΠΌΠ΅ истата шСма Π½Π° страната Π½Π° сСрвСрот:

Π Π΅ΠΏΠ΅Ρ€ Π·Π° ΠΏΠΎΡ‚Ρ€ΠΎΡˆΡƒΠ²Π°Ρ‡ΠΊΠ° Π½Π° процСсорот Π·Π° Istio ΠΈ Linkerd
Π›ΠΈΠ½ΠΊΠ΅Ρ€Π΄: ~ 50 ΠΌΠΈΠ»ΠΈΠΊΠΎΡ€ΠΈ Π·Π° irs-сСрвСр

Π Π΅ΠΏΠ΅Ρ€ Π·Π° ΠΏΠΎΡ‚Ρ€ΠΎΡˆΡƒΠ²Π°Ρ‡ΠΊΠ° Π½Π° процСсорот Π·Π° Istio ΠΈ Linkerd
Istio/Envoy: ~80 ΠΌΠΈΠ»ΠΈΠΊΠΎΡ€ΠΈ Π·Π° irs-сСрвСр

На страната Π½Π° сСрвСрот, страничната ΠΊΠΎΠ»Π° Istio/Envoy Ρ‚Ρ€ΠΎΡˆΠΈ ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ½ΠΎ 60% повСќС рСсурси Π½Π° процСсорототколку Π›ΠΈΠ½ΠΊΠ΅Ρ€Π΄.

Π—Π°ΠΊΠ»ΡƒΡ‡ΠΎΠΊ

ΠŸΡ€ΠΎΠΊΡΠΈΡ‚ΠΎ Π½Π° Istio Envoy Ρ‚Ρ€ΠΎΡˆΠΈ 50+% повСќС процСсор ΠΎΠ΄ Linkerd Π½Π° Π½Π°ΡˆΠΈΠΎΡ‚ симулиран ΠΎΠ±Π΅ΠΌ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°. ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½Π°Ρ‚Π° Ρ‚Π°Π±Π»Π° Π½Π° Linkerd Ρ‚Ρ€ΠΎΡˆΠΈ ΠΌΠ½ΠΎΠ³Ρƒ ΠΏΠΎΠΌΠ°Π»ΠΊΡƒ рСсурси ΠΎΠ΄ Istio, особСно Π·Π° основнитС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ.

Π‘Γ¨ ΡƒΡˆΡ‚Π΅ размислувамС ΠΊΠ°ΠΊΠΎ Π΄Π° Π³ΠΈ Π½Π°ΠΌΠ°Π»ΠΈΠΌΠ΅ ΠΎΠ²ΠΈΠ΅ Ρ‚Ρ€ΠΎΡˆΠΎΡ†ΠΈ. Ако ΠΈΠΌΠ°Ρ‚Π΅ ΠΈΠ΄Π΅ΠΈ, Π²Π΅ ΠΌΠΎΠ»ΠΈΠΌΠ΅ сподСлСтС!

Π˜Π·Π²ΠΎΡ€: www.habr.com

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€