๐น ๊ฐ์
์ด๋ฒ ๊ธ์์๋ Istio๋ฅผ ํ์ฉํ์ฌ ์๋น์ค ๋ณต์๋ ฅ์ ํฅ์์ํค๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๋ง์ดํฌ๋ก์๋น์ค ํ๊ฒฝ์์๋ ์ผ์์ ์ธ ์ฅ์ ๋ ๋คํธ์ํฌ ๋ฌธ์ ๋ก ์ธํด ์์ฒญ์ด ์คํจํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
Istio์ ๋ฆฌํธ๋ผ์ด(Retry), ํ์์์(Timeout), ์ํท ๋ธ๋ ์ด์ปค(Circuit Breaker) ์ค์ ์ ํ์ฉํ๋ฉด,
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ์ต์ํํ๊ณ ์๋น์ค์ ๊ฐ์ฉ์ฑ๊ณผ ์์ ์ฑ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
์ด ๊ธ์์๋ ๊ฐ ์ค์ ์ ๊ฐ๋ , ์ฌ์ฉ ๋ฐฉ๋ฒ, ๊ทธ๋ฆฌ๊ณ ์ค์ YAML ์์ ๋ฅผ ํตํด ์ค์ ์ ์ฉ ๋ฐฉ๋ฒ์ ๋ค๋ฃจ๊ฒ ์ต๋๋ค.
๐น 1. ์๋น์ค ๋ณต์๋ ฅ ์ ๋ต ๊ฐ์
โ 1.1 ๋ฆฌํธ๋ผ์ด(Retry)
**๋ฆฌํธ๋ผ์ด(Retry)**๋ ์ผ์์ ์ธ ๋คํธ์ํฌ ์ฅ์ ๋ ์๋ฒ ์ค๋ฅ๋ก ์ธํด ์์ฒญ์ด ์คํจํ์ ๋, ์๋์ผ๋ก ์ฌ์๋ํ๋ ๊ธฐ๋ฅ์ ๋๋ค.
๋ฆฌํธ๋ผ์ด์ ์ฃผ์ ๊ธฐ๋ฅ
- ์ผ์์ ์ธ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ ๋ ์์ฒญ์ ๋ค์ ์๋
- ์ฅ์ ๊ฐ ์ผ์์ ์ธ ๊ฒฝ์ฐ, ์ ์ฒด ์๋น์ค ์ฅ์ ๋ก ์ด์ด์ง๋ ๊ฒ์ ๋ฐฉ์ง
- ์ต๋ ์ฌ์๋ ํ์ ๋ฐ ๊ฐ๊ฒฉ์ ์ค์ ํ์ฌ ๋ถํ์ํ ์์ฒญ ๋จ๋ฐ ๋ฐฉ์ง
โ 1.2 ํ์์์(Timeout)
**ํ์์์(Timeout)**์ ์์ฒญ์ด ๋๋ฌด ์ค๋ ๊ฑธ๋ฆด ๊ฒฝ์ฐ, ์๋์ผ๋ก ์ข ๋ฃํ์ฌ ์์คํ ๋ฆฌ์์ค๋ฅผ ๋ณดํธํ๋ ๊ธฐ๋ฅ์ ๋๋ค.
ํ์์์์ ์ฃผ์ ๊ธฐ๋ฅ
- ์๋ต ์๊ฐ์ด ๋๋ฌด ๊ธด ์์ฒญ์ ์๋์ผ๋ก ์ค๋จํ์ฌ, ์์คํ ๊ณผ๋ถํ ๋ฐฉ์ง
- ํน์ ์๋น์ค ์๋ต์ด ๋ฆ์ด์ง๋ฉด ๋น ๋ฅด๊ฒ ์ค๋ฅ ์ฒ๋ฆฌ ๊ฐ๋ฅ
- ๋ค๋ฅธ ์๋น์ค๊ฐ ์ํฅ์ ๋ฐ์ง ์๋๋ก ๋ณดํธ
โ 1.3 ์ํท ๋ธ๋ ์ด์ปค(Circuit Breaker)
**์ํท ๋ธ๋ ์ด์ปค(Circuit Breaker)**๋ ์ฐ์๋ ์์ฒญ ์คํจ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ, ํด๋น ์๋น์ค๋ฅผ ์ผ์ ์๊ฐ ๋์ ์ฐจ๋จํ์ฌ ์ถ๊ฐ ์์ฒญ์ ๋ฐฉ์งํ๋ ๊ธฐ๋ฅ์
๋๋ค.
์ด๋ ์ฅ์ ๊ฐ ๋ฐ์ํ ์๋น์ค๋ก์ ํธ๋ํฝ์ ์ผ์์ ์ผ๋ก ์ฐจ๋จํ์ฌ ์ ์ฒด ์์คํ
์ฅ์ ๋ฅผ ์๋ฐฉํ๋ ์ญํ ์ ํฉ๋๋ค.
์ํท ๋ธ๋ ์ด์ปค์ ์ฃผ์ ๊ธฐ๋ฅ
- ์ผ์ ํ์ ์ด์ ์์ฒญ ์คํจ ์, ์๋น์ค๋ก์ ์ถ๊ฐ ์์ฒญ์ ์ฐจ๋จ
- ๊ณผ๋ถํ ์ํ์ ์๋น์ค๋ก์ ์์ฒญ์ ๋ฐฉ์งํ์ฌ ์ฅ์ ํ์ฐ์ ๋ง์
- ์ผ์ ์๊ฐ์ด ์ง๋๋ฉด ์๋์ผ๋ก ๋ค์ ์์ฒญ์ ํ์ฉ
๐น 2. Istio๋ฅผ ํ์ฉํ ๋ฆฌํธ๋ผ์ด ์ค์
โ 2.1 ๊ธฐ๋ณธ ๋ฆฌํธ๋ผ์ด ์ค์ (VirtualService ์ ์ฉ)
์๋ VirtualService ์ค์ ์ ์์ฒญ์ด ์คํจํ์ ๋, ์ต๋ 3๋ฒ๊น์ง ์ฌ์๋(Retry)ํ๋ ์ค์ ์ ๋๋ค.
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: my-service
spec:
hosts:
- my-service
http:
- route:
- destination:
host: my-service
subset: v1
retries:
attempts: 3 # ์ต๋ 3๋ฒ ์ฌ์๋
perTryTimeout: 2s # ๊ฐ ์์ฒญ๋น ์ต๋ 2์ด ๋๊ธฐ
retryOn: "gateway-error,connect-failure,refused-stream" # ํน์ ์ค๋ฅ ๋ฐ์ ์ ๋ฆฌํธ๋ผ์ด ์ํ
์ค๋ช :
- retries.attempts: 3 → ์์ฒญ ์คํจ ์ ์ต๋ 3๋ฒ๊น์ง ์ฌ์๋
- retries.perTryTimeout: 2s → ๊ฐ ์์ฒญ์ ์ต๋ 2์ด ๋์ ๋๊ธฐ ํ ์ฌ์๋
- retries.retryOn → ํน์ ์ค๋ฅ(gateway-error, connect-failure, refused-stream) ๋ฐ์ ์ ์ฌ์๋
๐น 3. Istio๋ฅผ ํ์ฉํ ํ์์์ ์ค์
โ 3.1 ๊ธฐ๋ณธ ํ์์์ ์ค์ (VirtualService ์ ์ฉ)
์๋ VirtualService ์ค์ ์ ์์ฒญ์ด 5์ด ์ด์ ๊ฑธ๋ฆด ๊ฒฝ์ฐ ์๋์ผ๋ก ํ์์์ ์ฒ๋ฆฌํ๋ ์ค์ ์ ๋๋ค.
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: my-service
spec:
hosts:
- my-service
http:
- route:
- destination:
host: my-service
subset: v1
timeout: 5s # ์ต๋ 5์ด ๋์ ์๋ต ๋๊ธฐ
์ค๋ช :
- timeout: 5s → ์ต๋ 5์ด ๋์ ์๋ต์ ๊ธฐ๋ค๋ฆฌ๋ฉฐ, ์ด๊ณผ ์ ์๋์ผ๋ก ์์ฒญ ์ข ๋ฃ
๐น 4. Istio๋ฅผ ํ์ฉํ ์ํท ๋ธ๋ ์ด์ปค ์ค์
โ 4.1 ๊ธฐ๋ณธ ์ํท ๋ธ๋ ์ด์ปค ์ค์ (DestinationRule ์ ์ฉ)
์๋ DestinationRule ์ค์ ์ ์ํท ๋ธ๋ ์ด์ปค๋ฅผ ํ์ฑํํ์ฌ ๊ณผ๋ถํ ๋ฐฉ์งํ๋ ์์ ์ ๋๋ค.
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: my-service
spec:
host: my-service
trafficPolicy:
connectionPool:
http:
http1MaxPendingRequests: 5 # ์ต๋ 5๊ฐ์ ์์ฒญ ๋๊ธฐ ๊ฐ๋ฅ
maxRequestsPerConnection: 1 # ์ฐ๊ฒฐ๋น ์ต๋ 1๊ฐ ์์ฒญ ์ฒ๋ฆฌ
outlierDetection:
consecutive5xxErrors: 3 # 5xx ์ค๋ฅ๊ฐ 3๋ฒ ์ฐ์ ๋ฐ์ํ๋ฉด ์ํท ๋ธ๋ ์ด์ปค ํ์ฑํ
interval: 10s # ์ค๋ฅ ๊ฐ์ง ์ฃผ๊ธฐ (10์ด)
baseEjectionTime: 30s # ์ํท ๋ธ๋ ์ด์ปค๊ฐ ํ์ฑํ๋๋ฉด 30์ด ๋์ ํด๋น ์๋น์ค๋ก์ ์์ฒญ ์ฐจ๋จ
์ค๋ช :
- connectionPool.http.http1MaxPendingRequests: 5 → ์ต๋ 5๊ฐ์ ์์ฒญ์ ๋๊ธฐ ์ํ๋ก ์ ์ง
- connectionPool.http.maxRequestsPerConnection: 1 → ์ฐ๊ฒฐ๋น ์ต๋ 1๊ฐ ์์ฒญ๋ง ํ์ฉ
- outlierDetection.consecutive5xxErrors: 3 → 5xx ์ค๋ฅ๊ฐ 3๋ฒ ์ฐ์ ๋ฐ์ํ๋ฉด ์ํท ๋ธ๋ ์ด์ปค ํ์ฑํ
- outlierDetection.interval: 10s → 10์ด ๊ฐ๊ฒฉ์ผ๋ก ์ค๋ฅ ๊ฐ์ง
- outlierDetection.baseEjectionTime: 30s → ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์๋น์ค๋ 30์ด ๋์ ์ฐจ๋จ๋จ
๐น 5. ์๋น์ค ๋ณต์๋ ฅ ์ต์ ํ ์ฌ๋ก
1๏ธโฃ ๋ฆฌํธ๋ผ์ด + ํ์์์ ์กฐํฉ
- ์๋ต ์๊ฐ์ด ๊ธธ์ด์ง ๊ฒฝ์ฐ ์ผ์ ์๊ฐ ์์ ์๋ต์ด ์ค์ง ์์ผ๋ฉด ํ์์์ ์ ์ฉ
- ๋คํธ์ํฌ ์ค๋ฅ๋ก ์ธํด ์์ฒญ์ด ์คํจํ ๊ฒฝ์ฐ ์ฌ์๋(Retry) ์ํ
2๏ธโฃ ์ํท ๋ธ๋ ์ด์ปค ์ ์ฉ ํ ๋ก๋ ๋ฐธ๋ฐ์ฑ ์ต์ ํ
- ํน์ ์๋น์ค์ ์ฅ์ ๊ฐ์ง ์, ํธ๋ํฝ์ ์๋์ผ๋ก ์ฐจ๋จํ์ฌ ์ ์ฒด ์ฅ์ ๋ฅผ ์๋ฐฉ
- ๊ธฐ๋ณธ์ ์ผ๋ก Round Robin ๋ฐฉ์์ ๋ก๋ ๋ฐธ๋ฐ์ฑ์ ์ฌ์ฉํ์ฌ ์์ฒญ์ ๊ณ ๋ฅด๊ฒ ๋ถ์ฐ
๐ ๊ฒฐ๋ก
- ๋ฆฌํธ๋ผ์ด(Retry): ์ผ์์ ์ธ ์ฅ์ ๋ฐ์ ์, ์ต๋ ์ง์ ๋ ํ์๋งํผ ์ฌ์๋ ๊ฐ๋ฅ
- ํ์์์(Timeout): ์๋ต ์๊ฐ์ด ๋๋ฌด ๊ธด ์์ฒญ์ ์๋์ผ๋ก ์ค๋จํ์ฌ ๋ฆฌ์์ค ๋ญ๋น ๋ฐฉ์ง
- ์ํท ๋ธ๋ ์ด์ปค(Circuit Breaker): ์ฐ์๋ ์ฅ์ ๋ฐ์ ์, ์ผ์ ์๊ฐ ๋์ ํด๋น ์๋น์ค๋ก์ ์์ฒญ์ ์ฐจ๋จํ์ฌ ์ ์ฒด ์์คํ ๋ณดํธ
- ์ธ ๊ฐ์ง ๊ธฐ๋ฅ์ ์กฐํฉํ๋ฉด, ๋ง์ดํฌ๋ก์๋น์ค ํ๊ฒฝ์์ ๋ณด๋ค ์์ ์ ์ธ ์๋น์ค ์ด์์ด ๊ฐ๋ฅ