Spring Cloud 微服务架构概览
在深入 Spring Cloud 之前,有必要先理清微服务的发展脉络。架构演进的本质,是为了解决单体应用在规模扩大后遇到的瓶颈。
从单体到微服务
单体架构的局限
早期项目通常采用单体架构:所有功能模块打包在一个应用中,共享同一数据库,模块间通过函数调用直接通信。这种方式开发、测试和部署都很简单,适合小型团队或初创期。
优点:
- 开发简单:无需处理分布式复杂性。
- 部署便捷:只需发布一个 WAR/JAR 包。
- 性能高:本地调用无网络开销。
但随着用户量和业务复杂度增加,问题接踵而至:服务器负载过高、代码耦合严重牵一发而动全身、微小故障可能导致整个系统崩溃。此时,我们需要考虑集群和分布式架构。
集群与分布式
解决上述问题主要有两个方向:横向扩展和纵向扩展。
横向扩展(集群):添加服务器,将单台机器变成多台机器的集群。通过负载均衡提高并发能力和可用性。每个节点功能相同且可相互替代。
纵向扩展(分布式):按业务拆分应用为多个项目,部署在不同节点上。服务间通过 RPC/HTTP 通信。每个节点业务功能不同,例如订单服务和支付服务独立运行。
实际生产中,两者常结合使用:先将大项目垂直拆分为独立的单体项目,再对每个项目部署多台服务器形成集群。这种混合模式统称为分布式架构。
对比总结:
- 概念:集群处理相同任务;分布式完成不同任务。
- 功能:集群节点可替代;分布式节点不可替代。
- 关系:分布式架构往往建立在集群之上。
当服务越来越多时,重复代码和功能也会增多。于是我们将通用的、被多个上层服务调用的共享服务提取成独立的基础服务,这就形成了微服务。
微服务架构
微服务强调按业务边界划分独立服务(如用户服务、商品服务),每个服务拥有自己的数据库,可独立开发、部署、扩展,技术栈异构,通常通过 REST/gRPC 或消息队列解耦。
相比于分布式架构,微服务粒度更小,更独立。分布式侧重压力分散,微服务侧重能力分散和专业分工。
核心优势:
- 敏捷开发:小团队专注单个服务,迭代快。
- 弹性扩展:热点服务单独扩容。
- 容错性:服务隔离,故障不易扩散。
- 技术多样性:不同服务可用不同语言实现。
面临的挑战:
- 运维复杂:需容器化、编排、日志聚合。
- 分布式难题:数据一致性、跨服务查询、链路追踪。
- 网络开销:远程调用延迟高于本地调用。
Spring Cloud 简介
对于 Java 技术栈的微服务项目,Spring Cloud 是目前最成熟的解决方案之一。它是一套基于 Spring Boot 的分布式系统开发工具集,简化了微服务架构中的常见问题,提供了一系列开箱即用的组件。
核心解决的问题
| 分布式系统问题 | Spring Cloud 的解决方案 | 对应组件/技术 |
|---|---|---|
| 服务发现与注册 | 动态管理服务实例上下线 |

