返回文章列表
Cloud

Cloud Native 架構入門:容器化與微服務的核心概念

深入探索 Cloud Native 架構的基礎知識,從容器化技術到微服務設計模式,帶你了解如何在現代雲端環境中構建彈性且可擴展的應用程式。

什麼是 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 在微服務架構中的應用。