Spring Cloud 微服务核心概念

发布时间:2026/5/27 10:27:31

Spring Cloud 微服务核心概念 1 什么是微服务微服务不是“把服务做小”而是一种按业务拆分的架构思想把单体应用按领域边界如用户、订单、支付拆成多个高内聚、低耦合、独立进程、独立数据库、独立部署的小服务服务间用 HTTP/gRPC 等轻量协议通信技术栈也可自由选择Java/Go/Python 各用各的。分布式系统Distributed System一种将系统组件部署在多个物理节点上通过网络协同工作的架构范式。微服务Microservices一种基于业务领域边界构建的分布式架构风格强调服务自治、独立演进与松耦合协作。1.1 为什么需要微服务直击单体痛点单体架构的四大死穴部署改一点发全部→ 上线风险高扩容扩一个全跟着涨→ 资源浪费严重代码多人抢一库→ 合并冲突多、构建等待久技术技术绑死→ 想换框架重写半边天。微服务对症下药✅ 独立部署✅ 按需扩容✅ 团队自治✅ 技术解耦1.2 微服务不是银弹用对时机才有效适合微服务团队 ≥5人代码 ≥10万行业务高频迭代需独立扩缩容或技术异构坚持单体更优小系统如内部管理、MVP验证、低流量、业务稳定、人力有限——简单即可靠。⚠️ 过早微服务 自建复杂度却无实际收益。1.3 单体 vs 微服务维度单体架构微服务架构代码一个仓库越长越难管多个仓库各司其职边界清晰部署全量发布牵一发而动全身某服务更新其他照常运行扩容整体加机器大炮打蚊子哪儿忙扩哪儿如秒杀只扩订单服务故障一处崩全站挂隔离故障降级兜底全局可用演进初期快后期维护成本爆炸初期基建重长期迭代更快更稳技术一套技术栈难以替换“合适场景用合适语言”灵活演进运维简单管1个→ 但不可持续复杂管N个中间件→ 但可标准化自动化适合谁小项目、MVP、验证阶段中大型系统、高频迭代、多团队协作场景1.4 微服务的组成及选型这里比较全可以参考哈组件类型推荐实现核心能力一句话概括1. 服务注册与发现Nacos自动感知服务上下线实时同步健康实例列表2. 配置中心Nacos集中存储 实时推送配置实现配置与代码分离3. API 网关Spring Cloud Gateway统一入口路由 权限校验 流量控制 协议转换4. 服务间通信OpenFeignHTTPDubboRPCFeign像调本地方法一样发 HTTP 请求Dubbo高性能远程过程调用内置负载均衡与容错5. 负载均衡器Spring Cloud LoadBalancer客户端自动选择可用服务实例支持自定义策略6. 熔断降级 限流Sentinel实时拦截异常流量自动熔断故障服务防止雪崩7. 分布式事务Seata保证跨服务操作要么全部成功要么全部回滚AT/TCC/Saga8. 消息队列Apache RocketMQ异步解耦 削峰填谷 事务消息保障最终一致性9. 分布式追踪SkyWalking一键追踪请求全链路定位慢调用与异常节点10. 服务网格Istio无需改代码实现服务间安全通信、流量治理与可观测性12. 日志管理ELK Stack一站式收集、搜索、分析和可视化所有服务日志13. 容器和编排Docker Kubernetes标准化运行环境 自动部署、扩缩容、自我修复14. CI/CDGitLab CI / GitHub Actions代码提交后自动构建、测试、打包、部署到环境15. 监控和报警Prometheus Grafana Alertmanager自动采集指标 可视化看板 异常自动通知邮件/Webhook16. 弹性和容错K8s Sentinel Chaos Mesh故障自愈 流量兜底 主动验证系统抗压能力1.5 生产级选型Spring Cloud Alibaba 基础选型入门 → 中小型项目组件类型推荐方案说明注册 配置Nacos唯一推荐一体化能力完备无优质平替API 网关Spring Cloud Gateway性能优、生态好、扩展性强服务通信OpenFeign默认Dubbo高并发/低延迟场景HTTP 简洁RPC 高效熔断限流Sentinel规则丰富、实时生效、国产深度优化链路追踪SkyWalking首选Zipkin轻量备选开源免费、探针稳定、UI 友好日志管理Loki Grafana推荐ELK日志量 10GB/天轻量高效、云原生友好 进阶选型中大型 / 高并发分布式事务Seata AT 模式通用TCC 备案强一致性关键链路消息队列RocketMQ高可靠、事务消息、阿里系深度适配缓存Redis ClusterNacos 动态配置缓存策略如过期时间、降级开关监控告警Prometheus Grafana统一指标采集对接 Sentinel/SkyWalking服务网格Istio仅当 Kubernetes 成熟且需精细化流量治理时引入 配置最佳实践避坑要点Nacos按环境 服务名分组敏感配置启用Nacos AES 加密。Sentinel规则存储用Nacos 推模式持久化动态生效禁用内存拉模式。Gateway路由写lb://service-name严禁硬编码 IP/端口。版本管理全程使用spring-cloud-alibaba-dependenciesBOM 控制版本禁止单独升级子组件。2 微服务核心组件2.1 服务注册 / 发现 服务注册流程注册请求发起服务提供者启动时通过Nacos SDK向 Nacos 服务端发送注册请求携带关键元数据服务名serviceName、主机 IPip 、服务端口port 、健康检查路径healthChecker.path如/actuator/health元数据持久化与同步Nacos 服务端将实例信息持久化写入 MySQL保障高可用与可恢复性同时基于Distro 协议去中心化、最终一致性协议异步广播至集群其他节点实现跨节点元数据同步。健康状态维护心跳机制提供者以默认 5 秒间隔向服务端发送心跳服务端判定逻辑超过15 秒未收到心跳→ 标记该实例为UNHEALTHY不健康连续30 秒无心跳→ 从内存及持久层自动剔除该实例。 服务发现流程首次查询服务消费者启动时向 Nacos 服务端发起GET /nacos/v1/ns/instance/list?serviceNamexxx请求指定目标服务名。服务端响应策略Nacos 优先从本地内存缓存非实时查库中获取该服务下所有healthy true的实例列表返回结果包含 IP、端口、权重、集群名等字段支持负载均衡路由。客户端本地缓存优化消费者 SDK 自动缓存服务列表默认每 30 秒拉取一次更新可配置nacos.client.refresh.interval后续远程调用直接读取本地缓存避免频繁网络请求显著降低延迟与服务端压力。 实际应用Spring Cloud Alibaba基础教程使用Nacos实现服务注册与发现Spring Cloud Alibaba基础教程Nacos的集群部署2.2 配置中心 核心流程环节方式关键行为优势初始化拉Pull客户端启动时全量拉取配置并本地缓存快速就绪保障启动一致性监听变更长轮询Pull默认每30s 发起一次 HTTP 长连接请求服务端挂起响应直至超时或有变更低延迟秒级、低开销非高频 polling变更通知推Push配置更新时服务端立即唤醒对应长轮询请求返回true变更标识实时触达避免轮询空转生效流程拉 刷新客户端收到通知后主动拉取新配置 → 更新本地缓存 → 触发RefreshScope或ConfigurationProperties自动刷新零重启生效支持热更新 配置分级模型Namespace / Group / DataID层级定位命名建议目的Namespace环境维度dev/test/prod⚠️ 强隔离物理级数据分片不同库表前缀杜绝跨环境污染Group业务维度user-service/order-service同一微服务所有配置归属统一组便于批量管理与权限控制DataID功能维度application.yml/redis.yml/mq.yml按配置语义拆分支持独立发布、灰度、回滚与审计 常见误解澄清误解真相❌ “我把application.yml放进项目Nacos 就能自动同步”Nacos不扫描、不读取、不上传你的本地文件它只响应你明确声明要拉取的dataIdgroupnamespace。❌ “Nacos 会把我的Value(${xxx})变量自动托管”不会必须显式在bootstrap.yml中配置spring.cloud.nacos.config.data-id且该dataId对应的配置已在 Nacos 中存在变量才能从 Nacos 加载。❌ “Nacos 能替代 Spring Boot 的所有配置机制”不能它只接管spring.cloud.nacos.config.*指定的部分server.port、logging.level等基础配置仍走本地application.yml。 实际应用Spring Cloud Alibaba基础教程使用Nacos作为配置中心2.3 API 网关 网关的核心功能特性能力一句话本质关键特性权限控制“谁可以访问”——统一鉴权守门员JWT/OAuth2 解析 RBAC 权限校验非法请求直拒401/403路由“请求发给谁”——智能路径分发器基于路径、Header、Method 等谓词匹配动态绑定服务名如user-service负载均衡“发给哪个实例”——客户端自主选节点网关内置 Spring Cloud LoadBalancer实时感知实例健康状态支持轮询/权重/响应时间加权本质一句话网关 统一入口 安全闸机 智能导航 流量调度员所有能力均在客户端侧闭环完成零侵入后端服务。 “客户端负载均衡” 和 “服务端负载均衡” 的分水岭类型特征✅客户端 LB决策在应用进程内、与注册中心联动、策略可编程、面向微服务语义❌服务端 LB决策在外部中间件、与注册中心解耦、策略静态、仅面向网络地址1. 负载均衡永远作用于“被调用方”下游服务而非“调用方”自身。2. 调用方只负责「从多个候选实例中选一个」不向自己发起转发。3. 网关 或是 业务服务使用的都是客户端负载均衡。 路由配置组成配置项说明示例路由 IDid路由的唯一标识user-service-route路由目标uri路由的目标地址•http://表示固定地址•lb://表示根据服务名负载均衡lb://user-servicehttp://mockapi.com路由断言predicates判断请求是否匹配该路由的规则集合多个断言为AND 关系见下表路由过滤器filters对匹配请求的请求或响应进行增强处理如增删 Header、限流、重试等见下表 内置路由断言Predicates列表名称说明示例After是某个时间点后的请求- After2037-01-20T17:42:47.789-07:00[America/Denver]Before是某个时间点之前的请求- Before2031-04-13T15:14:47.43308:00[Asia/Shanghai]Between是某两个时间点之间的请求- Between2037-01-20T17:42:47.789-07:00[America/Denver], 2037-01-21T17:42:47.789-07:00[America/Denver]Cookie请求必须包含指定名称和正则匹配值的 Cookie- Cookiechocolate, ch\.pHeader请求必须包含指定名称和正则匹配值的 Header- HeaderX-Request-Id, \dHost请求 Host 头必须匹配指定域名支持通配符- Host**.somehost.org,**.anotherhost.orgMethod请求方式必须是指定 HTTP 方法- MethodGET,POSTPath请求路径必须匹配指定 Ant 风格路径模式- Path/red/{segment},/blue/**Query请求必须包含指定参数名支持可选正则值- Queryname, Jack- QuerynameRemoteAddr请求者 IP 必须在指定 CIDR 范围内- RemoteAddr192.168.1.1/24Weight按权重将流量分发到某组路由需配合Group使用- Weightgroup1, 8 内置路由过滤器工厂Filters种类Spring Cloud Gateway 提供了31 种不同的路由过滤器工厂。例如名称说明AddRequestHeader给当前请求添加一个请求头RemoveRequestHeader移除请求中的一个请求头AddResponseHeader给响应结果中添加一个响应头RemoveResponseHeader从响应结果中移除一个响应头RequestRateLimiter限制请求的流量需集成 Redis 其他常用过滤器还包括Retry,StripPrefix,SetPath,DedupeResponseHeader,SaveSession,SetStatus等共 31 种详见官方文档。 实际应用Spring Cloud构建微服务架构服务网关Spring Cloud Gateway2.4 服务通信 微服务调用方式速查表方式类型协议是否声明式负载均衡注册中心集成适用场景LoadBalancerClient底层 APIHTTP❌✅手动选实例✅需精细控制选例逻辑RestTemplateRibbon模板类HTTP❌✅自动✅简单 HTTP 调用已不推荐新项目使用FeignClient声明式客户端HTTP✅✅自动✅接口化开发、HTTP 服务间调用DubboReferenceRPC 代理TCP二进制✅✅自动✅高性能、低延迟、强一致内部调用✅一句话选型建议写 REST API → 选FeignClient写核心链路/高并发内部服务 → 选DubboReference学原理或特殊调度 → 用LoadBalancerClientRestTemplate Ribbon仅用于兼容老系统。RPC 与 HTTP 的核心区别维度RPC如 DubboHTTP如 REST/Feign定位远程过程调用协议让远程调用像本地方法一样应用层通信协议通用、无状态、基于请求-响应模型传输层通常基于TCP长连接、二进制流基于TCP但语义上是应用层协议明文/JSON/XML数据格式二进制序列化Hessian2、Kryo、Protobuf→ 小、快、语言相关文本为主JSON/XML→ 可读、通用、跨语言友好性能⚡ 高低序列化开销、连接复用、无 HTTP 头开销 相对低文本解析慢、Header 冗余、短连接默认耦合度⚠️ 较高强依赖接口定义、序列化协议、注册中心✅ 较低URL JSON 即可调用浏览器/Fiddler 直接测典型框架Dubbo、gRPC、ThriftSpringRestTemplate、Feign、Axios、curl一句话理解HTTP 是“打电话说普通话”——通用、易懂、谁都能接RPC 是“打电话说密语专用耳机”——更快更省但双方得装同款APP、约定暗号。 声明式 vs 命令式维度声明式命令式怎么写写接口/注解如FeignClient写调用代码如restTemplate.getForEntity(url, ...)谁干活框架自动代理 AOP 增强开发者手动拼 URL、选实例、发请求关注点业务逻辑What实现细节How推荐场景✅ 主流开发简洁、安全、可维护⚠️ 调试、学习原理、特殊定制 本质声明式 “定义契约框架实现”命令式 “手写流程自己掌控”。 Dubbo 为何比 Feign 更适合高并发场景对比维度DubboFeign默认 HTTP通信协议TCP 长连接自定义Dubbo协议低开销HTTP/1.1 短连接或复用文本头JSON 开销大序列化支持高效二进制序列化Kryo/FST/Hessian默认 JSON文本、反射多、体积大、解析慢线程模型Netty 异步非阻塞 事件驱动高吞吐同步阻塞依赖OkHttp连接池易线程阻塞调用模式原生支持异步CompletableFuture、回调默认同步异步需手动封装或集成 WebFlux/RSocket服务治理内置负载均衡、熔断、路由、动态配置、元数据中心依赖 Spring Cloud 生态如 LoadBalancer、Resilience4j能力分散且较重 实际应用Spring Cloud构建微服务架构服务消费者LoadBalancerClient、RestTemplate、FeignClient、DubboSpring Cloud Alibaba基础教程Dubbo2.5 熔断限流核心功能维度关键能力一句话本质典型场景流控限流QPS/线程/热点/关联/Warm Up“流量守门员”按策略动态拦截超额请求秒杀抢购、突发爬虫、接口防刷熔断降级慢调用/异常比例/异常数触发“系统保险丝”自动熔断故障依赖防止雪崩第三方服务超时、数据库抖动授权控制黑白名单基于origin“访问安检口”按来源租户/IP/Token精准放行或拦截多租户隔离、API 网关鉴权系统防护CPU/Load/RT/QPS/线程数全局阈值“兜底防火墙”单机或集群维度防系统性过载高并发下保核心链路可用集群流控Token Server 统一配额调度“全局水龙头”突破单机限制实现集群总流量硬约束大促期间保障资源公平分配实时监控秒级 QPS/通过量/拦截量/RT/成功率“数字仪表盘”毫秒级指标驱动可观测 快速定位性能瓶颈分析、告警联动簇点链路自动生成调用拓扑 入出口流量“调用地图”可视化依赖关系识别瓶颈与环路微服务治理、容量规划三大设计哲学本质总结零侵入仅需SentinelResource注解规则全靠控制台配置强实时秒级指标采集、毫秒级响应、内存保留5分钟长期可对接 Prometheus全维度覆盖单机→集群→系统→链路→授权五层防护体系。代码实现SentinelResource(value xxx)是唯一必写代码所有流控策略QPS/线程/热点/WarmUp/关联等均通过控制台配置生效零侵入、动态生效、无需重启应用。场景代码示例说明限流后返回友好提示blockHandler handleBlock 对应方法public String handleBlock(Long id, BlockException e) { return 限流中; }异常降级非限流fallback fallbackMethod 对应方法public String fallbackMethod(Long id) { return 服务降级; }不捕获BlockException解析调用方用于授权规则实现RequestOriginParser接口从 Header/IP/Token 提取origin供「授权规则」黑白名单使用FeignClient客户端Feign Nacos Sentinelimportcom.alibaba.csp.sentinel.annotation.SentinelResource;importcom.alibaba.csp.sentinel.slots.block.BlockException;importorg.springframework.cloud.openfeign.FeignClient;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.PathVariable;importjava.util.Map;// Feign 自动从 Nacos 发现 user-service 实例需 application.yml 配置 nacos discoveryFeignClient(nameuser-service)publicinterfaceUserClient{SentinelResource(valuefeign-user-get,// 资源名控制台规则匹配依据blockHandlerblockHandler,// 流控/熔断触发fallbackfallback,// 远程异常触发如 500、超时fallbackClassUserClientFallback.class// 静态 fallback 类)GetMapping(/api/user/{id})MapString,ObjectgetUser(PathVariable(id)Longid);}// ← 静态 fallback 类必须 public static 方法无 Spring 依赖classUserClientFallback{publicstaticMapString,ObjectblockHandler(Longid,BlockExceptione){returnMap.of(id,id,status,BLOCKED,reason,e.getClass().getSimpleName());}publicstaticMapString,Objectfallback(Longid,Throwablet){returnMap.of(id,id,status,FALLBACK,error,t.getMessage());}}✅ 调用方式不变userClient.getUser(123)→ 自动具备✅ Nacos 服务发现负载均衡✅ Sentinel QPS/线程数限流✅ 慢调用/异常比例熔断✅ 全链路降级兜底DubboReference客户端Dubbo Nacos Sentinelimportcom.alibaba.csp.sentinel.annotation.SentinelResource;importcom.alibaba.csp.sentinel.slots.block.BlockException;importorg.apache.dubbo.config.annotation.DubboReference;importorg.springframework.stereotype.Service;importjava.util.Map;ServicepublicclassUserService{// Dubbo 自动从 Nacos 订阅 user-service 提供者需 application.yml 配置 nacos registryDubboReferenceprivatecom.example.demo.service.UserServiceuserService;SentinelResource(valuedubbo-user-get,// 资源名独立于 Feign可同名也可区分blockHandlerblockHandler,fallbackfallback,fallbackClassUserServiceFallback.class)publicMapString,ObjectfetchUser(Longid){returnuserService.getUser(id);// ← 原始 RPC 调用Sentinel 在其外层织入保护}// 静态 fallback 方法同上staticclassUserServiceFallback{publicstaticMapString,ObjectblockHandler(Longid,BlockExceptione){returnMap.of(id,id,status,DUBBO_BLOCKED,reason,e.getClass().getSimpleName());}publicstaticMapString,Objectfallback(Longid,Throwablet){returnMap.of(id,id,status,DUBBO_FALLBACK,error,t.getMessage());}}}✅ 调用方式不变userService.fetchUser(123)→ 自动具备✅ Nacos 服务发现Dubbo provider 列表✅ Sentinel 对Dubbo consumer 端的全维度防护方法级资源✅ 支持DubboReference(checkfalse)避免启动报错与 Sentinel fallback 协同更健壮 实际应用Spring Cloud Alibaba基础教程Sentinel2.6 分布式事务Spring Cloud Alibaba基础教程Seata2.7 消息队列Spring Cloud Alibaba基础教程RocketMQ3 Mall4j商城实战mall4j 商城实战

相关新闻