微服务组件讲解

发布时间:2026/7/29 7:33:29
微服务组件讲解 对于spring cloud组件在市面上其实有很多套组件我们之前公司中使用的是阿里巴巴配套的组件也就是下面这5大组件。服务注册与配置中心Nacos。负载均衡Ribbon。服务调用Feign。服务保护Sentinel。API网关Gateway。它们在微服务架构的作用是这样的。不同微服务想要相互通信首先得将服务进行注册并拉取这个时候就可以使用nacos实现并且nacos还可以管理每个服务之间的配置当每个微服务成功的注册之后此时就能够通过feign实现微服务之间的通信如果整个微服务架构比较大对于每个服务而言可能部署了多台实例此时就需要使用到ribbon实现负载均衡如果微服务中某个服务挂了此时就需要使用sentinel对其进行降级处理让整个链路不会被影响到最后是gateway它其实相当于整个微服务架构的大门当用户发起请求时则会通过gateway进行校验以及转发。nacos服务注册与发现主要包含三个核心功能服务注册、服务发现和服务状态监控。我们项目中采用了 Nacos 作为服务注册中心它是 Spring Cloud Alibaba 体系中的核心组件也是目前企业微服务开发的主流选择。- 服务注册服务提供者启动时将自己的信息如服务名称、IP、端口、版本号等注册到 Nacos。- 服务发现消费者从 Nacos 获取目标服务的实例列表并利用负载均衡算法如 Ribbon选择一个可用服务进行调用。- 服务监控服务提供者定期向 Nacos 发送心跳以报告健康状态如果 Nacos 在一定时间内未接收到心跳会先将该服务实例标记为不健康超时后则将其从注册中心剔除避免消费者调用异常服务。“相比早期的 EurekaNacos 不仅能实现服务注册发现还集成了配置中心功能可一站式解决服务地址管理和配置动态刷新问题部署运维更便捷也更适配国内企业的实际开发场景。”ribbon概念Ribbon 的主要作用是客户端负载均衡。它通常不直接暴露给开发者调用而是作为底层组件被集成在RestTemplate、Feign 等客户端中对服务调用实现透明化的负载均衡。例如当使用 Feign 调用某个微服务时如果该服务部署了多个实例Feign 会依赖 Ribbon 从服务发现组件如 Nacos、Eureka获取实例列表并按照配置的策略如轮询、随机、权重响应选择一个实例发起请求。 程序员可以通过配置来定制 Ribbon 的策略如配置文件或RibbonClient但不需要手动编写负载均衡的代码逻辑。Ribbon提供了多种负载均衡策略包括RoundRobinRule简单的轮询策略。WeightedResponseTimeRule根据响应时间加权选择服务器。RandomRule随机选择服务器。ZoneAvoidanceRule区域感知的负载均衡优先选择同一区域中可用的服务器。自定义Ribbon负载均衡策略有两种方式创建一个类实现IRule接口这将定义全局的负载均衡策略。在客户端配置文件中指定特定服务调用的负载均衡策略这将仅对该服务生效。sentinel概念Sentinel 是阿里巴巴开源的服务保护组件在微服务架构中承担“流量防卫兵”的角色。它以流量为切入点提供流量控制、熔断降级、系统负载保护等多种功能保障服务的稳定性。为什么需要 Sentinel在微服务调用链中如果某个下游服务响应变慢或故障调用方如果不做任何保护线程会一直阻塞等待最终导致调用方自身的资源被耗尽进而引发雪崩效应整个链路崩溃。Sentinel 的核心作用就是防止这种级联故障。Sentinel 的核心功能流量控制流控限制某个接口的 QPS 或并发线程数超过阈值直接拒绝请求防止突发流量压垮服务。例如秒杀场景下限制“下单接口”每秒只能处理 1000 个请求多余的请求直接返回“系统繁忙”。支持多种流控模式直接、关联、链路。支持多种流控效果快速失败、Warm Up预热、匀速排队。熔断降级当某个依赖服务错误率过高或响应时间过长时暂时切断对该服务的调用快速返回降级响应防止级联故障。熔断器有三种状态关闭 → 打开 → 半开 → 关闭。熔断后经过一段“休眠时间”会放行少量请求试探服务是否恢复半开状态。如果恢复则关闭熔断器否则继续熔断。热点参数限流针对带有特定参数的请求进行精细化流控。例如对同一个商品 ID 的请求进行限流防止单个热卖商品拖垮整个系统。系统自适应保护从系统整体维度Load、CPU 使用率、平均 RT、入口 QPS 等进行保护当系统负载过高时自动限流防止系统崩溃。与 Nacos 集成Sentinel 的流控、熔断规则可以持久化到 Nacos 配置中心实现规则的动态配置和实时生效无需重启服务。Sentinel 与 Feign 的集成Sentinel 可以与 Feign 无缝集成。在FeignClient注解中指定 fallback 类当远程调用失败或被熔断时自动执行降级逻辑javaFeignClient(value order-service, fallback OrderClientFallback.class) public interface OrderClient { GetMapping(/order/{id}) Result getOrderById(PathVariable(id) Long id); }与其他组件的协作组件与 Sentinel 的协作关系Nacos规则持久化到 Nacos实现动态配置FeignFeign 调用失败时触发 Sentinel 的降级逻辑GatewaySentinel 可作为 Gateway 的过滤器在网关层实现限流和熔断Sentinel 是微服务高可用的最后一道防线确保“即使部分服务不可用整个系统依然能有限度地对外服务”而不是全盘崩溃。feign概念Feign 是 Netflix 开源的声明式 HTTP 客户端Spring Cloud 对其进行了封装让我们可以用编写接口的方式来实现微服务之间的远程调用极大简化了代码。它的工作流程是定义一个 Java 接口通过FeignClient注解绑定远程服务名。接口中的方法通过 Spring MVC 注解如GetMapping声明请求路径和参数。调用该接口方法时Feign 会动态生成代理对象底层集成Ribbon实现负载均衡根据服务名从 Nacos 中拉取实例列表再发起 HTTP 请求。使用 Feign 的好处是代码可读性强调用远程服务就像调用本地方法。自动集成负载均衡无需手动拼接 URL。支持自定义配置如请求超时、日志级别、编码器等。gateway概念Spring Cloud Gateway 是整个微服务架构的统一入口它基于 Spring WebFlux 构建采用非阻塞 I/O性能比传统的 Zuul 网关更高。Gateway 的核心三要素路由Route根据匹配规则将请求转发到对应的下游服务。断言Predicate定义匹配规则如根据路径、请求参数、Header 等进行路由。过滤器Filter对请求或响应进行修改如鉴权、日志、限流、跨域处理等。在项目中Gateway 的作用是路由转发前端请求不直接访问微服务而是通过 Gateway 统一分发。安全鉴权在网关层校验 JWT Token 或 Session拒绝非法请求保护后端服务。限流与熔断可集成 Sentinel 或 Redis 做接口限流防止流量洪峰打垮服务。跨域处理统一解决前后端分离的跨域问题避免在每个微服务中重复配置。工作流程路由判断当用户发送请求到微服务架构时网关接收到请求之后现根据断言判断当前请求url是哪一个服务的。请求过滤然后会使用多个过滤器组成的过滤器链对请求进行拦截与修改例如添加请求头、参数校验等操作。服务处理之后将请求发送给对应的后端服务进行处理响应过滤当服务处理完之后将返回结果交给过滤器处理响应返回响应经过过滤处理后返回给客户端总结客户端的请求先通过匹配规则找到合适的路由就能映射到具体的服务。然后请求经过过滤器处理后转发给具体的服务服务处理后再次经过过滤器处理最后返回给客户端。