云原生与系统架构
第一章:云计算基础
1.1 服务模式
| 模式 | 全称 | 提供内容 | 典型产品 |
| IaaS | 基础设施即服务 | 虚拟机、存储、网络 | AWS EC2, 阿里云 ECS |
| PaaS | 平台即服务 | 运行时、数据库、中间件 | Heroku, Google App Engine |
| SaaS | 软件即服务 | 完整应用 | Gmail, Slack, 飞书 |
| FaaS | 函数即服务 | 事件驱动计算 | AWS Lambda, 阿里云函数计算 |
1.2 核心架构原则
- 弹性伸缩:根据负载自动扩缩容
- 高可用:多副本、多区域容灾
- 松耦合:微服务独立部署、独立扩展
- 无状态:计算节点不保存会话状态
- 不可变基础设施:容器镜像代替手工配置
第二章:容器与 Kubernetes
2.1 Docker 核心概念
# 多阶段构建
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --production
COPY . .
RUN npm run build
FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
EXPOSE 3000
HEALTHCHECK CMD wget -q --spider http://localhost:3000/health || exit 1
CMD ["node", "dist/main.js"]
# 常用命令
docker build -t myapp:1.0 .
docker run -d -p 3000:3000 --name myapp myapp:1.0
docker compose up -d
docker logs -f myapp
docker exec -it myapp sh
2.2 Kubernetes 架构
┌─────────────────────────────────────────────────┐
│ Control Plane │
│ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │
│ │ API │ │ Scheduler│ │ Controller Manager│ │
│ │ Server │ │ │ │ │ │
│ └──────────┘ └──────────┘ └──────────────────┘ │
│ ┌──────────┐ │
│ │ etcd │ (集群状态存储) │
│ └──────────┘ │
└─────────────────────────────────────────────────┘
│
┌────┴────┐
│ Worker │ ┌──────┐ ┌──────┐ ┌──────┐
│ Node │ │ Kubelet│ │kube- │ │Container│
│ │ │ │ │proxy │ │Runtime │
│ ┌────┐ │ └──────┘ └──────┘ └──────┘
│ │Pod │ │
│ │Pod │ │
│ │Pod │ │
│ └────┘ │
└─────────┘
2.3 K8s 核心资源
# Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: myapp:1.0
ports:
- containerPort: 3000
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "500m"
memory: "512Mi"
livenessProbe:
httpGet:
path: /health
port: 3000
initialDelaySeconds: 10
periodSeconds: 30
---
# Service
apiVersion: v1
kind: Service
metadata:
name: myapp-svc
spec:
selector:
app: myapp
ports:
- port: 80
targetPort: 3000
type: ClusterIP
---
# Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: myapp-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: myapp.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: myapp-svc
port:
number: 80
2.4 Helm 包管理
# 安装应用
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install my-redis bitnami/redis --set auth.password=secret
# 自定义 values
helm install myapp ./charts/myapp -f values-prod.yaml
# 升级与回滚
helm upgrade myapp ./charts/myapp --set image.tag=2.0
helm rollback myapp 1
helm history myapp
第三章:微服务架构
3.1 服务拆分原则
- 单一职责:每个服务只负责一个业务领域
- 业务边界:按 DDD 限界上下文划分
- 数据自治:每个服务拥有独立数据库
- 接口契约:通过 API 契约通信
3.2 API 网关
# Kong / Nginx 网关配置
upstream user_service {
server user-svc:8080;
server user-svc:8081;
}
server {
listen 443 ssl;
server_name api.example.com;
location /api/users/ {
proxy_pass http://user_service;
proxy_set_header X-Request-ID $request_id;
rate_limit 100r/s;
}
location /api/orders/ {
proxy_pass http://order_service;
}
}
3.3 服务通信
| 方式 | 协议 | 适用场景 |
| REST | HTTP/JSON | 外部 API、CRUD |
| gRPC | HTTP/2 + Protobuf | 内部服务、高性能 |
| 消息队列 | AMQP/Kafka | 异步解耦、事件驱动 |
| WebSocket | WS | 实时推送 |
3.4 分布式事务
Saga 模式:
订单服务 → 创建订单 → 库存服务 → 扣减库存
↓ 失败
订单服务 ← 取消订单 ← 库存服务 ← 回滚库存
第四章:可观测性
4.1 三大支柱
| 支柱 | 工具 | 说明 |
| 日志 (Logging) | ELK, Loki | 事件记录 |
| 指标 (Metrics) | Prometheus + Grafana | 时序数据监控 |
| 追踪 (Tracing) | Jaeger, Zipkin | 请求链路追踪 |
4.2 Prometheus 监控
# prometheus.yml
scrape_configs:
- job_name: 'myapp'
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
action: keep
regex: true
# 应用指标暴露
from prometheus_client import Counter, Histogram, generate_latest
REQUEST_COUNT = Counter('http_requests_total', 'Total requests', ['method', 'status'])
REQUEST_LATENCY = Histogram('http_request_duration_seconds', 'Request latency')
@app.middleware("http")
async def metrics_middleware(request, call_next):
start_time = time.time()
response = await call_next(request)
REQUEST_COUNT.labels(request.method, response.status_code).inc()
REQUEST_LATENCY.observe(time.time() - start_time)
return response
@app.get("/metrics")
def metrics():
return Response(content=generate_latest(), media_type="text/plain")
4.3 日志最佳实践
import structlog
logger = structlog.get_logger()
# 结构化日志
logger.info(
"order_created",
order_id="ORD-123",
user_id="U-456",
amount=99.9,
items=3,
)
# 输出: {"event": "order_created", "order_id": "ORD-123", ...}
第五章:CI/CD 流水线
5.1 GitHub Actions
name: CI/CD Pipeline
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.11'
- run: pip install -r requirements.txt
- run: pytest --cov=app --cov-report=xml
build:
needs: test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: docker/setup-buildx-action@v3
- uses: docker/build-push-action@v5
with:
push: true
tags: registry.example.com/myapp:${{ github.sha }}
deploy:
needs: build
runs-on: ubuntu-latest
steps:
- run: |
kubectl set image deployment/myapp \
myapp=registry.example.com/myapp:${{ github.sha }}
学习资源