核心概念

微服务是一种架构风格,将单一应用程序拆分为一组小型服务,每个服务运行在独立进程中,服务之间通过轻量级通信机制(通常是HTTP RESTful API)进行协作。每个微服务围绕特定业务能力构建,可以由独立团队开发、部署和扩展。

核心特点

1. 服务独立性

  • 独立部署:每个服务可单独部署,不影响其他服务
  • 独立开发:不同团队可使用不同技术栈
  • 独立数据库:每个服务管理自己的数据库

2. 分布式治理

  • 去中心化:数据管理、技术选型都去中心化
  • 服务自治:每个服务有明确的业务边界
  • 容错设计:服务故障不应导致整体系统崩溃

3. 技术特性

// 微服务典型结构
@SpringBootApplication
@EnableDiscoveryClient  // 服务注册
@EnableFeignClients     // 服务调用
public class UserServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(UserServiceApplication.class, args);
    }
}

微服务 vs 单体架构

维度 单体架构 微服务架构
部署 整体部署 独立部署
扩展 整体扩展 按需扩展
技术栈 统一技术栈 可异构
故障隔离 牵一发动全身 故障隔离
开发复杂度 简单 较高
运维复杂度 简单 较高

微服务架构挑战

1. 分布式复杂性

  • 服务调用:需要服务注册发现、负载均衡
  • 数据一致性:分布式事务处理复杂
  • 链路追踪:调用链长,问题定位困难

2. 运维成本

# 需要完善的基础设施
infrastructure:
  - 服务注册中心: Eureka/Nacos
  - 配置中心: Config Server/Apollo
  - 网关: Gateway/Zuul
  - 链路追踪: Sleuth/Zipkin
  - 容器编排: Kubernetes/Docker

3. 组织架构要求

  • 康威定律:系统架构与组织结构相匹配
  • 需要DevOps文化支撑
  • 团队自治能力要求高

适用场景

适合使用微服务

  • 大型复杂应用:业务边界清晰,团队规模较大
  • 高并发场景:需要灵活扩展特定服务
  • 快速迭代需求:不同业务模块独立演进
  • 多团队协作:跨团队并行开发

不适合使用微服务

  • 小型项目:业务简单,团队人数少
  • 初创项目:业务边界不清晰
  • 技术储备不足:缺乏分布式系统经验

实施建议

1. 服务拆分原则

// 按业务能力拆分
- 用户服务 (UserService)
- 订单服务 (OrderService)
- 支付服务 (PaymentService)
- 库存服务 (InventoryService)

// 单一职责原则
@Service
public class UserService {
    // 只负责用户相关业务
    public User getUserById(Long id) { }
    public void updateUser(User user) { }
}

2. 渐进式演进

  • 从单体开始,逐步拆分
  • 先拆分边界清晰的模块
  • 避免过度拆分(纳米服务)

3. 技术选型

<!-- SpringCloud技术栈 -->
<dependencies>
    <!-- 服务注册发现 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    
    <!-- 服务调用 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    
    <!-- 熔断降级 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
    </dependency>
</dependencies>

面试总结

微服务是将复杂应用拆分为独立部署的小型服务的架构风格。核心优势是服务独立、灵活扩展、技术异构,但也带来分布式系统的复杂性。选择微服务需要权衡团队能力、业务复杂度和技术成本,不是所有项目都适合微服务架构。SpringCloud提供了一整套微服务解决方案,包括服务注册、配置管理、负载均衡、熔断降级等核心组件。