Appearance
🌐 分布式与微服务
分布式系统概述
分布式系统是由多个独立的计算机组成的系统,通过网络通信协调工作。
核心挑战:网络不可靠、时钟不一致、分区与延迟、最终一致性、可观测性微服务架构
微服务特点
- 独立部署:每个服务可以独立部署
- 技术异构:可以使用不同的技术栈
- 服务治理:服务注册、发现、配置管理
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 → MarkOrderCanceledjava
// 事务消息(伪代码)
@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 ContextAPI 网关与安全
客户端 → API 网关(认证/限流/路由/聚合)→ 各微服务yaml
# Spring Cloud Gateway 片段
routes:
- id: order
uri: http://order-service
predicates: [ Path=/api/orders/** ]
filters: [ StripPrefix=1 ]存储与缓存
关系库(强一致) + 缓存(读多写少) + 消息队列(解耦/削峰)
缓存失效策略:旁路/写穿/写回;防击穿/穿透/雪崩部署与弹性
容器化 + 编排(K8s)
滚动升级/金丝雀/蓝绿
HPA:基于 CPU/QPS/自定义指标扩缩容下一步
掌握了分布式与微服务后,可以继续学习:
- Java 面试与工程能力 - 提升面试能力
💡 提示:分布式系统开发需要掌握服务治理、分布式事务、消息队列等技术
