1. 什么是SpringCloud
简单来说:SpringCloud是基于SpringBoot的微服务治理框架,它整合了市面上优质的微服务组件,帮我们快速搭建稳定、可靠、高可用的分布式系统。
如果把微服务比作一栋写字楼,每个微服务就是一间办公室,而SpringCloud的各类组件就是写字楼的水电、安保、导航、调度系统,保障整栋大楼正常运转。
2. SpringCloud常用核心组件详解
我按照微服务开发流程,给大家分类整理组件,逻辑清晰,方便记忆。
2.1服务注册与发现:Nacos(注册中心)
核心作用:微服务的通讯录
在微服务架构中,会有很多服务(订单服务、用户服务、支付服务),服务之间需要互相调用。Nacos就是注册中心,所有服务启动后,都会主动把自己的IP、端口注册到Nacos中。
当A服务需要调用B服务时,直接去Nacos查询B服务的地址即可,无需硬编码写死地址。
补充知识点 :早期旧版本使用Eureka,目前已停止维护,企业开发首选Nacos,同时兼容注册中心+配置中心双重功能。
2.2 负载均衡:LoadBalancer
核心作用:请求分发器,避免服务拥堵
为了保证服务高可用,生产环境中一个服务通常会部署多台服务器。当大量请求访问服务时,LoadBalancer负责将请求均匀分发到不同服务实例上。
常见策略:轮询、随机、加权轮询,有效避免单台服务器压力过大、服务宕机的问题。
补充知识点:旧版使用Ribbon,现已淘汰,SpringCloud官方推荐LoadBalancer作为新一代负载均衡组件。
2.3 声明式服务调用:OpenFeign
✅核心作用:简化服务之间的HTTP调用
没有Feign之前,服务之间调用需要写复杂的HTTP请求代码,繁琐且冗余。OpenFeign采用声明式调用,只需要定义接口、添加注解,就能像调用本地方法一样调用远程服务,代码简洁优雅。
并且Feign内置集成了LoadBalancer,自动实现负载均衡,是日常开发使用率最高的组件之一。
2.4 熔断降级:Sentinel
核心作用:系统的保险丝,防止服务雪崩
微服务最大痛点:服务连环宕机。比如订单服务调用支付服务,若支付服务卡顿、宕机,大量请求堆积,会拖垮订单服务,进而影响整个系统,这就是服务雪崩。
Sentinel专门解决这个问题,提供熔断、降级、限流、热点监控功能:
-
熔断:下游服务异常,直接断开调用,避免请求堆积;
-
降级:流量高峰期,关闭非核心接口,保证核心业务可用;
-
限流:限制接口每秒请求次数,防止服务器被压垮。
补充知识点:早期组件Hystrix现已停更,目前企业主流使用轻量级、可视化更强的Sentinel。
2.5 API网关:Spring Cloud Gateway
核心作用:系统的统一大门、门卫
所有客户端(APP、小程序、网页)的请求,不会直接访问后端微服务,而是先经过Gateway网关。它是整个系统的唯一入口,承担以下职责:
-
路由转发:将不同请求分发到对应的服务;
-
权限校验:统一登录鉴权、拦截非法请求;
-
限流过滤:拦截恶意请求、高频请求;
-
跨域处理:统一解决后端跨域问题。
相比于老旧的Zuul网关,Gateway基于Netty实现,异步非阻塞,性能更强,是目前行业标配。
2.6 统一配置中心:Nacos / Config
核心作用:远程配置管理器
传统开发中,配置文件写在本地,修改配置需要重启服务,十分麻烦。配置中心可以将所有服务的配置(数据库地址、密钥、开关参数)统一放到云端管理。
修改配置无需重启服务,实时动态刷新,方便运维管控。目前优先使用Nacos(简单易用),Spring Cloud Config适合复杂定制化场景。
2.7 分布式事务:Seata
核心作用:保证跨服务数据一致性,解决分布式事务问题
这是微服务开发最头疼、面试必考的组件。单体项目中,数据库事务可以保证数据要么全部成功、要么全部回滚;但微服务中,一次业务要调用多个服务(例如下单:扣库存+扣余额+生成订单),不同服务连接不同数据库。
如果其中某一个服务报错,就会出现:有的数据入库、有的数据回滚,产生数据不一致的严重问题。
Seata 是阿里开源的分布式事务解决方案,专门用来搞定跨服务事务一致性,常用三种模式:
-
AT模式(常用):无侵入、自动回滚,绝大多数企业项目首选;
-
TCC模式:手动编码、补偿回滚,适合高并发复杂业务;
-
SAGA模式:长事务流程,适合超长链路业务。
补充知识点 :旧方案有LCN、GTS,现在全部淘汰,目前行业统一标准就是Seata。金融、支付、电商必须使用,保证资金、订单数据绝对一致。
3. 组件关系总结
这里给大家做一个直白的串联,快速理清组件协作流程:
-
用户请求先经过Gateway网关,做鉴权、过滤;
-
网关根据路由转发至对应服务;
-
所有服务注册在Nacos,统一管理配置;
-
服务之间通过OpenFeign 调用,LoadBalancer实现负载分发;
-
Sentinel实时监控服务状态,熔断降级保护系统;
-
Seata 保证跨服务数据事务一致,防止数据错乱。