Istio ๋ฐ Linkerd์˜ CPU ์†Œ๋น„ ๋ฒค์น˜๋งˆํฌ

Istio ๋ฐ Linkerd์˜ CPU ์†Œ๋น„ ๋ฒค์น˜๋งˆํฌ

์†Œ๊ฐœ

์šฐ๋ฆฌ๋Š” Shopify Istio๋ฅผ ์„œ๋น„์Šค ๋ฉ”์‹œ๋กœ ๋ฐฐํฌํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์›์น™์ ์œผ๋กœ ํ•œ ๊ฐ€์ง€๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ๋ชจ๋“  ๊ฒƒ์ด ์ •์ƒ์ž…๋‹ˆ๋‹ค. ๋น„์‹ธ๋‹ค..

ะ’ ๊ฒŒ์‹œ๋œ ๋ฒค์น˜๋งˆํฌ Istio์˜ ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งํ•ฉ๋‹ˆ๋‹ค.

Istio 1.1์„ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋ก์‹œ๋Š” ์ดˆ๋‹น ์š”์ฒญ 0,6๊ฐœ๋‹น ์•ฝ 1000๊ฐœ์˜ vCPU(๊ฐ€์ƒ ์ฝ”์–ด)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์„œ๋น„์Šค ๋ฉ”์‹œ์˜ ์ฒซ ๋ฒˆ์งธ ์ง€์—ญ(์—ฐ๊ฒฐ ์–‘์ชฝ์— ํ”„๋ก์‹œ 2๊ฐœ)์˜ ๊ฒฝ์šฐ ์ดˆ๋‹น 1200๋งŒ ์š”์ฒญ์˜ ์†๋„๋กœ ํ”„๋ก์‹œ ์ „์šฉ ์ฝ”์–ด 40๊ฐœ๋ฅผ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. Google์˜ ๋น„์šฉ ๊ณ„์‚ฐ๊ธฐ์— ๋”ฐ๋ฅด๋ฉด ๊ตฌ์„ฑ ๋น„์šฉ์€ ์•ฝ $XNUMX/์›”/์ฝ”์–ด๋กœ ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค. n1-standard-64์ฆ‰, ์ด ์ง€์—ญ์—์„œ๋งŒ ์ดˆ๋‹น 50๋งŒ ๊ฑด์˜ ์š”์ฒญ์— ๋Œ€ํ•ด ์›” 1๋งŒ ๋‹ฌ๋Ÿฌ ์ด์ƒ์˜ ๋น„์šฉ์ด ์†Œ์š”๋ฉ๋‹ˆ๋‹ค.

์ด๋ฐ˜ ์‹ฌ(์ด๋ฐ˜ ์‹ฌ) ์‹œ๊ฐ์ ์œผ๋กœ ๋น„๊ต ์ž‘๋…„์— ์„œ๋น„์Šค ๋ฉ”์‹œ๊ฐ€ ์ง€์—ฐ๋˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ์™€ ํ”„๋กœ์„ธ์„œ์— ๋Œ€ํ•ด์„œ๋„ ๋™์ผํ•˜๊ฒŒ ์•ฝ์†ํ–ˆ์ง€๋งŒ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋ถ„๋ช…ํžˆ value-istio-test.yaml์€ CPU ์š”์ฒญ์„ ์‹ฌ๊ฐํ•˜๊ฒŒ ์ฆ๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค. ๊ณ„์‚ฐ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ˆ˜ํ–‰ํ–ˆ๋‹ค๋ฉด ์ œ์–ดํŒ์—๋Š” ์•ฝ 24๊ฐœ์˜ CPU ์ฝ”์–ด๊ฐ€ ํ•„์š”ํ•˜๊ณ  ๊ฐ ํ”„๋ก์‹œ์—๋Š” 0,5๊ฐœ์˜ CPU๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๋‹ค์ง€ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋” ๋งŽ์€ ๋ฆฌ์†Œ์Šค๊ฐ€ ํ• ๋‹น๋˜๋ฉด ํ…Œ์ŠคํŠธ๋ฅผ ๋ฐ˜๋ณตํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” 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๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์ง€๋งŒ ์ด๋Ÿฌํ•œ ์ž‘์—…์— ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค. ๊ฐ ์„œ๋น„์Šค ๋ฉ”์‹œ์— ๋Œ€ํ•ด ๋ง ๊ทธ๋Œ€๋กœ ๋ช‡ ๊ฐ€์ง€ ๋ช…๋ น์„ ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฒฉ๋ฆฌ๋ฅผ ์œ„ํ•ด Istio์™€ Linkerd์— ๊ฐ๊ฐ ํ•˜๋‚˜์”ฉ ๋‘ ๊ฐœ์˜ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

์‹คํ—˜์€ Google Kubernetes Engine์—์„œ ์ˆ˜ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์‚ฌ์šฉํ–ˆ์–ด์š” 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 ๋‚ด๊ฒฐํ•จ์„ฑ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ

Shopify ๊ณ ์œ ์˜ ํŠธ๋ž˜ํ”ฝ์„ ์‹คํ—˜ํ•˜๊ธฐ ์œ„ํ•ด Istio๋ผ๋Š” ๋‚ด๊ฒฐํ•จ์„ฑ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํŠน์ • ์›Œํฌ๋กœ๋“œ๋ฅผ ๋ชจ๋ธ๋งํ•˜๋„๋ก ๋™์ ์œผ๋กœ ๊ตฌ์„ฑ๋˜๊ณ  ์„œ๋น„์Šค ๊ทธ๋ž˜ํ”„์˜ ํŠน์ • ๋ถ€๋ถ„์„ ๋‚˜ํƒ€๋‚ด๋Š” ์‚ฌ์šฉ์ž ์ง€์ • ํ† ํด๋กœ์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋„๊ตฌ๊ฐ€ ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค.

Shopify์˜ ์ธํ”„๋ผ๋Š” ํ”Œ๋ž˜์‹œ ํŒ๋งค ์ค‘์— ๊ณผ๋ถ€ํ•˜ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ์ด์™€ ํ•จ๊ป˜ ์‡ผํ”ผํŒŒ์ด(Shopify) ํŒ๋งค์ž์—๊ฒŒ ๊ทธ๋Ÿฌํ•œ ํŒ๋งค๋ฅผ ๋” ์ž์ฃผ ๊ฐœ์ตœํ•˜๋„๋ก ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.. ๋Œ€๊ทœ๋ชจ ๊ณ ๊ฐ์€ ๋•Œ๋•Œ๋กœ ๊ณ„ํš๋œ ๋ฐ˜์ง ์„ธ์ผ์— ๋Œ€ํ•ด ๊ฒฝ๊ณ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์€ ๋ฐค๋‚ฎ ์–ธ์ œ๋“ ์ง€ ์šฐ๋ฆฌ๋ฅผ ์œ„ํ•ด ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ผ์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ํƒ„๋ ฅ์„ฑ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๊ฐ€ ๊ณผ๊ฑฐ์— Shopify์˜ ์ธํ”„๋ผ๋ฅผ ์••๋„ํ–ˆ๋˜ ํ† ํด๋กœ์ง€ ๋ฐ ์›Œํฌ๋กœ๋“œ์™€ ์ผ์น˜ํ•˜๋Š” ์›Œํฌํ”Œ๋กœ๋ฅผ ๋ชจ๋ธ๋งํ•˜๊ธฐ๋ฅผ ์›ํ–ˆ์Šต๋‹ˆ๋‹ค. ์„œ๋น„์Šค ๋ฉ”์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฃผ์š” ๋ชฉ์ ์€ ๋„คํŠธ์›Œํฌ ์ˆ˜์ค€์˜ ์•ˆ์ •์„ฑ๊ณผ ๋‚ด๊ฒฐํ•จ์„ฑ์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋ฉฐ, ์ด์ „์— ์„œ๋น„์Šค๋ฅผ ์ค‘๋‹จ์‹œ์ผฐ๋˜ ๋ถ€ํ•˜์— ์„œ๋น„์Šค ๋ฉ”์‹œ๊ฐ€ ํšจ๊ณผ์ ์œผ๋กœ ๋Œ€์ฒ˜ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฒฐํ•จ์„ฑ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์˜ ์ค‘์‹ฌ์—๋Š” ์„œ๋น„์Šค ๋ฉ”์‹œ ๋…ธ๋“œ ์—ญํ• ์„ ํ•˜๋Š” ์ž‘์—…์ž ๋…ธ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž‘์—…์ž ๋…ธ๋“œ๋Š” ์‹œ์ž‘ ์‹œ ์ •์ ์œผ๋กœ ๊ตฌ์„ฑํ•˜๊ฑฐ๋‚˜ REST API๋ฅผ ํ†ตํ•ด ๋™์ ์œผ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ž‘์—…์ž ๋…ธ๋“œ์˜ ๋™์  ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ํšŒ๊ท€ ํ…Œ์ŠคํŠธ ํ˜•ํƒœ๋กœ ์›Œํฌํ”Œ๋กœ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ๊ทธ๋Ÿฌํ•œ ํ”„๋กœ์„ธ์Šค์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค.

  • ์šฐ๋ฆฌ๋Š” 10๊ฐœ์˜ ์„œ๋ฒ„๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถœ์‹œํ•ฉ๋‹ˆ๋‹ค. bar ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์„œ๋น„์Šค 200/OK 100ms ํ›„.
  • ์šฐ๋ฆฌ๋Š” 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 100ms ํ›„.

์ด ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด 9๊ฐœ ์—”๋“œํฌ์ธํŠธ ๊ฐ„์˜ ์•ˆ์ •์ ์ธ ํŠธ๋ž˜ํ”ฝ ํ๋ฆ„์„ ์ธก์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์ด๋“œ์นด irs-client-loadgen ะธ irs-server ์ดˆ๋‹น 100๊ฐœ์˜ ์š”์ฒญ์„ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค. irs-client โ€” 200(์ˆ˜์‹  ๋ฐ ๋ฐœ์‹ ).

์šฐ๋ฆฌ๋Š” ๋‹ค์Œ์„ ํ†ตํ•ด ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰์„ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ๋„๊ทธPrometheus ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์กฐ์‚ฌ ๊ฒฐ๊ณผ

์ œ์–ดํŒ

๋จผ์ € CPU ์‚ฌ์šฉ๋Ÿ‰์„ ์กฐ์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค.

Istio ๋ฐ Linkerd์˜ CPU ์†Œ๋น„ ๋ฒค์น˜๋งˆํฌ
Linkerd ์ œ์–ดํŒ ~22๋ฐ€๋ฆฌ์ฝ”์–ด

Istio ๋ฐ Linkerd์˜ CPU ์†Œ๋น„ ๋ฒค์น˜๋งˆํฌ
Istio ์ œ์–ดํŒ: ~750๋ฐ€๋ฆฌ์ฝ”์–ด

Istio ์ œ์–ดํŒ์€ ๋Œ€๋žต์ ์œผ๋กœ ๋‹ค์Œ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. 35๋ฐฐ ๋” ๋งŽ์€ CPU ๋ฆฌ์†Œ์Šค๋ง์ปค๋“œ๋ณด๋‹ค ๋ฌผ๋ก  ๋ชจ๋“  ๊ฒƒ์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ค์น˜๋˜๋ฉฐ istio-telemetry๋Š” ์—ฌ๊ธฐ์—์„œ ๋งŽ์€ ํ”„๋กœ์„ธ์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ์†Œ๋น„ํ•ฉ๋‹ˆ๋‹ค(์ผ๋ถ€ ๊ธฐ๋Šฅ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜์—ฌ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Œ). ์ด ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•ด๋„ ์—ฌ์ „ํžˆ 100๋ฐ€๋ฆฌ์ฝ”์–ด ์ด์ƒ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 4 ๋ฒˆ๋ง์ปค๋“œ๋ณด๋‹ค

์‚ฌ์ด๋“œ์นด ํ”„๋ก์‹œ

๊ทธ๋Ÿฐ ๋‹ค์Œ ํ”„๋ก์‹œ ์‚ฌ์šฉ์„ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. ์š”์ฒญ ์ˆ˜์™€ ์„ ํ˜• ๊ด€๊ณ„๊ฐ€ ์žˆ์–ด์•ผ ํ•˜์ง€๋งŒ ๊ฐ ์‚ฌ์ด๋“œ์นด์—๋Š” ๊ณก์„ ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์•ฝ๊ฐ„์˜ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

Istio ๋ฐ Linkerd์˜ CPU ์†Œ๋น„ ๋ฒค์น˜๋งˆํฌ
๋ง์ปค๋“œ: irs-client์˜ ๊ฒฝ์šฐ ~100๋ฐ€๋ฆฌ์ฝ”์–ด, irs-client-loadgen์˜ ๊ฒฝ์šฐ ~50๋ฐ€๋ฆฌ์ฝ”์–ด

๊ฒฐ๊ณผ๋Š” ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ ํ”„๋ก์‹œ๋Š” loadgen ํ”„๋ก์‹œ๋ณด๋‹ค ๋‘ ๋ฐฐ ๋งŽ์€ ํŠธ๋ž˜ํ”ฝ์„ ์ˆ˜์‹ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ฆ‰, loadgen์—์„œ ๋‚˜๊ฐ€๋Š” ๋ชจ๋“  ์š”์ฒญ์— โ€‹โ€‹๋Œ€ํ•ด ํด๋ผ์ด์–ธํŠธ์—๋Š” ํ•˜๋‚˜์˜ ์ˆ˜์‹  ์š”์ฒญ๊ณผ ํ•˜๋‚˜์˜ ์†ก์‹  ์š”์ฒญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Istio ๋ฐ Linkerd์˜ CPU ์†Œ๋น„ ๋ฒค์น˜๋งˆํฌ
Istio/Envoy: irs-client์˜ ๊ฒฝ์šฐ ~155๋ฐ€๋ฆฌ์ฝ”์–ด, irs-client-loadgen์˜ ๊ฒฝ์šฐ ~75๋ฐ€๋ฆฌ์ฝ”์–ด

Istio ์‚ฌ์ด๋“œ์นด์—์„œ๋„ ๋น„์Šทํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ผ๋ฐ˜์ ์œผ๋กœ Istio/Envoy ํ”„๋ก์‹œ๋Š” ์•ฝ 50% ๋” ๋งŽ์€ CPU ๋ฆฌ์†Œ์Šค๋ง์ปค๋“œ๋ณด๋‹ค

์„œ๋ฒ„ ์ธก์—์„œ๋„ ๋™์ผํ•œ ๊ตฌ์„ฑํ‘œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Istio ๋ฐ Linkerd์˜ CPU ์†Œ๋น„ ๋ฒค์น˜๋งˆํฌ
Linkerd: irs-server์˜ ๊ฒฝ์šฐ ~50๋ฐ€๋ฆฌ์ฝ”์–ด

Istio ๋ฐ Linkerd์˜ CPU ์†Œ๋น„ ๋ฒค์น˜๋งˆํฌ
Istio/Envoy: irs-server์˜ ๊ฒฝ์šฐ ~80๋ฐ€๋ฆฌ์ฝ”์–ด

์„œ๋ฒ„ ์ธก์—์„œ ์‚ฌ์ด๋“œ์นด Istio/Envoy๋Š” ์•ฝ 60% ๋” ๋งŽ์€ CPU ๋ฆฌ์†Œ์Šค๋ง์ปค๋“œ๋ณด๋‹ค

๊ฒฐ๋ก 

Istio Envoy ํ”„๋ก์‹œ๋Š” ์‹œ๋ฎฌ๋ ˆ์ด์…˜๋œ ์›Œํฌ๋กœ๋“œ์—์„œ Linkerd๋ณด๋‹ค 50% ์ด์ƒ ๋” ๋งŽ์€ CPU๋ฅผ ์†Œ๋น„ํ•ฉ๋‹ˆ๋‹ค. Linkerd ์ œ์–ดํŒ์€ ํŠนํžˆ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ์˜ ๊ฒฝ์šฐ Istio๋ณด๋‹ค ํ›จ์”ฌ ์ ์€ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์ด๋Ÿฌํ•œ ๋น„์šฉ์„ ์–ด๋–ป๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ์„์ง€ ๊ณ„์† ๊ณ ๋ฏผํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์•„์ด๋””์–ด๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ณต์œ ํ•ด์ฃผ์„ธ์š”!

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€