Муқаддима
Мо дар он ҳастем
В
Бо Istio 1.1, прокси барои 0,6 дархост дар як сония тақрибан 1000 vCPU (аслҳои виртуалӣ) истеъмол мекунад.
Барои минтақаи аввал дар шабакаи хидматрасонӣ (2 прокси дар ҳар як тарафи пайвастшавӣ), мо танҳо барои прокси 1200 ядро дорем, ки бо суръати як миллион дархост дар як сония. Мувофиқи ҳисобкунаки хароҷоти Google, он барои конфигуратсия тақрибан 40 доллар дар як моҳ аст. n1-standard-64
, яъне танҳо ҳамин минтақа барои 50 миллион дархост дар як сония ба мо беш аз 1 ҳазор доллар дар як моҳ арзиш хоҳад дошт.
Иван Сим (
Эҳтимол, values-istio-test.yaml дархостҳои CPU-ро ба таври ҷиддӣ афзоиш хоҳад дод. Агар ман математикаи худро дуруст иҷро карда бошам, ба шумо тақрибан 24 ядрои CPU барои панели идоракунӣ ва 0,5 CPU барои ҳар як прокси лозим аст. Ман ин қадар надорам. Вақте ки ба ман захираҳои бештар ҷудо карда мешаванд, ман санҷишҳоро такрор мекунам.
Ман мехостам худам бубинам, ки чӣ гуна иҷрои Истио ба шабакаи дигари хидматрасонии кушодаасос шабоҳат дорад:
Насби торҳои хидматрасонӣ
Пеш аз ҳама, ман онро дар кластер насб кардам
$ 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-ро дар истеҳсолот истифода намебарем, аммо он барои чунин вазифа беҳтарин аст. Ба ман лозим омад, ки барои ҳар як шабакаи хидматӣ чанд фармонро истифода барам. Ман ду кластерро барои ҷудокунӣ истифода кардам - яке барои Истио ва Linkerd.
Таҷриба дар 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 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 сохтем, то бо трафики беназири Shopify таҷриба кунад. Барои сохтани топологияи фармоишӣ ба мо асбобе лозим буд, ки як қисми мушаххаси графики хидматрасонии моро ифода кунад, ки барои моделсозии сарбории мушаххаси динамикӣ танзим карда шудааст.
Ҳангоми фурӯши флеш инфрасохтори Shopify зери бори вазнин аст. Дар айни замон, Shopify
Мо мехостем, ки симулятори устувории мо ҷараёнҳои кориро модел кунад, ки ба топологияҳо ва сарбории корӣ мувофиқат кунанд, ки дар гузашта инфрасохтори Shopify-ро пур карда буданд. Ҳадафи асосии истифодаи шабакаи хидматрасонӣ дар он аст, ки мо ба эътимоднокӣ ва таҳаммулпазирии хатогиҳо дар сатҳи шабака ниёз дорем ва барои мо муҳим аст, ки шабакаи хидматрасонӣ бо сарбориҳое, ки қаблан хидматҳоро халалдор мекарданд, самаранок мубориза барад.
Дар маркази симулятори таҳаммулпазирии хатогиҳо як гиреҳи корӣ мебошад, ки ҳамчун гиреҳи тории хидматӣ амал мекунад. Гиреҳи коргариро ҳангоми оғозёбӣ ё ба таври динамикӣ тавассути REST API танзим кардан мумкин аст. Мо конфигуратсияи динамикии гиреҳҳои коргариро барои эҷоди ҷараёнҳои корӣ дар шакли санҷишҳои регрессионӣ истифода мебарем.
Дар ин ҷо як мисоли чунин раванд аст:
- Мо оғоз 10 серверҳо ҳамчун
bar
хидмате, ки посух медиҳад200/OK
пас аз 100 мс. - Мо 10 муштариро оғоз мекунем - ҳар як ба як сония 100 дархост мефиристад
bar
. - Ҳар 10 сония мо 1 серверро нест мекунем ва хатогиҳоро назорат мекунем
5xx
дар бораи муштарӣ.
Дар охири ҷараёни кор, мо гузоришҳо ва ченакҳоро тафтиш мекунем ва тафтиш мекунем, ки оё санҷиш гузаштааст. Ин аст, ки мо дар бораи кори шабакаи хидматрасонии худ маълумот мегирем ва санҷиши регрессияро мегузаронем, то тахминҳои худро дар бораи таҳаммулпазирии хатоҳо санҷем.
(Эзоҳ: Мо дар бораи манбаи кушодаи симулятори таҳаммулпазирии хатогиҳои Istio фикр мекунем, аммо ҳоло ба ин кор омода нестем.)
Istio симулятори таҳаммулпазирии хатогиҳо барои меҳвари хидматрасонӣ
Мо якчанд гиреҳҳои кории симуляторро насб кардем:
irs-client-loadgen
: 3 нусха, ки дар як сония 100 дархост мефиристандirs-client
.irs-client
: 3 реплика, ки дархостро қабул мекунад, 100 мс интизор шавед ва дархостро ба он равон кунедirs-server
.irs-server
: 3 нусхае, ки бармегардад200/OK
пас аз 100 мс.
Бо ин конфигуратсия мо метавонем ҷараёни мӯътадили трафикро байни 9 нуқтаи ниҳоӣ чен кунем. Вагонҳо дар irs-client-loadgen
и irs-server
қабул 100 дархост дар як сония, ва irs-client
— 200 (даромад ва баромад).
Мо истифодаи захираҳоро тавассути
натиҷаҳои
Панелҳои идоракунӣ
Аввалан, мо истеъмоли CPU-ро тафтиш кардем.
Панели идоракунии Linkerd ~ 22 милликор
Панели идоракунии Истио: ~ 750 милликор
Панели идоракунии Истио тахминан истифода мебарад 35 маротиба бештар захираҳои CPUназар ба Линкерд. Албатта, ҳама чиз бо нобаёнӣ насб карда мешавад ва истио-телеметрия дар ин ҷо захираҳои зиёди протсессорро истеъмол мекунад (онро бо хомӯш кардани баъзе функсияҳо ғайрифаъол кардан мумкин аст). Агар мо ин компонентро хориҷ кунем, мо ҳоло ҳам зиёда аз 100 милликор мегирем, яъне 4 баробар зиёд астназар ба Линкерд.
Прокси мошини паҳлӯ
Мо баъдан истифодаи проксиро санҷидем. Бо шумораи дархостҳо бояд робитаи хаттӣ вуҷуд дошта бошад, аммо барои ҳар як варақи паҳлӯӣ каме сарборӣ вуҷуд дорад, ки ба каҷ таъсир мерасонад.
Linkerd: ~100 милликор барои irs-client, ~50 милликор барои irs-client-loadgen
Натиҷаҳо мантиқӣ ба назар мерасанд, зеро прокси мизоҷ назар ба прокси loadgen ду маротиба зиёдтар трафик мегирад: барои ҳар як дархости содиротӣ аз loadgen, муштарӣ як воридотӣ ва як баромад дорад.
Истио/фиристода: ~155 милликор барои irs-client, ~75 милликор барои irs-client-loadgen
Мо натиҷаҳои шабеҳро барои канораҳои Истио мебинем.
Аммо дар маҷмӯъ, проксиҳои Истио / Envoy истеъмол мекунанд тақрибан 50% захираҳои CPU бештарназар ба Линкерд.
Мо ҳамон схемаро дар тарафи сервер мебинем:
Linkerd: ~ 50 милликор барои irs-сервер
Истио / фиристода: ~ 80 милликор барои irs-сервер
Дар тарафи сервер, канори Истио/Энвой истеъмол мекунад тақрибан 60% захираҳои CPU бештарназар ба Линкерд.
хулоса
Прокси Istio Envoy дар сарбории тақлидшудаи мо нисбат ба Linkerd 50+% бештар CPU истеъмол мекунад. Панели идоракунии Linkerd нисбат ба Istio, махсусан барои ҷузъҳои асосӣ, захираҳои камтар истеъмол мекунад.
Мо то хол дар бораи он фикр мекунем, ки ин харочот чй тавр кам карда шавад. Агар шумо идеяҳо дошта бошед, лутфан мубодила кунед!
Манбаъ: will.com