大家好,从今天开始,咱们开启SpringCloud系列入门科普,适合刚接触微服务、想飞快上手SpringCloud的小伙伴。第一篇先帮大家理清核心问题:SpringCloud到底是什么?它包含哪些常用组件?这些组件各自负责什么活儿?
在开始之前,先提一个前提:咱们平时开发项目,从小型单体应用(所有作用打包在一个jar/war里,部署在一台服务器),慢慢会遇到“单体膨胀”的难题——代码越写越乱、修改一个小功能要重启整个应用、并发量上来后一台服务器扛不住、团队协作开发冲突不断。这时候,微服务架构就成了解决方案,而SpringCloud,就是一套帮我们快速搭建微服务架构的“全家桶”。
一、SpringCloud是什么?
开始明确两个关键概念,避免混淆:
SpringCloud一个单一框架就是不,而是一套微服务架构的一站式解决方案,它整合了Spring生态下的多个优秀组件(大多是Spring Boot开发的),帮我们消除微服务架构中遇到的服务注册、发现、配置、熔断、网关等一系列问题。
核心定位:简化微服务编写。不用我们自己去手动整合各种组件、解决组件间的兼容性问题,SpringCloud已经帮我们封装好了,我们只应该按照规范配置,就能迅速搭建起稳定、可扩展的微服务系统。
补充:SpringCloud依赖Spring Boot,也就是说,我们研发微服务的每个模块(每个服务),都是一个Spring Boot项目,再通过SpringCloud的组件将这些独立的Spring Boot项目整合起来,形成一个完整的微服务集群。
形象点说:微服务架构是一栋“写字楼”,每个Spring Boot项目是“一间办公室”,而SpringCloud就是“写字楼的管理系统”——负责办公室的注册(哪个办公室在哪个位置)、通信(办公室之间怎么传递消息)、安保(防止某个办公室出问题影响整栋楼)、门禁(统一管理进入写字楼的请求)等所有统筹工作。
二、SpringCloud核心组件(入门必懂,重点记!)
一致的。下面重点介绍新手入门必须掌握的6个核心组件,结合“写字楼”案例帮大家理解:就是SpringCloud的组件有很多,不同版本(比如Hoxton、Greenwich等)的组件略有差异,但核心组件的作用
1. 服务注册与发现:Eureka/Consul/Nacos(核心中的核心)
核心作用:解决“微服务之间怎么找到对方”的问题。
比如写字楼里,每个办公室(微服务)都要在管理系统(注册中心)登记自己的“位置”(服务地址、端口号),其他办公室要找它办事,不用记具体地址,直接去管理系统查就行——这就是服务注册与发现。
三个常用组件的区别(入门先记重点):
Eureka:SpringCloud原生组件,轻量级,只负责服务注册与发现,目前已停止更新(但很多老项目还在使用,入门可先了解);
Consul:功能比Eureka更全,除了注册发现,还承受安装中心、服务健康检查,跨平台兼容性好;
Nacos:阿里开源的组件,目前最流行(推荐入门学习),集“服务注册发现+配置中心”于一体,管理简便、性能优秀,承受动态配置更新,适配国内场景。
重点:不管用哪个,核心逻辑都一样——微服务启动时注册到注册中心,其他微服务依据注册中心获取目标服务的地址,再进行通信。
2. 服务通信:OpenFeign
核心作用:处理“微服务之间怎么高效通信”的问题。
微服务之间是独立的,要调用对方的接口(比如订单服务要调用用户服务的“查询用户信息”接口),不能像单体应用那样直接调用方法,得通过HTTP请求通信。而OpenFeign就是帮我们简化HTTP调用的组件——它基于注解,让我们行像调用本地方法一样,调用远程微服务的接口,不用手动写HTTP请求代码。
举个例子:如果没有OpenFeign,我们要调用用户服务,需要手动创建HttpClient,设置请求地址、请求参数,还要处理响应结果;有了OpenFeign,只应该写一个接口,加上@FeignClient注解,指定要调用的服务名,再写一个和远程接口对应的方法,就能直接调用,大大简化了开发。
3. 服务熔断与降级:Hystrix/Resilience4j
核心作用:处理“微服务故障蔓延”的挑战,保护整个微服务集群的稳定性(相当于写字楼的“安保系统”)。
举个场景:订单服务调用支付服务,要是支付服务突然崩溃(比如服务器宕机、接口超时),订单服务会一直等待支付服务的响应,导致订单服务的线程被耗尽,进而订单服务也崩溃,这种故障会像多米诺骨牌一样蔓延,最终导致整个集群瘫痪——这就是“服务雪崩”。
熔断与降级的作用:
直接返回一个预设的“降级响应”(比如“支付服务暂时不可用,请稍后再试”),避免故障蔓延;就是熔断:当某个微服务的调用失败率达到一定阈值(比如50%),就自动“切断”调用链路,不再去调用这个故障服务,而
降级:当系统并发量过高(比如高峰期),为了保证核心服务(比如订单服务)的正常运行,会暂停一些非核心服务(比如用户积分查询服务),或者简化非核心服务的逻辑,优先保障核心服务的资源。
新一代的熔断降级组件,轻量级、性能好,支持更多功能,目前更推荐学习。就是补充:Hystrix是Netflix开源的,目前也停止更新;Resilience4j
4. 服务网关:Spring Cloud Gateway
核心作用:统一管理所有微服务的入口,相当于写字楼的“门禁+前台”。
微服务集群有很多服务(订单、用户、支付、商品等),每个服务都有自己的地址,如果前端(APP、网页)直接调用每个服务的地址,会有两个大难题:一是前端要记很多服务地址,维护复杂;二是没有统一的权限校验、流量控制,安全性差。
Spring Cloud Gateway的核心功能(入门必记):
路由转发:前端只必须调用网关的地址,网关根据请求路径,将请求转发到对应的微服务(比如请求/gateway/order转发到订单服务,/gateway/user转发到用户服务);
权限校验:在网关层统一拦截请求,校验用户身份(比如Token校验),不用在每个微服务里单独写权限校验代码;
流量控制:限制每个服务的调用频率,防止某个服务被高并发击垮;
日志监控:统一记录所有请求的日志,方便问题排查。
补充:早期的网关组件是Zuul,Spring Cloud Gateway是Zuul的替代者,性能更好、帮助异步,目前是SpringCloud网关的首选。
5. 配置中心:Spring Cloud Config/Nacos
核心作用:应对“微服务配备统一管理”的难题。
配置不统一,容易出现错误(比如某个服务的配置和其他服务不一致,导致调用失败)。就是微服务集群有很多服务,每个服务都有自己的配置文件(application.yml),如果每个服务的配置都单独维护,会有两个大问题:一是修改调整麻烦(比如要修改数据库地址,需要逐个修改每个服务的配置文件,再重启服务);二
设置中心的作用:将所有微服务的配置文件统一存储在配备中心(比如Git仓库、Nacos服务器),微服务启动时,从配置中心获取自己的配置;当设置需要修改时,只需要在配置中心修改一次,所有微服务就能自动获取最新配置(无需重启服务)。
补充:和注册中心一样,Nacos也集成了配置中心的功能,比Spring Cloud Config更便捷、更灵活,入门推荐优先学习Nacos。
6. 服务链路追踪:Sleuth+Zipkin
核心作用:解决“微服务调用链路排查”的问题。
微服务集群中,一个请求可能会经过多个微服务(比如用户下单请求:前端→网关→订单服务→支付服务→商品服务),如果某个环节出现问题(比如请求超时、报错),很难快速定位是哪个服务出了疑问——这时候就需要链路追踪。
Sleuth:负责给每个请求打上“追踪标识”(比如Trace ID、Span ID),记录请求经过的每一个微服务、每个环节的耗时;
Zipkin:负责收集Sleuth产生的追踪数据,以可视化的方式(图表)展示出来,我们可以利用Zipkin的界面,清晰地看到请求经过的服务链路、每个服务的调用耗时,快速定位故障点。
三、核心组件关联总结(新手必看)
用一个完整的用户下单场景,串联所有核心组件,帮大家理清逻辑:
所有微服务(订单、用户、支付、商品)启动时,都会注册到Nacos(注册中心);
前端发送下单请求,首先经过Spring Cloud Gateway(网关),网关校验用户Token(权限校验),然后根据请求路径,将请求转发到订单服务;
订单服务需要调用用户服务(查询用户信息)、商品服务(查询商品库存)、支付服务(创建支付订单),通过OpenFeign发起远程调用(调用前会从Nacos获取目标服务的地址);
如果支付服务调用失败,Resilience4j会触发熔断机制,返回降级响应,避免订单服务崩溃;
所有服务的配置(比如数据库地址、Nacos地址),都统一存储在Nacos(配置中心),修改配置时,无需重启服务;
整个下单请求的链路数据,由Sleuth收集,Zipkin可视化展示,若出现请求超时,可通过Zipkin迅速定位故障服务。
四、入门注意事项
先学Spring Boot,再学SpringCloud:SpringCloud是基于Spring Boot的,不熟悉Spring Boot的话,很难理解SpringCloud的组件用法;
不用一开始学所有组件:入门先掌握“Nacos(注册+配置)+OpenFeign(通信)+Spring Cloud Gateway(网关)+Resilience4j(熔断降级)”这四个核心组件,就能搭建一个基础的微服务架构;
版本对应很重要:SpringCloud和Spring Boot的版本有严格的对应关系(比如Spring Boot 2.6.x 对应 Spring Cloud Hoxton.SR12),版本不匹配会出现各种兼容性问题,入门时建议先确定好版本。
五、下一篇预告
这一篇我们搞懂了SpringCloud的核心定位和常用组件,下一篇将手把手教大家搭建环境:Spring Boot+Nacos入门,实现第一个微服务的注册与发现,新手也能跟着做!
如果这篇文章对你有支援,欢迎点赞、收藏、关注,后续持续更新SpringCloud入门干货,一起从0到1掌握微服务制作~
评论区许可留言:你在学习SpringCloud时遇到的第一个问题是什么?一起交流解决!
浙公网安备 33010602011771号