Skip to content

🌐 分布式与微服务

分布式系统概述

分布式系统是由多个独立的计算机组成的系统,通过网络通信协调工作。

核心挑战:网络不可靠、时钟不一致、分区与延迟、最终一致性、可观测性

微服务架构

微服务特点

  • 独立部署:每个服务可以独立部署
  • 技术异构:可以使用不同的技术栈
  • 服务治理:服务注册、发现、配置管理

Spring Cloud

java
// 服务注册
@SpringBootApplication
@EnableEurekaClient
public class UserServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(UserServiceApplication.class, args);
    }
}

// 服务调用
@RestController
public class UserController {
    @Autowired
    private RestTemplate restTemplate;
    
    @GetMapping("/users/{id}")
    public User getUser(@PathVariable Long id) {
        return restTemplate.getForObject("http://user-service/users/" + id, User.class);
    }
}

分布式事务

两阶段提交(2PC)

  • 准备阶段
  • 提交阶段

Saga 模式

  • 补偿事务
  • 分布式锁
Saga 编排(图示):
OrderCreated → ReserveStock → CreatePayment → Confirm →
若失败:CancelPayment → ReleaseStock → MarkOrderCanceled
java
// 事务消息(伪代码)
@Transactional
public void createOrder(){
  orderRepo.save(PENDING);
  mq.send("order.created", orderId); // 失败则回滚
}

服务治理与观测

配置、注册、熔断、限流

注册发现(Eureka/Nacos/Consul)
配置中心(Spring Cloud Config)
熔断/隔离(Resilience4j:超时/重试/断路/舱壁)
限流(网关/服务端)
java
@Retry(name = "remoteA")
@CircuitBreaker(name = "remoteA")
public User callRemote(){ /* ... */ }

日志/指标/追踪(可观测性三件套)

日志:结构化,TraceId 贯穿
指标:QPS、P95、错误率、依赖成功率
追踪:OpenTelemetry/Zipkin,网关注入 B3/W3C Trace Context

API 网关与安全

客户端 → API 网关(认证/限流/路由/聚合)→ 各微服务
yaml
# Spring Cloud Gateway 片段
routes:
  - id: order
    uri: http://order-service
    predicates: [ Path=/api/orders/** ]
    filters: [ StripPrefix=1 ]

存储与缓存

关系库(强一致) + 缓存(读多写少) + 消息队列(解耦/削峰)
缓存失效策略:旁路/写穿/写回;防击穿/穿透/雪崩

部署与弹性

容器化 + 编排(K8s)
滚动升级/金丝雀/蓝绿
HPA:基于 CPU/QPS/自定义指标扩缩容

下一步

掌握了分布式与微服务后,可以继续学习:


💡 提示:分布式系统开发需要掌握服务治理、分布式事务、消息队列等技术