当前位置: 首页 > news >正文

长沙高端网站制作公司网站合作客户

长沙高端网站制作公司,网站合作客户,网站 定制,网页制作swiper模板Ribbon 曾经是 Spring Cloud 家族默认的客户端负载均衡工具#xff0c;而 Spring Cloud LoadBalancer (SCLB) 是官方替换 Ribbon 的新实现。表面上它们都解决 “服务调用时选哪个实例” 的问题#xff0c;但在理念、架构和生态上差异不小。一、Ribbon vs SCLB1. 定位和生态…Ribbon 曾经是 Spring Cloud 家族默认的客户端负载均衡工具而 Spring Cloud LoadBalancer (SCLB) 是官方替换 Ribbon 的新实现。表面上它们都解决 “服务调用时选哪个实例” 的问题但在理念、架构和生态上差异不小。 一、Ribbon  vs  SCLB 1. 定位和生态地位RibbonNetflix OSS 出品老一代的客户端负载均衡器。在 Spring Cloud Dalston ~ Greenwich 时代是默认选择。后来 Netflix OSS 宣布 进入维护模式2018年起不再活跃发展。Spring Cloud LoadBalancerSpring 团队自研替代 Ribbon。完全独立于 Netflix 生态不再依赖过时组件。与 Spring Boot 2.x/3.x、Reactor、WebClient、Feign 等深度集成。 2. 核心设计思路Ribbon侵入性较强依赖 IClientConfig、IRule、IPing 等接口配置体系复杂。强调“策略类 配置类”模式比如 RoundRobinRule、ZoneAvoidanceRule。同步调用模型为主虽然可扩展但偏“重量级”。与 RestTemplate 深度耦合通过 LoadBalanced RestTemplate。Spring Cloud LoadBalancer函数式 轻量化核心是 ServiceInstanceListSupplier负责提供实例列表和 ReactorServiceInstanceLoadBalancer负责挑选实例。完全 Reactor 化支持响应式编程Reactor/Flux/Mono天然适配 WebClient。API 更简单默认策略是 RoundRobin但很容易定制。更解耦和 DiscoveryClient、Feign、gRPC 等可自由组合。 3. 扩展能力Ribbon有比较多的现成策略RoundRobinRule、RandomRule、RetryRule、WeightedResponseTimeRule…自定义需要继承 IRule配置也要绕 Ribbon 的专用配置体系。支持 Zone 概念跨机房/多可用区适合 Netflix 内部环境但在普通企业里很少用上。Spring Cloud LoadBalancer策略很“干净”只要实现 ReactorServiceInstanceLoadBalancer 接口即可。ServiceInstanceListSupplier 提供了天然的 hook你可以在实例列表进入负载均衡前加上 过滤、排序、权重。没有 Ribbon 那种内置十几个策略的复杂度但用组合的方式灵活度更高。 4. 与 Spring 生态的关系Ribbon被强绑定到 RestTemplate Feign老版本。Spring Cloud Netflix 维护成本高升级阻力大。Spring Cloud LoadBalancer未来路线核心组件和 Spring Cloud Gateway、Feign 3.x、WebClient 全兼容。官方推荐替代方案Ribbon 已经标记 Deprecated。随 Spring Boot/Spring Cloud 版本更新能持续获得支持。 5. 性能与现代化Ribbon基于老旧同步模型虽然功能全但显得笨重。没有天然的 Reactor 支持在响应式场景里不合拍。Spring Cloud LoadBalancer基于 Reactor轻量、非阻塞天然适合高并发场景。使用 FluxServiceInstance可以灵活叠加缓存、权重、健康检查逻辑。更加云原生能和 Kubernetes Service、Consul、Nacos 等平滑对接。 二、源码说明1. 核心抽象Ribbon结果实例获取、缓存、负载均衡策略全都绑死在 Ribbon 的体系。负载均衡器接口ILoadBalancer内部维护实例列表ServerList并交给 IRule 挑选。负载均衡策略接口IRule public interface IRule {Server choose(Object key);void setLoadBalancer(ILoadBalancer lb);ILoadBalancer getLoadBalancer(); }代表“从一堆服务实例里挑一个”。Spring Cloud LoadBalancer (SCLB)实例供应接口 public interface ServiceInstanceListSupplier extends SupplierFluxListServiceInstance {String getServiceId(); }负责“提供候选实例列表”来源可以是 DiscoveryClient、缓存、静态配置。策略接口 public interface ReactorServiceInstanceLoadBalancer {MonoResponseServiceInstance choose(Request request); }专注于“如何从候选列表里挑一个”。结果候选列表与选择逻辑完全解耦职责单一而且基于 Reactor非阻塞。 2. Spring Cloud LoadBalancer 和 Feign 相对 Ribbon 的解耦性看源码上的调用链对比最明显Ribbon FeignFeign 的 LoadBalancerFeignClient → 直接调用 RibbonLoadBalancerClient → 使用 ILoadBalancer IRule 绑定。 public class RibbonLoadBalancerClient implements LoadBalancerClient {Overridepublic ServiceInstance choose(String serviceId) {ILoadBalancer loadBalancer getLoadBalancer(serviceId);Server server loadBalancer.chooseServer(null);return new RibbonServer(serviceId, server, isSecure(server), serverIntrospector(serviceId).getMetadata(server));} }可以看到Feign 和 Ribbon 耦合紧密ILoadBalancer 和 IRule 必须都存在。SCLB FeignSpring Cloud 2020Feign 的 LoadBalancerFeignClient → 使用 BlockingLoadBalancerClient 或 ReactorLoadBalancerExchangeFilterFunction。 public class BlockingLoadBalancerClient implements LoadBalancerClient {private final LoadBalancerClientFactory clientFactory;Overridepublic ServiceInstance choose(String serviceId) {ReactorServiceInstanceLoadBalancer loadBalancer clientFactory.getInstance(serviceId, ReactorServiceInstanceLoadBalancer.class);// 核心是调用 loadBalancer.choose()} }这里的关键Feign 只依赖于 ReactorServiceInstanceLoadBalancer 抽象而不关心实例供应如何实现。ServiceInstanceListSupplier 可随时替换比如 Kubernetes、Consul、NacosFeign 本身无需改动。 结论Ribbon 时代 Feign 直接依赖 Ribbon 核心接口导致强绑定SCLB 下 Feign 只依赖于统一的 LoadBalancer 抽象而实例来源和策略完全可插拔 → 解耦性更高。 三、Spring Cloud LoadBalancer 最佳实践1. 基础使用引入依赖 dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-loadbalancer/artifactId /dependencyRestTemplate / WebClient 集成 Bean LoadBalanced public RestTemplate restTemplate(RestTemplateBuilder builder) {return builder.build(); }Bean LoadBalanced public WebClient.Builder webClientBuilder() {return WebClient.builder(); }建议优先用 WebClient因为它能发挥 SCLB 的 Reactor 非阻塞优势。 2. 缓存与性能优化SCLB 默认每次请求会调用 DiscoveryClient 获取实例可以用内置的 缓存供应器 Bean public ServiceInstanceListSupplier discoveryClientServiceInstanceListSupplier(ConfigurableApplicationContext context) {return ServiceInstanceListSupplier.builder().withDiscoveryClient().withCaching() // 启用缓存.build(context); }这样能减少注册中心压力尤其是在高并发场景。 3. 自定义策略简单示例基于元数据的优先级选择比如实例 metadata 里有 zone: shanghai只要优先调用同城实例 Bean ReactorServiceInstanceLoadBalancer zoneAwareLoadBalancer(ObjectProviderServiceInstanceListSupplier supplierProvider) {return new ReactorServiceInstanceLoadBalancer() {Overridepublic MonoResponseServiceInstance choose(Request request) {return supplierProvider.getIfAvailable().get().next().map(instances - {ListServiceInstance localZone instances.stream().filter(i - shanghai.equals(i.getMetadata().get(zone))).toList();if (!localZone.isEmpty()) {return new DefaultResponse(localZone.get(0));}return new DefaultResponse(instances.get(0));});}}; }更复杂权重路由实现 ReactorServiceInstanceLoadBalancer结合 metadata.weight 字段做加权随机选择。这相当于 Ribbon 的 WeightedResponseTimeRule但在 SCLB 里更灵活。 4. ServiceInstanceListSupplier 增强SCLB 提供了“供应链”思想常用扩展点过滤过滤掉 metadata 标记为 statusdown 的实例排序按响应时间/CPU负载排序把健康的放前面包装组合多层供应器比如先 DiscoveryClient → 再缓存 → 再 zone 过滤。这种链式增强比 Ribbon 的配置类清晰得多。 5. 与 Feign 配合在新版 Spring Cloud 中Feign 默认走 SCLB。最佳实践配置 spring.cloud.loadbalancer.retry.enabledtrue → 自动开启重试机制自定义 ReactorServiceInstanceLoadBalancerFeign 会自动走你的策略如果想做更细粒度控制可以写 FeignClient(configuration...) 指定独立的 LoadBalancer 配置。 6. 容错与重试SCLB 不再像 Ribbon 那样内置 RetryRule而是把重试交给 Spring Retry spring:cloud:loadbalancer:retry:enabled: trueretry-on-all-operations: truemax-retries-on-same-service-instance: 1max-retries-on-next-service-instance: 2这样能保证单实例失败 → 自动切换下一个实例避免单点问题。 7. 云原生环境最佳实践在 Kubernetes 上推荐直接基于 spring-cloud-starter-kubernetes-client SCLB实例供应就是 Pod 列表在 Nacos / Consul 场景下直接使用对应 DiscoveryClient starterSCLB 自动适配保持 ServiceInstance metadata 丰富zone、weight、tag方便做策略。 8. 迁移建议Ribbon → SCLBRestTemplate 上的 LoadBalanced 不需要动底层自动切换为 SCLBFeign 默认走 SCLB不需要额外改动Ribbon 自定义的 IRule 策略需要改写成 ReactorServiceInstanceLoadBalancerRibbon 的 Zone/Weight 逻辑迁移到 ServiceInstanceListSupplier metadata 策略更清晰。 总结最佳实践关键就是 “解耦 插拔”实例来源 → DiscoveryClient 缓存实例增强 → Supplier 过滤/排序/权重策略 → 自定义 LoadBalancer调用 → WebClient / Feign容错 → Spring Retry
http://www.pierceye.com/news/28153/

相关文章:

  • 昆山建设工程招聘信息网站长沙有哪些大公司
  • 怎么更换网站图片潍坊网站建设8年
  • 企业备案 网站服务内容宁波seo超级外链工具
  • 网站主题定位做带支付平台的网站
  • 东莞建设网站软件企业信息查询系统官网北京
  • 如何微信做演讲视频网站多多淘宝客网站
  • 建设厅职业资格中心网站网上怎样正规赚钱
  • 福建省建设相关网站网站开发人员属于什么软件
  • 网站建设与维护教案wordpress 注册推广
  • 网站备案需要什么材料wordpress移除评论
  • 课程网站建设的步骤建设网站话术
  • 金华网站建设方案策划东莞樟木头网站建设
  • 太原网站建设小程序成都今天新闻大事件
  • 盐城网站建设0515icp网站建设制作放之
  • jsp网站开发文献旅游网站建设课程设计
  • 商城网站建设缺点网站建设费如何入账怎么摊销
  • 腾讯云备案 网站名称电子信息工程论坛
  • 网站规划建设心得与体会自助建站软件
  • 买的网站模板里面是什么企业电子网站的建设案例
  • 网站开发充值功能网站建设课程体系
  • 定制网站建设公司价格微信推广文案范文
  • 怎么做网站设计程序哪个网站做logo设计师
  • 重庆网站建设推广公司哪家好caddy wordpress
  • led网站制作建设一个企业网站到底要多少钱
  • 鞍山网站制作推广和网站设计人员谈价要注意什么
  • 九江 网站建设安徽省住房和城乡建设局
  • 网站开发相关书籍网站开发前端后端书籍
  • 宿迁网站搭建网络规划设计师考海明码吗
  • 潍坊网站定制公司官方网站下载打印机驱动程序
  • 做外贸要访问国外的网站怎么办深圳网络营销方法