微服务基础概念

微服务是一种软件架构风格,将单一应用程序划分为一组小型服务,每个服务运行在独立的进程中,通过轻量级机制(如HTTP/REST)通信。每个服务围绕业务能力构建,可独立部署、扩展和技术异构。

微服务的核心特征包括:

  • 单一职责原则:每个服务专注于单一功能
  • 自治性:服务可独立开发、部署和扩展
  • 去中心化治理:允许使用不同技术栈
  • 容错设计:服务故障隔离
  • 演进式设计:支持逐步重构

分布式系统基础

分布式系统由多台计算机通过网络连接,协调完成共同任务。核心特性包括:

  • 并发性:多节点并行处理
  • 缺乏全局时钟:节点间时间同步困难
  • 部分故障:系统可能部分失效
  • 透明性:对用户隐藏分布式特性

分布式系统的CAP定理指出,任何分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)中的两项。

服务通信机制

微服务间常用通信方式:

  • 同步通信:REST(HTTP+JSON)、gRPC(基于HTTP/2)
  • 异步通信:消息队列(Kafka/RabbitMQ)、事件驱动
  • 服务发现:Consul/Eureka/Nacos实现动态服务定位
  • API网关:统一入口处理路由、认证和限流

RESTful接口示例:

@RestController
@RequestMapping("/orders")
public class OrderController {
    @GetMapping("/{id}")
    public Order getOrder(@PathVariable String id) {
        // 实现逻辑
    }
}

数据一致性方案

分布式事务处理模式:

  • 两阶段提交(2PC):协调者管理事务提交过程
  • 补偿事务(TCC):Try-Confirm-Cancel模式
  • Saga模式:长事务分解为本地事务序列
  • 事件溯源:通过事件日志重建状态

Saga实现示例:

def create_order_saga():
    try:
        reserve_items()
        process_payment()
        complete_order()
    except Exception:
        compensate_payment()
        restore_inventory()

容错与弹性设计

常见容错模式:

  • 熔断器模式:Hystrix/Sentinel实现故障隔离
  • 限流:令牌桶/漏桶算法控制流量
  • 降级:故障时提供基本功能
  • 重试:指数退避策略处理临时故障

熔断器配置示例:

hystrix.ConfigureCommand("my_command", hystrix.CommandConfig{
    Timeout:               1000,
    MaxConcurrentRequests: 100,
    ErrorPercentThreshold: 25,
})

服务监控与可观测性

关键监控维度:

  • 指标(Metrics):Prometheus收集QPS、延迟等数据
  • 日志(Logging):ELK栈实现集中日志管理
  • 追踪(Tracing):Jaeger/Zipkin实现分布式追踪
  • 健康检查:Kubernetes存活/就绪探针

PromQL查询示例:

http_requests_total{status=~"5.."} rate(5m)

容器化与编排技术

部署方案:

  • Docker:轻量级容器打包应用
  • Kubernetes:自动化部署、扩展和管理
  • Service Mesh:Istio/Linkerd处理服务间通信
  • CI/CD:GitOps实现持续交付

Kubernetes部署描述示例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: order-service
spec:
  replicas: 3
  selector:
    matchLabels:
      app: order
  template:
    metadata:
      labels:
        app: order
    spec:
      containers:
      - name: order
        image: registry/order:v1.2
        ports:
        - containerPort: 8080

领域驱动设计应用

微服务划分原则:

  • 界限上下文:识别业务领域边界
  • 充血模型:业务逻辑集中在领域层
  • 防腐层:隔离外部系统影响
  • CQRS模式:读写分离架构

领域事件示例代码:

public class OrderCreatedEvent : IDomainEvent 
{
    public Guid OrderId { get; }
    public DateTime OccurredOn { get; }
    public OrderCreatedEvent(Guid orderId) 
    {
        OrderId = orderId;
        OccurredOn = DateTime.UtcNow;
    }
}
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐