【SpringCloud】回顾微服务
文章目录
- 微服务
- 微服务思想
- 微服务是什么
- 单体架构:
- 微服务架构
- 微服务的技术栈
- 微服务需要考虑的地方
- 客户端如何访问这些服务
- 每个服务之间如何通信
- 同步和异步的区别:
- 服务多的情况,如何实现
- 服务挂了,如何解决?
- SpringCloud应当如何学习
- 流程:
- 回顾之前
- 微服务有哪些框架
- 为什么选择SpringCloud作为微服务架构
- 与 Spring 生态无缝集成
- 提供完整的微服务解决方案
- 社区活跃,生态成熟
- 支持多种部署与云原生
- 灵活可扩展
- 降低分布式系统复杂性
- 注意事项
- 总结
微服务
参考学习的博客笔记:
微服务架构 - 老_张 - 博客园
微服务思想
微服务架构(Microservice Architecture)是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。你可以将其看作是在架构层次而非获取服务的;
将功能分解到离散的各个服务当中,从而降低系统的耦合性,并提供更加灵活的服务支持。
概念:把一个大型的单个应用程序和服务拆分为数个甚至数十个的支持微服务,它可扩展单个组件而不是整个的应用程序堆栈,从而满足服务等级协议。
定义:围绕业务领域组件来创建应用,这些应用可独立地进行开发、管理和迭代。在分散的组件中使用云架构和平台式部署、管理和服务功能,使产品交付变得更加简单。
本质:用一些功能比较明确、业务比较精练的服务去解决更大、更实际的问题。
微服务是什么
分布式系统笔记:【SpringBoot】13、Dubbo、Zookeeper
单体架构:

将所有的内容放到一起就是单体架构。
微服务架构

彻底的解耦,最后拆到最后更加的简单明了,就是微服务;
将每一个业务拆分出来,独立成为一个服务,每一个服务的组合称之为微服务架构;
- Dubbo使用的是RPC调用的方式;
- SpringCloud使用的是经典的HTTP协议;
微服务的技术栈
服务开发:SpringBoot、Spring、SpringMVC
服务调用:RPC、gRPC
服务部署:Docker
··· ···
微服务需要考虑的地方
- 客流量,服务器吞吐量怎么处理
- 客户端如何访问这些服务
- 每个服务之间如何通信
- 服务挂了,如何解决?
客户端如何访问这些服务
在后台N个服务和UI之间一般会一个代理或者叫API Gateway(Api网关);
作用:
- 提供统一服务入口,让微服务对前台透明;
- 聚合后台的服务,节省流量,提升性能;
- 提供安全,过滤,流控等API管理功能;

每个服务之间如何通信
调用服务有两种,一种是同步调用,一种是异步调用;
同步调用分为HTTP(Rest、SpringCloud)和RPC(Dubbo);
异步调用 (Kafka, Notify),消息队列都归属于异步调用;

同步和异步的区别:
- 同步调用比较简单,一致性强,但是容易出调用问题,性能体验上也会差些,特别是调用层次多的时候。RESTful和RPC的比较也是一个很有意思的话题。
Restful和RPC的区别:
- REST基于HTTP,更容易实现,更容易被接受,服务端实现技术也更灵活些,各个语言都能支持,同时能跨客户端,对客户端没有特殊的要求,只要封装了HTTP的SDK就能调用,所以相对使用的广一些。
- RPC传输协议更高效,安全更可控,特别在一个公司内部,如果有统一个的开发规范和统一的服务框架时,他的开发效率优势更明显些。
- 异步消息的方式在分布式系统中有特别广泛的应用,他既能减低调用服务之间的耦合,又能成为调用之间的缓冲,确保消息积压,不会冲垮被调用方,同时能保证调用方的服务体验,不至于被后台性能拖慢。
- 使用异步调用的代价是一致性的减弱,需要接受数据最终一致性;还有就是后台服务一般要实现幂等性,因为消息发送出于性能的考虑一般会有重复(保证消息的被收到且仅收到一次对性能是很大的考验);
- 使用异步调用必须引入一个独立的broker(中间件);
服务多的情况,如何实现
在微服务架构中,一般每一个服务都是有多个拷贝,来做负载均衡。
一个服务随时可能下线,也可能应对临时访问压力增加新的服务节点。服务之间如何相互感知?服务如何管理?
- 基本都是通过 zookeeper 等类似技术做服务注册信息的分布式管理。
- 服务调用者通过 zookeeper 寻址,根据可定制算法, 找到一个服务,还可以将服务信息缓存在本地以提高性能。
- 当服务下线时,zookeeper 会发通知给服务客户端。
**客户端做:**优点是架构简单,扩展灵活,只对服务注册器依赖。缺点是客户端要维护所有调用服务的地址,有技术难度,一般大公司都有成熟的内部框架支持,比如Dubbo。
**服务端做:**优点是简单,所有服务对于前台调用方透明,一般在小公司在云服务上部署的应用采用的比较多。
服务挂了,如何解决?
Monolithic方式开发一个很大的风险是“把所有鸡蛋放在一个篮子里”。而分布式最大的特性就是“网络是不可靠的”。
通过微服务拆分能降低这个风险,系统是由一系列的服务调用链组成的,我们必须确保任一环节出问题都不至于影响整体链路。
- 重试机制
- 限流
- 熔断机制
- 负载均衡
- 降级(本地缓存)
SpringCloud应当如何学习
流程:
Spring >> SpringMVC >> SpringBoot >> SpringCloud
回顾之前
Spring是JavaEE的轻量级开发框架,使用IOC和AOP,集成了JDBC、ORM、MVC等便于开发;
SpringMVC是一种MVC的设计模式
SpringBoot是一个框架,基于Spring,提供开箱即用的组件,目的是为了提高开发效率。
SpringCloud是一个生态,分布式应用程序,所以Spring Cloud就是为了让分布式应用程序编写更方便,更容易而提供的一组基础设施,它的核心是Spring框架,利用Spring Boot的自动配置,力图实现最简化的分布式应用程序开发。
基础技术栈:
- JavaSE
- 数据库
- 前端
- servlet
- http
- Mybatis
- Spring
- SpringMVC
- SpringBoot
- Dubbo,Zookeeper,分布式
- Maven,git
- Ajax,json
微服务有哪些框架
SpringCloud的生态
- SpringCloud Netflix
- 一站式解决方案
- Apache Dubbo+Zookeeper
- 半自动,需要整合其他人
- SpringCloud Alibaba
- 国产化的NetFlix
为什么选择SpringCloud作为微服务架构
选择 Spring Cloud 作为微服务架构的实现方案,主要基于以下几个关键原因:
与 Spring 生态无缝集成
- Spring Cloud 基于 Spring Boot 构建,天然兼容 Spring 生态(如 Spring MVC、Spring Data、Spring Security 等)。
- 开发者可以利用熟悉的注解、配置方式和编程模型,降低学习和迁移成本。
- 自动配置、起步依赖(starter)等特性极大简化了微服务的搭建过程。
提供完整的微服务解决方案
Spring Cloud 提供了一整套开箱即用的微服务组件,覆盖微服务架构的核心需求:
| 功能模块 | 对应组件(部分) | 作用说明 |
|---|---|---|
| 服务注册与发现 | Eureka、Consul、Nacos、Zookeeper | 服务自动注册与发现,实现服务间动态调用 |
| 负载均衡 | Ribbon(已进入维护)、Spring Cloud LoadBalancer | 客户端负载均衡 |
| 服务调用 | OpenFeign、RestTemplate | 声明式或编程式远程调用 |
| 熔断与容错 | Resilience4j(Hystrix 已停更) | 防止雪崩,提高系统韧性 |
| API 网关 | Spring Cloud Gateway、Zuul(旧) | 统一入口、路由、过滤、限流 |
| 配置中心 | Spring Cloud Config、Nacos、Apollo | 集中管理配置,支持动态刷新 |
| 分布式追踪 | Sleuth + Zipkin | 链路追踪,便于问题定位 |
| 消息总线 | Spring Cloud Bus | 配置变更广播、事件驱动 |
| 安全控制 | Spring Cloud Security + OAuth2 | 微服务安全认证与授权 |
社区活跃,生态成熟
- Spring Cloud 由 Pivotal(现 VMware)主导,拥有庞大的开发者社区和丰富的文档资源。
- 与主流中间件(如 Redis、Kafka、RabbitMQ、MySQL 等)集成良好。
- 大量企业(包括国内互联网公司)在生产环境中使用,经过实践验证。
支持多种部署与云原生
- 支持传统虚拟机、容器(Docker)、Kubernetes 等部署方式。
- 与 Spring Boot Actuator 结合,提供健康检查、指标监控等能力,便于对接 Prometheus、Grafana 等监控系统。
- 越来越多地与 Kubernetes 原生服务(如 Service、ConfigMap)集成(通过 Spring Cloud Kubernetes)。
灵活可扩展
- Spring Cloud 采用“插件化”设计,开发者可根据需求选择组件,也可替换为其他实现(如用 Nacos 替代 Eureka)。
- 支持自定义扩展点,满足复杂业务场景。
降低分布式系统复杂性
微服务架构带来诸多挑战(如网络延迟、服务治理、数据一致性等),Spring Cloud 通过封装底层复杂性,让开发者更专注于业务逻辑。
注意事项
- Spring Cloud 版本迭代较快,部分组件(如 Hystrix、Zuul、Ribbon)已进入维护或弃用状态,需关注官方推荐替代方案(如 Resilience4j、Gateway、LoadBalancer)。
- 在超大规模或对性能极度敏感的场景下,需评估其性能开销,必要时结合 gRPC、Service Mesh(如 Istio)等技术。
总结
Spring Cloud 是 Java 生态中最成熟、最全面的微服务开发框架之一。它通过标准化、模块化的方式,显著降低了构建、部署和运维微服务系统的门槛,特别适合基于 Java 技术栈的企业级应用。
如果使用 Spring Boot 构建应用,并计划向微服务演进,Spring Cloud 是一个非常自然且高效的选择。

