一、微服务架构核心概念
1. 微服务 vs 单体应用
| 特性 | 单体应用 | 微服务 | 
|---|---|---|
| 部署 | 一个包、一次部署 | 多个独立服务,可独立部署 | 
| 模块耦合 | 高耦合 | 低耦合 | 
| 技术栈 | 单一 | 可多样化 | 
| 扩展 | 整体扩展 | 服务级别扩展 | 
| 容错 | 整体宕机 | 单个服务宕机,不影响全局 | 
| 数据管理 | 共享数据库 | 每个服务独立数据库 | 
2. 微服务特点
- 独立性:每个服务独立运行和部署。
 - 自治性:服务自己管理数据和业务逻辑。
 - 弹性伸缩:可根据负载独立扩容。
 - 可观测性:日志、监控和链路追踪清晰。
 - 服务间通信:一般通过 REST、gRPC、消息队列。
 
二、Java 微服务技术栈(深度解析)
1. 核心开发框架
- 
Spring Boot:快速搭建独立服务,内置 Tomcat。
 - 
Spring Cloud:提供微服务常用组件:
- Eureka:服务注册与发现
 - Ribbon:客户端负载均衡
 - Feign:声明式 REST 调用
 - Gateway / Zuul:API 网关
 - Config:配置中心
 - Hystrix / Resilience4j:熔断、降级
 
 
2. 数据与持久化
- 
每个微服务拥有自己的数据库,避免服务间耦合。
 - 
使用 Spring Data JPA / MyBatis 简化 ORM 操作。
 - 
分布式事务解决方案:
- Saga 模式:基于事件的异步事务
 - TCC(Try-Confirm-Cancel):显式三步事务
 
 
3. 消息与异步通信
- 
消息队列(MQ)用于异步解耦:
- RabbitMQ / Kafka / RocketMQ
 
 - 
常用于:
- 事件驱动架构(EDA)
 - 异步处理(订单支付、库存更新)
 
 
4. 配置与治理
- 
配置中心:Spring Cloud Config、Nacos
 - 
服务治理:
- 动态注册和发现
 - 健康检查(Health Check)
 - 负载均衡(Ribbon / Gateway)
 - 熔断器与限流(Resilience4j)
 
 
5. 容器化与运维
- 
Docker:打包微服务镜像
 - 
Kubernetes:编排和自动伸缩
 - 
CI/CD:Jenkins/GitHub Actions/GitLab CI 实现自动部署
 - 
监控与日志:
- ELK(Elasticsearch + Logstash + Kibana)
 - Prometheus + Grafana
 - 链路追踪:Sleuth + Zipkin 或 SkyWalking
 
 
三、微服务设计原则
- 
单一职责:每个服务只做一件事。
 - 
去中心化:服务自治、数据独立。
 - 
轻量通信:REST/gRPC/消息队列,尽量避免重型 RPC。
 - 
容错与弹性:
- 熔断、限流、防雪崩
 - 重试机制
 
 - 
可观测性:
- 集中日志
 - 指标监控
 - 分布式链路追踪
 
 
四、Java微服务典型架构
           +--------------------+
           |    API Gateway     |
           +--------------------+
                   |
   +---------------+----------------+
   |               |                |
+------+       +--------+        +------+
| User |       | Order  |        |Payment|
+------+       +--------+        +------+
   |               |                |
   v               v                v
 User DB        Order DB          Payment DB
        1. API 网关
- 统一入口,负责路由、鉴权、限流。
 - 技术:Spring Cloud Gateway / Zuul
 
2. 服务注册与发现
- 服务启动注册到 Eureka/Consul。
 - 服务调用通过服务名解析实际地址。
 
3. 服务调用
- 同步调用:REST + Feign + Ribbon
 - 异步调用:消息队列 Kafka / RabbitMQ
 
五、典型代码示例(Spring Boot + Spring Cloud)
1. 服务注册中心(Eureka Server)
            
            
              java
              
              
            
          
          @SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}
        2. 服务提供者(User Service)
            
            
              java
              
              
            
          
          @SpringBootApplication
@EnableEurekaClient
@RestController
public class UserServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(UserServiceApplication.class, args);
    }
    @GetMapping("/user/{id}")
    public String getUser(@PathVariable String id) {
        return "User-" + id;
    }
}
        3. 服务消费者(Order Service 调用 User Service)
            
            
              java
              
              
            
          
          @FeignClient("user-service")
public interface UserClient {
    @GetMapping("/user/{id}")
    String getUser(@PathVariable("id") String id);
}
@RestController
public class OrderController {
    @Autowired
    private UserClient userClient;
    @GetMapping("/order/{id}")
    public String getOrder(@PathVariable String id) {
        return "Order-" + id + ", " + userClient.getUser("1");
    }
}
        六、微服务实践注意事项
- 
服务拆分策略:
- 按业务领域拆分(DDD)
 - 避免过度拆分(导致分布式复杂性高)
 
 - 
容错设计:
- 使用 Resilience4j 或 Spring Retry 实现熔断和重试
 - 降级策略
 
 - 
分布式事务:
- Saga 或 TCC,避免跨服务锁
 
 - 
监控和追踪:
- 集中日志 + 分布式链路追踪
 
 - 
安全性:
- OAuth2 / JWT 认证
 - 网关统一鉴权