什麼是 Cloud Native?
Cloud Native 不只是把應用程式搬到雲端,而是一種全新的軟體設計哲學。Cloud Native Computing Foundation (CNCF) 定義它為:
一種構建和運行應用程式的方法,充分利用雲端計算模型的優勢。
這包含四個核心要素:
- 容器化(Containerization):以 Docker 為基礎,封裝應用與依賴
- 動態編排(Dynamic Orchestration):Kubernetes 自動管理容器生命週期
- 微服務(Microservices):將大型應用拆解為獨立服務
- 持續交付(Continuous Delivery):自動化建置、測試與部署
為什麼選擇 Cloud Native?
傳統的單體架構(Monolithic Architecture)雖然簡單,但隨著業務增長,會遇到幾個瓶頸:
# 傳統部署:全量更新
scp app.war user@server:/opt/tomcat/webapps/
# Cloud Native:滾動更新
kubectl rollout restart deployment/my-app
Cloud Native 架構帶來的優勢:
| 面向 | 傳統架構 | Cloud Native |
|---|---|---|
| 擴展性 | 垂直擴展 | 水平擴展 |
| 部署頻率 | 週/月 | 分鐘/小時 |
| 故障恢復 | 手動介入 | 自動重啟 |
| 資源利用 | 固定分配 | 按需調度 |
Docker 容器化實戰
一個簡潔的 Dockerfile 範例,展示 Node.js 應用的容器化:
# 多階段建置,縮小最終映像大小
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
FROM node:20-alpine AS runtime
WORKDIR /app
COPY --from=builder /app/node_modules ./node_modules
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
使用多階段建置(Multi-stage Build)可以有效降低映像大小,從數百 MB 壓縮到幾十 MB。
Kubernetes 核心物件
Kubernetes 通過幾個關鍵物件管理容器化應用:
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-service
labels:
app: api-service
spec:
replicas: 3
selector:
matchLabels:
app: api-service
template:
metadata:
labels:
app: api-service
spec:
containers:
- name: api
image: my-registry/api:v1.2.0
ports:
- containerPort: 8080
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "500m"
memory: "512Mi"
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 10
periodSeconds: 5
微服務通訊模式
微服務之間的通訊主要有兩種模式:
同步通訊:REST / gRPC
// 使用 gRPC 進行服務間通訊
import * as grpc from '@grpc/grpc-js';
import { OrderServiceClient } from './generated/order_grpc_pb';
const client = new OrderServiceClient(
'order-service:50051',
grpc.credentials.createInsecure()
);
非同步通訊:Event-Driven
// 使用 Kafka 發布領域事件
await producer.send({
topic: 'order.created',
messages: [{
key: order.id,
value: JSON.stringify({
orderId: order.id,
userId: order.userId,
amount: order.total,
timestamp: new Date().toISOString(),
}),
}],
});
小結
Cloud Native 是現代軟體工程的趨勢,掌握容器化、編排和微服務這三大支柱,能讓你的應用具備更高的可用性、可維護性與擴展能力。
下一篇文章我們將深入探討 Service Mesh(服務網格) 的概念,以及 Istio 在微服務架構中的應用。