Service Registry, Service Discovery, Sidecar, Service Mesh
๐ฅ ๋ค์ด๊ฐ๋ฉฐ
MSA ํ๊ฒฝ์์๋ ํ๋์ ํฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ๋ฌ ์๋น์ค๋ก ๋๋์ด ์ด์ํ๋ค. ์๋น์ค๊ฐ ๋๋๋ฉด ๊ฐ ์๋น์ค๋ ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐฐํฌ๋๊ณ ํ์ฅ๋ ์ ์์ง๋ง, ๋์์ ์๋น์ค ๊ฐ ํต์ ์ ์ด๋ป๊ฒ ์์ ์ ์ผ๋ก ์ฒ๋ฆฌํ ๊ฒ์ธ์ง๊ฐ ์ค์ํ ๋ฌธ์ ๊ฐ ๋๋ค.
๋จ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์์์๋ ๋ฉ์๋ ํธ์ถ๋ก ๋๋๋ ์ผ์ด MSA์์๋ ๋คํธ์ํฌ ํธ์ถ์ด ๋๋ค. ๋คํธ์ํฌ ํธ์ถ์ ์คํจํ ์ ์๊ณ , ๋๋ ค์ง ์ ์๊ณ , ๋์ ์๋น์ค์ ์์น๋ ๊ณ์ ๋ฐ๋ ์ ์๋ค. ํนํ ์ปจํ ์ด๋์ Kubernetes ํ๊ฒฝ์์๋ Pod๊ฐ ์์ฑ๋๊ณ ์ฌ๋ผ์ง๋ฉด์ IP๊ฐ ๊ณ์ ๋ฐ๋๊ธฐ ๋๋ฌธ์, ํด๋ผ์ด์ธํธ๊ฐ ํน์ IP๋ฅผ ์ง์ ์๊ณ ํธ์ถํ๋ ๋ฐฉ์์ ์ ์งํ๊ธฐ ์ด๋ ต๋ค.
๊ทธ๋์ MSA์์๋ ๋ค์๊ณผ ๊ฐ์ ์ง๋ฌธ์ด ์๊ธด๋ค.
- ํธ์ถํ ์๋น์ค์ ์์น๋ฅผ ์ด๋ป๊ฒ ์ฐพ์ ๊ฒ์ธ๊ฐ?
- ์ฅ์ ๊ฐ ๋ฐ์ํ์ ๋ ์ด๋ป๊ฒ ์ฐํํ๊ฑฐ๋ ๋น ๋ฅด๊ฒ ์คํจ์ํฌ ๊ฒ์ธ๊ฐ?
- ์ธ์ฆ, ์ํธํ, ๋ก๊น , ๋ฉํธ๋ฆญ ์์ง ๊ฐ์ ๊ณตํต ๊ธฐ๋ฅ์ ์ด๋์์ ์ฒ๋ฆฌํ ๊ฒ์ธ๊ฐ?
- ์ด๋ฐ ๊ธฐ๋ฅ์ ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋์ ๋ฐ๋ณตํด์ ๋ฃ์ด์ผ ํ๋๊ฐ?
์ด๋ฒ ๊ธ์์๋ ์ด ์ง๋ฌธ๋ค์ด Service Registry, Service Discovery, Sidecar Proxy, Sidecar Bridge, Service Mesh, Sidecarless Service Mesh๋ก ์ด๋ป๊ฒ ์ด์ด์ง๋์ง ์ ๋ฆฌํด๋ณด๋ ค ํ๋ค.
MSA์์ ์๋น์ค ๊ฐ ํต์ ์ด ์ด๋ ค์ด ์ด์
MSA์์๋ ์๋น์ค๊ฐ ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ค๋ก ๋ถ๋ฆฌ๋๋ค. ์๋ฅผ ๋ค์ด ์ฃผ๋ฌธ ์๋น์ค๊ฐ ๊ฒฐ์ ์๋น์ค, ์ฌ๊ณ ์๋น์ค, ๋ฐฐ์ก ์๋น์ค๋ฅผ ํธ์ถํ๋ค๊ณ ์๊ฐํด๋ณด์.
flowchart LR
Order[Order Service] --> Payment[Payment Service]
Order --> Inventory[Inventory Service]
Order --> Shipping[Shipping Service]
์ด ๊ตฌ์กฐ์์ ์๋น์ค ๊ฐ ํต์ ์ ๋จ์ํ HTTP ์์ฒญ์ ๋ณด๋ด๋ ๊ฒ์ฒ๋ผ ๋ณด์ผ ์ ์๋ค. ํ์ง๋ง ์ด์ ํ๊ฒฝ์์๋ ๋ค์ ๋ฌธ์ ๊ฐ ์๊ธด๋ค.
- ์๋น์ค ์ธ์คํด์ค๊ฐ ์ฌ๋ฌ ๊ฐ์ผ ์ ์๋ค.
- ํธ๋ํฝ ์ฆ๊ฐ์ ๋ฐ๋ผ ์ธ์คํด์ค๊ฐ ๋๊ฑฐ๋ ์ค์ด๋ ๋ค.
- ์ฅ์ ๊ฐ ๋ ์ธ์คํด์ค๋ ํธ์ถ ๋์์์ ์ ์ธ๋์ด์ผ ํ๋ค.
- ๋ฐฐํฌ ์ค์๋ ๊ตฌ๋ฒ์ ๊ณผ ์ ๋ฒ์ ์ธ์คํด์ค๊ฐ ํจ๊ป ์กด์ฌํ ์ ์๋ค.
- ํธ์ถ ์ง์ฐ, timeout, retry, circuit breaker ๊ฐ์ ์ ์ฑ ์ด ํ์ํ๋ค.
- ์ด๋ค ์๋น์ค๊ฐ ์ด๋ค ์๋น์ค๋ฅผ ํธ์ถํ๋์ง ์ถ์ ํด์ผ ํ๋ค.
์ฆ, MSA์ ์ด๋ ค์์ ์๋น์ค๋ฅผ ๋๋๋ ๊ฒ ์์ฒด๋ณด๋ค ๋๋ ์๋น์ค๋ค์ด ๋คํธ์ํฌ ์์์ ์์ ํ๊ฒ ํ๋ ฅํ๋๋ก ๋ง๋๋ ๋ฐ ์๋ค.
Service Registry
Service Registry๋ ์๋น์ค ์ธ์คํด์ค์ ์์น ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ์ ์ฅ์๋ค.
์๋น์ค ์ธ์คํด์ค๊ฐ ์คํ๋๋ฉด ์์ ์ ์ ๋ณด๋ฅผ registry์ ๋ฑ๋กํ๋ค. ๋ฐ๋๋ก ์ธ์คํด์ค๊ฐ ์ข ๋ฃ๋๊ฑฐ๋ health check์ ์คํจํ๋ฉด registry์์ ์ ๊ฑฐ๋๋ค.
๋ฑ๋ก๋๋ ์ ๋ณด๋ ๋ณดํต ๋ค์๊ณผ ๊ฐ๋ค.
- service name
- instance id
- IP
- port
- health status
- metadata
flowchart TB
Payment1[Payment Instance 1] --> Registry[Service Registry]
Payment2[Payment Instance 2] --> Registry
Payment3[Payment Instance 3] --> Registry
Registry --> Info[payment service instances]
์๋ฅผ ๋ค์ด payment-service๋ผ๋ ์ด๋ฆ์ผ๋ก ์ธ ๊ฐ์ ์ธ์คํด์ค๊ฐ ๋ ์๋ค๋ฉด, registry๋ ๋ค์๊ณผ ๊ฐ์ ์ ๋ณด๋ฅผ ์๊ณ ์๋ค.
1
2
3
4
payment-service
- 10.0.1.10:8080 healthy
- 10.0.1.11:8080 healthy
- 10.0.1.12:8080 unhealthy
ํด๋ผ์ด์ธํธ๋ ๋ ์ด์ ํน์ IP๋ฅผ ํ๋์ฝ๋ฉํ์ง ์์๋ ๋๋ค. ๋์ registry๋ฅผ ํตํด ํ์ฌ ์ด์ ์๋ ์ธ์คํด์ค ๋ชฉ๋ก์ ์ป๊ฑฐ๋, registry์ ์ฐ๋๋ discovery ์ฒด๊ณ๋ฅผ ํตํด ํธ์ถ ๋์์ ์ฐพ๋๋ค.
Spring Cloud Netflix Eureka, Consul, ZooKeeper, Kubernetes Service์ DNS ๋ฑ์ด ์ด๋ฐ ์ญํ ์ ์ํํ ์ ์๋ค.
Service Discovery
Service Discovery๋ ํด๋ผ์ด์ธํธ๊ฐ ํธ์ถํ ์๋น์ค์ ์ค์ ์์น๋ฅผ ์ฐพ๋ ๊ณผ์ ์ด๋ค.
Registry๊ฐ ์๋น์ค ์์น ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๊ณณ์ด๋ผ๋ฉด, Discovery๋ ๊ทธ ์ ๋ณด๋ฅผ ์ด์ฉํด ํธ์ถ ๋์์ ์ฐพ๋ ๋ฐฉ์์ด๋ผ๊ณ ๋ณผ ์ ์๋ค.
Service Discovery ๋ฐฉ์์ ํฌ๊ฒ ๋ ๊ฐ์ง๋ก ๋๋ ์ ์๋ค.
Client-side Discovery
Client-side Discovery์์๋ ํด๋ผ์ด์ธํธ๊ฐ registry๋ฅผ ์ง์ ์กฐํํ๋ค. ํด๋ผ์ด์ธํธ๋ ์๋น์ค ์ธ์คํด์ค ๋ชฉ๋ก์ ๊ฐ์ ธ์จ ๋ค, ๊ทธ์ค ํ๋๋ฅผ ์ ํํด์ ์ง์ ํธ์ถํ๋ค.
sequenceDiagram
participant App as Order Service
participant Registry as Service Registry
participant Payment as Payment Service
App->>Registry: payment-service ์์น ์กฐํ
Registry-->>App: ์ธ์คํด์ค ๋ชฉ๋ก ๋ฐํ
App->>Payment: ์ ํํ ์ธ์คํด์ค๋ก ์ง์ ์์ฒญ
์ด ๋ฐฉ์์์๋ ํด๋ผ์ด์ธํธ๊ฐ ๋ค์ ์ฑ ์์ ๊ฐ์ง๋ค.
- registry ์กฐํ
- load balancing
- retry
- timeout
- ์ฅ์ ์ธ์คํด์ค ์ ์ธ
์ฅ์ ์ ๊ตฌ์กฐ๊ฐ ๋น๊ต์ ๋จ์ํ๊ณ , ํด๋ผ์ด์ธํธ๊ฐ ์ง์ ํธ์ถ ๋์์ ์ ํํ ์ ์๋ค๋ ์ ์ด๋ค. ํ์ง๋ง ํธ์ถ ์ ์ฑ ์ด ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ค์ด๊ฐ๊ธฐ ์ฝ๋ค.
์๋น์ค๊ฐ Java, Kotlin, Go, Node.js์ฒ๋ผ ์ฌ๋ฌ ์ธ์ด๋ก ์์ฑ๋์ด ์๋ค๋ฉด ์ธ์ด๋ณ๋ก ๋์ผํ discovery, retry, circuit breaker ์ ์ฑ ์ ๋ง์ถ๊ธฐ ์ด๋ ค์์ง๋ค.
Server-side Discovery
Server-side Discovery์์๋ ํด๋ผ์ด์ธํธ๊ฐ registry๋ฅผ ์ง์ ์กฐํํ์ง ์๋๋ค. ํด๋ผ์ด์ธํธ๋ load balancer๋ proxy๋ก ์์ฒญ์ ๋ณด๋ด๊ณ , ์ค๊ฐ ๊ณ์ธต์ด registry๋ฅผ ์กฐํํด ์ ์ ํ ์ธ์คํด์ค๋ก ๋ผ์ฐํ
ํ๋ค.
sequenceDiagram
participant App as Order Service
participant LB as Load Balancer / Proxy
participant Registry as Service Registry
participant Payment as Payment Service
App->>LB: payment-service ์์ฒญ
LB->>Registry: ์ธ์คํด์ค ์กฐํ
Registry-->>LB: ์ธ์คํด์ค ๋ชฉ๋ก ๋ฐํ
LB->>Payment: ์ ์ ํ ์ธ์คํด์ค๋ก ๋ผ์ฐํ
์ด ๋ฐฉ์์์๋ ํด๋ผ์ด์ธํธ๊ฐ ์๋น์ค ์์น๋ฅผ ๋ชฐ๋ผ๋ ๋๋ค. ํด๋ผ์ด์ธํธ๋ ๊ณ ์ ๋ endpoint๋ง ๋ฐ๋ผ๋ณด๊ณ , ์ค์ ์ธ์คํด์ค ์ ํ์ proxy๋ load balancer๊ฐ ๋ด๋นํ๋ค.
Kubernetes์ Service๊ฐ ๋ํ์ ์ธ ์๋ค. Pod IP๋ ๊ณ์ ๋ฐ๋ ์ ์์ง๋ง, ํด๋ผ์ด์ธํธ๋ payment-service ๊ฐ์ Kubernetes Service ์ด๋ฆ์ผ๋ก ํธ์ถํ๋ค. Kubernetes ๋ด๋ถ DNS์ kube-proxy๊ฐ ์ค์ Pod๋ก ํธ๋ํฝ์ ์ ๋ฌํ๋ค.
Sidecar Proxy
Service Discovery๋ง์ผ๋ก ๋ชจ๋ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง๋ ์๋๋ค. ์๋น์ค ๊ฐ ํธ์ถ์๋ discovery ์ธ์๋ ๋ง์ ๊ณตํต ๊ธฐ๋ฅ์ด ํ์ํ๋ค.
- retry
- timeout
- circuit breaker
- load balancing
- rate limiting
- mTLS
- ์ธ์ฆ/์ธ๊ฐ
- access log
- metric
- distributed tracing
์ด ๊ธฐ๋ฅ์ ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ง์ ๊ตฌํํ๋ฉด ์ค๋ณต์ด ์ปค์ง๋ค. ๋ํ ์ธ์ด๋ ํ๋ ์์ํฌ๊ฐ ๋ค๋ฅด๋ฉด ๋์ผํ ์ ์ฑ ์ ์ผ๊ด๋๊ฒ ์ ์ฉํ๊ธฐ ์ด๋ ต๋ค.
Sidecar Proxy๋ ์ด๋ฐ ๊ณตํต ๋คํธ์ํฌ ๊ธฐ๋ฅ์ ์ ํ๋ฆฌ์ผ์ด์
๋ฐ์ผ๋ก ๋ถ๋ฆฌํ๊ธฐ ์ํ ํจํด์ด๋ค.
Sidecar๋ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์ด๋์ ํจ๊ป ๋ฐฐํฌ๋๋ ๋ณด์กฐ ์ปจํ ์ด๋๋ค. Kubernetes์์๋ ๋ณดํต ํ๋์ Pod ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์ด๋์ proxy ์ปจํ ์ด๋๋ฅผ ํจ๊ป ๋๋ค.
flowchart LR
subgraph PodA[Order Pod]
AppA[Order App]
ProxyA[Sidecar Proxy]
end
subgraph PodB[Payment Pod]
ProxyB[Sidecar Proxy]
AppB[Payment App]
end
AppA --> ProxyA
ProxyA --> ProxyB
ProxyB --> AppB
์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ ํ๋ ๊ฒ์ฒ๋ผ ์์ฒญ์ ๋ณด๋ธ๋ค. ํ์ง๋ง ์ค์ ๋คํธ์ํฌ ํธ๋ํฝ์ sidecar proxy๋ฅผ ๊ฑฐ์ณ ๋๊ฐ๊ณ , ์๋ ์๋น์ค์์๋ sidecar proxy๋ฅผ ๊ฑฐ์ณ ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ๋ค์ด๊ฐ๋ค.
์ด๋ ๊ฒ ํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ ๋น์ฆ๋์ค ๋ก์ง์ ์ง์คํ๊ณ , ๋คํธ์ํฌ ๊ณตํต ๊ธฐ๋ฅ์ proxy๊ฐ ์ฒ๋ฆฌํ ์ ์๋ค.
Sidecar Bridge
Sidecar Bridge๋ ์ ํ๋ฆฌ์ผ์ด์
๊ณผ ์ธ๋ถ ์์คํ
์ฌ์ด์ ์๋ ํต์ ์ฐจ์ด๋ฅผ sidecar๊ฐ ํก์ํ๋ ํจํด์ผ๋ก ๋ณผ ์ ์๋ค.
์๋ฅผ ๋ค์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋จ์ํ HTTP API๋ง ํธ์ถํ๊ณ ์ถ์ง๋ง, ์ค์ ์ธ๋ถ ์์คํ ์ gRPC, message queue, legacy TCP protocol, ์ธ์ฆ ํ ํฐ ๊ฐฑ์ , connection pool ๊ด๋ฆฌ ๊ฐ์ ๋ณต์กํ ๋ฐฉ์์ ์๊ตฌํ ์ ์๋ค.
์ด๋ sidecar๊ฐ bridge ์ญํ ์ ํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋จ์ํ ์ธํฐํ์ด์ค๋ง ๋ฐ๋ผ๋ณผ ์ ์๋ค.
flowchart LR
App[Application] --> Bridge[Sidecar Bridge]
Bridge --> External[External System]
Sidecar Bridge๊ฐ ๋งก์ ์ ์๋ ์ญํ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- protocol ๋ณํ
- ์ธ์ฆ ํ ํฐ ๊ด๋ฆฌ
- connection pool ๊ด๋ฆฌ
- legacy system ํธ์ถ ๋ฐฉ์ ์บก์ํ
- ๊ณตํต ์๋ฌ ์ฒ๋ฆฌ
- logging, metric ์์ง
์ฆ, Sidecar Proxy๊ฐ ์ฃผ๋ก ์๋น์ค ๊ฐ ๋คํธ์ํฌ ํธ๋ํฝ ์ ์ด์ ์ด์ ์ ๋๋ค๋ฉด, Sidecar Bridge๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ํน์ ์ธ๋ถ ์์คํ ์ฌ์ด์ ํต์ ๋ณต์ก๋๋ฅผ ๊ฐ์ถ๋ ๋ฐ ์ด์ ์ ๋๋ค.
๋ ๋ค ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ์ผ๋ก ๊ณตํต ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ๋ค๋ ์ ์์๋ ๊ฐ๋ค.
Service Mesh
Sidecar Proxy๊ฐ ์๋น์ค ํ๋์ ๋คํธ์ํฌ ๊ธฐ๋ฅ์ ๋ถ๋ฆฌํ๋ ํจํด์ด๋ผ๋ฉด, Service Mesh๋ ์ฌ๋ฌ ์๋น์ค์ sidecar proxy๋ฅผ ํ๋์ ๋คํธ์ํฌ ๊ณ์ธต์ผ๋ก ๊ด๋ฆฌํ๋ ํจํด์ด๋ค.
์๋น์ค ๋ฉ์์์๋ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ ํธ๋ํฝ์ด proxy๋ฅผ ํตํด ํ๋ฅธ๋ค. ์ด proxy๋ค์ ์งํฉ์ Data Plane์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด proxy๋ค์๊ฒ ์ ์ฑ
๊ณผ ์ค์ ์ ๋ด๋ ค์ฃผ๋ ๊ด๋ฆฌ ๊ณ์ธต์ Control Plane์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
flowchart TB
Control[Control Plane]
subgraph DataPlane[Data Plane]
P1[Proxy]
P2[Proxy]
P3[Proxy]
end
Control --> P1
Control --> P2
Control --> P3
App1[Service A] --> P1
P1 --> P2
P2 --> App2[Service B]
P1 --> P3
P3 --> App3[Service C]
Service Mesh์ ํต์ฌ์ ์๋น์ค ๊ฐ ํต์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๊ฐ ์๋๋ผ ์ธํ๋ผ ๊ณ์ธต์์ ๋ค๋ฃฌ๋ค๋ ์ ์ด๋ค.
๋ํ์ ์ผ๋ก ๋ค์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
- ์๋น์ค ๊ฐ mTLS
- traffic routing
- canary release
- retry, timeout, circuit breaker
- fault injection
- rate limiting
- access log
- metric
- distributed tracing
- policy enforcement
์๋ฅผ ๋ค์ด ํน์ ์๋น์ค์ 10% ํธ๋ํฝ๋ง ์ ๋ฒ์ ์ผ๋ก ๋ณด๋ด๊ฑฐ๋, ํน์ ์์ฒญ์ timeout ์ ์ฑ ์ ์ ์ฉํ๊ฑฐ๋, ์๋น์ค ๊ฐ ํต์ ์ mTLS๋ก ์ํธํํ๋ ์ผ์ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋ ์์ ์์ด ์ฒ๋ฆฌํ ์ ์๋ค.
Istio, Linkerd, Consul Connect ๊ฐ์ ๋๊ตฌ๋ค์ด Service Mesh๋ฅผ ๊ตฌํํ๋ค.
Service Mesh๊ฐ ํด๊ฒฐํ๋ ๋ฌธ์
์๋น์ค ๋ฉ์๊ฐ ํ์ํ ์ด์ ๋ ๋จ์ํ proxy๋ฅผ ๋ถ์ด๊ธฐ ์ํด์๊ฐ ์๋๋ค. ํต์ฌ์ ์๋น์ค ๊ฐ ํต์ ์ ์ฑ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋์์ ๋ถ๋ฆฌํ๊ณ , ์ ์ฒด ์์คํ ์ ์ผ๊ด๋๊ฒ ์ ์ฉํ๊ธฐ ์ํด์๋ค.
1. ๊ณตํต ๊ธฐ๋ฅ์ ์ค๋ณต ์ ๊ฑฐ
์๋น์ค๋ง๋ค retry, timeout, circuit breaker, metric ์ฝ๋๋ฅผ ์ง์ ๋ฃ์ผ๋ฉด ์ค๋ณต์ด ๋ฐ์ํ๋ค. ๋ํ ์๋น์ค๋ง๋ค ๊ตฌํ ๋ฐฉ์์ด ์กฐ๊ธ์ฉ ๋ฌ๋ผ์ง ์ ์๋ค.
Service Mesh๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฐ ์ ์ฑ ์ proxy ๊ณ์ธต์์ ๊ณตํต์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
2. ์ธ์ด์ ํ๋ ์์ํฌ ๋ ๋ฆฝ์ฑ
MSA์์๋ ๋ชจ๋ ์๋น์ค๊ฐ ๊ฐ์ ์ธ์ด๋ก ์์ฑ๋์ง ์์ ์ ์๋ค. Java ์๋น์ค๋ Resilience4j๋ฅผ ์ฐ๊ณ , Go ์๋น์ค๋ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐ๊ณ , Node.js ์๋น์ค๋ ๋ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก retry๋ฅผ ๊ตฌํํ ์ ์๋ค.
์ด๋ฐ ๊ฒฝ์ฐ ๋์ผํ ๋คํธ์ํฌ ์ ์ฑ ์ ๋ง์ถ๊ธฐ ์ด๋ ต๋ค. Service Mesh๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ์์ ๋์ํ๋ฏ๋ก ์๋น์ค ๊ตฌํ ์ธ์ด์ ๊ด๊ณ์์ด ๊ฐ์ ์ ์ฑ ์ ์ ์ฉํ ์ ์๋ค.
3. ๊ด์ฐฐ ๊ฐ๋ฅ์ฑ
์๋น์ค๊ฐ ๋ง์์ง๋ฉด ์ฅ์ ์ง์ ์ ์ฐพ๊ธฐ ์ด๋ ต๋ค. ์์ฒญ ํ๋๊ฐ ์ฌ๋ฌ ์๋น์ค๋ฅผ ๊ฑฐ์ณ ์คํจํ์ ๋, ์ด๋์์ ์ง์ฐ์ด ์๊ฒผ๋์ง ์ ์ ์์ด์ผ ํ๋ค.
Service Mesh๋ proxy๋ฅผ ํต๊ณผํ๋ ํธ๋ํฝ์ ๊ธฐ๋ฐ์ผ๋ก metric, log, trace๋ฅผ ์์งํ ์ ์๋ค. ์ด๋ฅผ ํตํด ์๋น์ค ๊ฐ ํธ์ถ ๊ด๊ณ์ ์ง์ฐ, ์๋ฌ์จ์ ๋ ์ฝ๊ฒ ํ์ ํ ์ ์๋ค.
4. ๋ณด์
๋ด๋ถ ์๋น์ค ๊ฐ ํต์ ๋ ์์ ํ๋ค๊ณ ๊ฐ์ ํ๋ฉด ์ ๋๋ค. Service Mesh๋ ์๋น์ค ๊ฐ mTLS๋ฅผ ์ ์ฉํด ํธ๋ํฝ์ ์ํธํํ๊ณ , ์๋น์ค identity๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ๊ทผ ์ ์ฑ ์ ์ ์ดํ ์ ์๋ค.
์ ํ๋ฆฌ์ผ์ด์ ๋ง๋ค ์ธ์ฆ์ ๋ฐ๊ธ, ๊ฐฑ์ , ๊ฒ์ฆ ๋ก์ง์ ์ง์ ๊ตฌํํ์ง ์์๋ ๋๋ ์ ์ด ์ค์ํ๋ค.
Sidecar ๊ธฐ๋ฐ Service Mesh์ ํ๊ณ
Sidecar ๊ธฐ๋ฐ Service Mesh๋ ๊ฐ๋ ฅํ์ง๋ง ๋น์ฉ๋ ์๋ค. ๋ชจ๋ Pod์ proxy ์ปจํ ์ด๋๊ฐ ์ถ๊ฐ๋๊ธฐ ๋๋ฌธ์ด๋ค.
flowchart TB
subgraph Pod1[Pod 1]
App1[App]
Proxy1[Proxy]
end
subgraph Pod2[Pod 2]
App2[App]
Proxy2[Proxy]
end
subgraph Pod3[Pod 3]
App3[App]
Proxy3[Proxy]
end
๋ํ์ ์ธ ํ๊ณ๋ ๋ค์๊ณผ ๊ฐ๋ค.
- Pod๋ง๋ค proxy๊ฐ ์ถ๊ฐ๋์ด CPU, memory ์ฌ์ฉ๋์ด ์ฆ๊ฐํ๋ค.
- proxy ์ค์ ๊ณผ lifecycle์ ํจ๊ป ๊ด๋ฆฌํด์ผ ํ๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ํธ๋ํฝ์ด proxy๋ฅผ ํ ๋ฒ ๋ ๊ฑฐ์น๋ฏ๋ก latency๊ฐ ์ฆ๊ฐํ ์ ์๋ค.
- sidecar injection, upgrade, debugging์ด ์ด์ ๋ณต์ก๋๋ฅผ ๋์ธ๋ค.
- ์์ ๊ท๋ชจ์ ์๋น์ค์๋ ๊ณผํ ๊ตฌ์กฐ๊ฐ ๋ ์ ์๋ค.
๋ฐ๋ผ์ Service Mesh๋ ๊ธฐ๋ฅ์ด ๋ง๋ค๋ ์ด์ ๋ง์ผ๋ก ๋์ ํ๊ธฐ๋ณด๋ค, ์ค์ ๋ก ์๋น์ค ๊ฐ ํต์ ์ ์ฑ ์ ์ค์์์ ์ผ๊ด๋๊ฒ ๊ด๋ฆฌํด์ผ ํ๋ ์๊ตฌ๊ฐ ์๋์ง ๋จผ์ ๋ด์ผ ํ๋ค.
Sidecarless Service Mesh
Sidecarless Service Mesh๋ ์๋น์ค๋ง๋ค sidecar proxy๋ฅผ ๋ถ์ด์ง ์๊ณ , ์๋น์ค ๋ฉ์์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ค๋ ์ ๊ทผ์ด๋ค.
sidecar๋ฅผ ์์ ๋ฉด Pod๋ง๋ค proxy๋ฅผ ์คํํ์ง ์์๋ ๋๋ฏ๋ก resource overhead์ ์ด์ ๋ณต์ก๋๋ฅผ ์ค์ผ ์ ์๋ค.
flowchart LR
App1[Service A] --> NodeProxy[Node / Ambient Proxy]
App2[Service B] --> NodeProxy
NodeProxy --> App3[Service C]
Sidecarless ๋ฐฉ์์ ๊ตฌํ์ฒด๋ง๋ค ๊ตฌ์กฐ๊ฐ ๋ค๋ฅด๋ค. ์๋ฅผ ๋ค์ด node ๋จ์์ proxy๋ฅผ ์ฌ์ฉํ๊ฑฐ๋, CNI/eBPF๋ฅผ ํ์ฉํด ํธ๋ํฝ์ ๊ฐ๋ก์ฑ๊ฑฐ๋, L4์ L7 ์ฒ๋ฆฌ๋ฅผ ๋ถ๋ฆฌํ๋ ๋ฐฉ์์ด ์๋ค.
์ค์ํ ๋ฐฉํฅ์ ๊ฐ๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ Pod์ sidecar๋ฅผ ์ฃผ์ ํ์ง ์๋๋ค.
- ๊ณตํต ๋คํธ์ํฌ ์ ์ฑ ์ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ์์ ์ฒ๋ฆฌํ๋ค.
- sidecar ๊ธฐ๋ฐ mesh์ resource overhead๋ฅผ ์ค์ธ๋ค.
- mesh ๋์ ๊ณผ ์ด์ ๋ถ๋ด์ ๋ฎ์ถ๋ค.
Istio Ambient Mesh๋ sidecarless service mesh ํ๋ฆ์ ๋ํ์ ์ธ ์๋ก ๋ณผ ์ ์๋ค. ๊ธฐ์กด Istio๋ Pod๋ง๋ค Envoy sidecar๋ฅผ ์ฃผ์ ํ๋ ๋ฐฉ์์ด ์ผ๋ฐ์ ์ด์์ง๋ง, Ambient Mesh๋ sidecar ์์ด mesh ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๋ฐฉํฅ์ผ๋ก ๋ฐ์ ํ๋ค.
Sidecar Mesh์ Sidecarless Mesh ๋น๊ต
| ๊ตฌ๋ถ | Sidecar ๊ธฐ๋ฐ Mesh | Sidecarless Mesh |
|---|---|---|
| Proxy ์์น | ๊ฐ Pod ๋ด๋ถ | Node ๋๋ ๋ณ๋ ๊ณ์ธต |
| Pod ๋ณ๊ฒฝ | sidecar injection ํ์ | sidecar injection ๋ถํ์ |
| ๋ฆฌ์์ค ์ฌ์ฉ | Pod๋ง๋ค proxy ๋น์ฉ ๋ฐ์ | proxy ์๋ฅผ ์ค์ผ ์ ์์ |
| ํธ๋ํฝ ์ ์ด | ์ธ๋ฐํ L7 ์ ์ด์ ๊ฐํจ | ๊ตฌํ ๋ฐฉ์์ ๋ฐ๋ผ L4/L7 ๋ถ๋ฆฌ |
| ์ด์ ๋ณต์ก๋ | sidecar lifecycle ๊ด๋ฆฌ ํ์ | sidecar ๊ด๋ฆฌ ๋ถ๋ด ๊ฐ์ |
| ๋ํ ์ | Istio sidecar mode, Linkerd | Istio Ambient Mesh ๋ฑ |
Sidecarless Mesh๊ฐ ํญ์ ๋ ์ข์ ๊ฒ์ ์๋๋ค. Sidecar ๋ฐฉ์์ ์๋น์ค ๋จ์๋ก proxy๊ฐ ๋ถ๊ธฐ ๋๋ฌธ์ ํธ๋ํฝ ์ ์ด์ ๊ฒฉ๋ฆฌ๊ฐ ๋ช ํํ๋ค. ๋ฐ๋ฉด sidecarless ๋ฐฉ์์ ์ด์ ๋ถ๋ด์ ์ค์ผ ์ ์์ง๋ง, ๊ตฌํ์ฒด์ ์ฑ์๋์ ์ง์ ๊ธฐ๋ฅ์ ํ์ธํด์ผ ํ๋ค.
๊ฒฐ๊ตญ ์ ํ ๊ธฐ์ค์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์๋น์ค ์๊ฐ ์ผ๋ง๋ ๋ง์๊ฐ?
- ์๋น์ค ๊ฐ ๋ณด์ ์ ์ฑ ์ด ํ์ํ๊ฐ?
- L7 routing, canary, retry ๊ฐ์ ๊ธฐ๋ฅ์ด ํ์ํ๊ฐ?
- sidecar์ resource overhead๋ฅผ ๊ฐ๋นํ ์ ์๋๊ฐ?
- ์ด์ํ์ด mesh๋ฅผ ์ดํดํ๊ณ ๋๋ฒ๊น ํ ์ ์๋๊ฐ?
์ ์ฒด ํ๋ฆ ์ ๋ฆฌ
์ง๊ธ๊น์ง์ ๊ฐ๋ ์ ์๋ก ๋ณ๊ฐ์ ๊ธฐ์ ์ฒ๋ผ ๋ณด์ด์ง๋ง, ์ฌ์ค์ ๊ฐ์ ๋ฌธ์ ์์ ์ถ๋ฐํ๋ค.
MSA ํ๊ฒฝ์์ ์๋น์ค ๊ฐ ํต์ ์ ์ด๋ป๊ฒ ์์ ์ ์ด๊ณ ์ผ๊ด๋๊ฒ ๊ด๋ฆฌํ ๊ฒ์ธ๊ฐ?
์ด ์ง๋ฌธ์ ๋ํ ๋ต์ด ๋จ๊ณ์ ์ผ๋ก ๋ฐ์ ํ ํ๋ฆ์ ๋ค์๊ณผ ๊ฐ๋ค.
flowchart LR
A[Service Registry] --> B[Service Discovery]
B --> C[Sidecar Proxy]
C --> D[Service Mesh]
D --> E[Sidecarless Service Mesh]
๊ฐ ๊ฐ๋ ์ ์ญํ ์ ์งง๊ฒ ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
| ๊ฐ๋ | ์ญํ |
|---|---|
| Service Registry | ์๋น์ค ์ธ์คํด์ค ์์น์ ์ํ๋ฅผ ์ ์ฅํ๋ค. |
| Service Discovery | ํธ์ถํ ์๋น์ค ์ธ์คํด์ค๋ฅผ ์ฐพ๋๋ค. |
| Sidecar Proxy | ์๋น์ค ๊ฐ ๋คํธ์ํฌ ๊ณตํต ๊ธฐ๋ฅ์ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ์ผ๋ก ๋ถ๋ฆฌํ๋ค. |
| Sidecar Bridge | ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ธ๋ถ ์์คํ ์ฌ์ด์ ํต์ ๋ณต์ก๋๋ฅผ ๊ฐ์ถ๋ค. |
| Service Mesh | ์ฌ๋ฌ proxy๋ฅผ ํ๋์ ํต์ ๊ณ์ธต์ผ๋ก ๊ด๋ฆฌํ๋ค. |
| Sidecarless Service Mesh | sidecar ์์ด mesh ๊ธฐ๋ฅ์ ์ ๊ณตํด overhead๋ฅผ ์ค์ธ๋ค. |
๋ง๋ฌด๋ฆฌ
MSA์์๋ ์๋น์ค๊ฐ ์๊ฒ ๋๋๋ ๋งํผ ์๋น์ค ๊ฐ ํต์ ๋ฌธ์ ๊ฐ ์ปค์ง๋ค. ์ฒ์์๋ ์๋น์ค ์์น๋ฅผ ์ฐพ๊ธฐ ์ํด Service Registry์ Service Discovery๊ฐ ํ์ํด์ง๋ค. ์ดํ retry, timeout, circuit breaker, mTLS, metric, tracing ๊ฐ์ ๊ณตํต ๊ธฐ๋ฅ์ด ๋์ด๋๋ฉด Sidecar Proxy์ Service Mesh๊ฐ ๋ฑ์ฅํ๋ค.
ํ์ง๋ง Service Mesh๋ ๋ง๋ฅ ํด๊ฒฐ์ฑ ์ด ์๋๋ค. Sidecar ๊ธฐ๋ฐ mesh๋ ๊ฐ๋ ฅํ์ง๋ง resource overhead์ ์ด์ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค. ๊ทธ๋์ ์ต๊ทผ์๋ sidecarless service mesh์ฒ๋ผ mesh์ ์ฅ์ ์ ์ ์งํ๋ฉด์ ๋ถ๋ด์ ์ค์ด๋ ค๋ ๋ฐฉ์๋ ํจ๊ป ๋ฑ์ฅํ๊ณ ์๋ค.
๊ฒฐ๊ตญ ์ค์ํ ๊ฒ์ ๋๊ตฌ ์ด๋ฆ์ด ์๋๋ผ ํ์ฌ ์์คํ ์ด ๊ฒช๋ ๋ฌธ์ ๋ค. ์๋น์ค ์์น ๊ด๋ฆฌ๊ฐ ๋ฌธ์ ์ธ์ง, ์ฅ์ ์ ํ ์ฐจ๋จ์ด ๋ฌธ์ ์ธ์ง, ๋ณด์ ์ ์ฑ ์ด ๋ฌธ์ ์ธ์ง, ๊ด์ฐฐ ๊ฐ๋ฅ์ฑ์ด ๋ฌธ์ ์ธ์ง ๋จผ์ ๋ด์ผ ํ๋ค. ๊ทธ ๋ฌธ์ ๋ฅผ ๊ธฐ์ค์ผ๋ก Service Discovery, Sidecar, Service Mesh, Sidecarless Mesh ์ค ์ ์ ํ ์์ค์ ๊ตฌ์กฐ๋ฅผ ์ ํํ๋ ๊ฒ์ด ์ข๋ค.