核心概念
微服务是一种架构风格,将单一应用程序拆分为一组小型服务,每个服务运行在独立进程中,服务之间通过轻量级通信机制(通常是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提供了一整套微服务解决方案,包括服务注册、配置管理、负载均衡、熔断降级等核心组件。