自身网站的平台建设梵克雅宝耳钉

张小明 2025/12/31 20:55:20
自身网站的平台建设,梵克雅宝耳钉,wordpress服务器选择,开发公司年终工作总结前言在当今互联网软件开发的大环境下#xff0c;微服务架构已然成为主流。而在微服务架构中#xff0c;确保系统的高可用性、高性能以及良好的扩展性是至关重要的。其中#xff0c;负载均衡技术作为实现这些目标的关键手段之一#xff0c;发挥着不可或缺的作用。今天#…前言在当今互联网软件开发的大环境下微服务架构已然成为主流。而在微服务架构中确保系统的高可用性、高性能以及良好的扩展性是至关重要的。其中负载均衡技术作为实现这些目标的关键手段之一发挥着不可或缺的作用。今天我们就来深入探讨一下 Spring Cloud 中客户端负载均衡的相关知识看看如何实现客户端负载均衡让你的微服务架构更加稳固和高效。负载均衡的重要性及类型在系统架构里负载均衡是极为关键且必须实施的环节。它能够有效缓解网络压力提升系统的处理能力实现系统的扩容是保障系统高可用的重要手段。一般而言我们所说的负载均衡主要指服务端负载均衡它又可细分为硬件负载均衡和软件负载均衡。硬件负载均衡通过在服务器节点间安装如 F5 等专门设备来实现软件负载均衡则借助在服务器上安装具备均衡负载功能的软件模块像 Nginx 等。无论是硬件还是软件负载均衡其架构模式通常都类似负载均衡设备或软件模块会维护一份可用服务端清单并通过心跳检测剔除故障节点以保证清单中的服务端均可正常访问。当客户端发送请求时负载均衡设备依据特定算法如线性轮询、按权重负载、按流量负载等从清单中选取一个服务端地址进行转发。而客户端负载均衡与服务端负载均衡最大的区别就在于服务清单的存储位置。在客户端负载均衡中所有客户端节点各自维护自身要访问的服务端清单这些清单来自服务注册中心例如 Eureka 服务端。同样客户端负载均衡也需要通过心跳机制来维护服务端清单的健康性不过此步骤需与服务注册中心协同完成。Spring Cloud 中的客户端负载均衡 ——RibbonSpring Cloud Ribbon 是一款基于 HTTP 和 TCP 的客户端负载均衡工具它基于 Netflix Ribbon 实现。通过 Spring Cloud 的封装我们能够轻松地将面向服务的 REST 模板请求自动转换为客户端负载均衡的服务调用。虽然 Ribbon 只是一个工具类框架无需像服务注册中心、配置中心、API 网关那样独立部署但在几乎每一个由 Spring Cloud 构建的微服务和基础设施中都能看到它的身影。因为微服务间的调用、API 网关的请求转发等操作实际上很多都是借助 Ribbon 来完成的后续我们会介绍的 Feign同样也是基于 Ribbon 实现的工具。由此可见深入理解和熟练运用 Spring Cloud Ribbon对于我们利用 Spring Cloud 构建微服务具有重要意义。一Ribbon 的工作原理Spring Cloud Ribbon 的底层利用了一个拦截器用于拦截 RestTemplate 发出的请求并对地址进行修改。其基本流程如下拦截 RestTemplate 请求例如 http://userservice/user/1 。RibbonLoadBalancerClient 从请求 url 中提取服务名称此例中为 user - service。DynamicServerListLoadBalancer 依据服务名称 user - service 到 Eureka 服务注册中心拉取服务列表。Eureka 返回服务列表如localhost:8081、localhost:8082 。IRule 运用内置的负载均衡规则从列表中挑选一个服务实例比如选择了localhost:8081 。RibbonLoadBalancerClient 修改请求地址将 userservice 替换为具体的实例地址localhost:8081得到http://localhost:8081/user/1 进而发起真实请求。二负载均衡策略 IRuleIRule 接口决定了 Ribbon 的负载均衡策略该接口拥有众多不同的实现类常见的如下RoundRobinRule简单轮询服务列表来选择服务器这是 Ribbon 默认的负载均衡规则。它会按照顺序依次选择服务实例当到达列表末尾时重新从第一个实例开始循环选择。例如假设有服务实例 A、B、C按照 RoundRobinRule 的策略请求依次会被分配到 A、B、C、A、B、C…… 这样的顺序。AvailabilityFilteringRule该规则会忽略以下两种服务器一是在默认情况下如果一台服务器 3 次连接失败它将被设置为 “短路” 状态此状态会持续 30 秒若再次连接失败短路持续时间会呈几何级增加二是并发数过高的服务器。如果一个服务器的并发连接数超出设定上限可通过客户端的..ActiveConnectionsLimit 属性配置配置了 AvailabilityFilteringRule 规则的客户端同样会将其忽略。WeightedResponseTimeRule为每个服务器赋予一个权重值。服务器的响应时间越长其权重越小。该规则会随机选择服务器但权重值会影响选择结果。例如有服务器 A、B、CA 的响应时间短权重高B 和 C 响应时间相对较长权重较低。那么在随机选择时A 被选中的概率会相对较高。ZoneAvoidanceRule以区域可用的服务器为基础进行服务器选择。它会先使用 Zone 对服务器进行分类Zone 可理解为一个机房、一个机架等然后在 Zone 内的多个服务中进行轮询。比如有两个 ZoneZone1 中有服务器 A1、A2Zone2 中有服务器 B1、B2。当请求到来时它可能先选择 Zone1然后在 Zone1 中的 A1、A2 间进行轮询选择。BestAvailableRule此规则会忽略那些处于短路状态的服务器并选择并发数较低的服务器。例如当有多个服务实例时它会遍历所有实例排除掉处于短路状态的然后从剩余实例中挑选并发数最少的那个。RandomRule随机选择一个可用的服务器。在众多服务实例中完全随机地挑选一个来处理请求。RetryRule实现了一种重试机制的选择逻辑。在其内部默认使用了 RoundRobinRule 实例。当按照 RoundRobinRule 未选择到可用服务实例时它会在指定的重试次数内进行重试。三修改负载均衡策略在实际应用中我们可以根据业务需求修改负载均衡策略有以下两种方式代码方式以 order - service 服务为例在其 OrderApplication 类中定义一个新的 IRule即可实现全局配置。例如public IRule randomRule(){ return new RandomRule(); }这段代码将负载均衡策略修改为了 RandomRule即随机选择服务实例。配置文件方式在 order - service 的 application.yml 文件中添加配置可针对某个微服务进行配置。比如userservice: ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule上述配置针对 userservice 服务将其负载均衡规则修改为了 RandomRule。不过在实际项目中通常优先使用默认的负载均衡规则尽量避免不必要的修改以免引入潜在问题。四懒加载和饥饿加载Ribbon 默认采用懒加载模式即首次访问时才会创建 LoadBalanceClient这会导致首次请求时间较长。而饥饿加载则是在项目启动时就创建 LoadBalanceClient从而减少首次访问的耗时。通过在配置文件中添加如下配置可开启饥饿加载ribbon: eager - load: enabled: true clients: userservice这里不仅开启了饥饿加载还指定了对 userservice 服务进行饥饿加载。Spring Cloud LoadBalancer——Ribbon 的替代方案需要注意的是Ribbon 目前已进入维护模式未来的替换方案是 Spring Cloud LoadBalancer。Spring Cloud LoadBalancer 为我们提供了一种更现代化的客户端负载均衡解决方案。一Spring Cloud LoadBalancer 原理LoadBalancerClient 作为负载均衡客户端负责执行负载均衡逻辑从服务列表中挑选一个服务地址进行调用。其内部包含 execute () 方法用于执行请求reconstructURI () 方法用于重构 URL。在 Spring Cloud LoadBalancer 中LoadBalancerClient 的实现类是BlockingLoadBalancerClient它实现了 ServiceInstanceChooser 接口中的 choose () 方法。通过 LoadBalancerClientFactory 工厂类获取具体的负载均衡器实例然后调用 loadBalancer.choose (request) 方法依据负载均衡算法选择下一个服务器从而完成负载均衡操作。在 Spring Cloud LoadBalancer 中ReactorLoadBalancer 接口继承自 ReactiveLoadBalancer 接口并且ReactorServiceInstanceLoadBalancer 继承了 ReactorLoadBalancer 接口同时实现了 RandomLoadBalancer随机负载均衡器和 RoundRobinLoadBalancer轮询负载均衡器等方法。二自定义负载均衡器若要自定义负载均衡器根据其类图结构我们只需在自定义配置轮询方法时重定义ReactorServiceInstanceLoadBalancer 接口即可。例如若要实现一个随机负载均衡器可以这样做import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.loadbalancer.core.ReactorServiceInstanceLoadBalancer; import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier; import org.springframework.stereotype.Component; import reactor.core.publisher.Mono; import java.util.List; import java.util.Random; Component public class CustomRandomLoadBalancer implements ReactorServiceInstanceLoadBalancer { private final ServiceInstanceListSupplier serviceInstanceListSupplier; private final Random random new Random(); public CustomRandomLoadBalancer(ServiceInstanceListSupplier serviceInstanceListSupplier) { this.serviceInstanceListSupplier serviceInstanceListSupplier; } Override public MonoServiceInstance choose(Request request) { return Mono.fromSupplier(() - { ListServiceInstance serviceInstances serviceInstanceListSupplier.get().get(); if (serviceInstances.isEmpty()) { return null; } int index random.nextInt(serviceInstances.size()); return serviceInstances.get(index); }); } }在项目启动类上添加 LoadBalancerClient 注解指定服务名和自定义配置类import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.loadbalancer.LoadBalancerClient; import org.springframework.cloud.client.loadbalancer.LoadBalancerClients; SpringBootApplication LoadBalancerClients(name your - service - name, configuration CustomLoadBalancerConfig.class) public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } }其中CustomLoadBalancerConfig 类用于配置自定义的负载均衡器import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClient; import org.springframework.cloud.loadbalancer.core.ReactorServiceInstanceLoadBalancer; Configuration public class CustomLoadBalancerConfig { Bean public ReactorServiceInstanceLoadBalancer customLoadBalancer() { return new CustomRandomLoadBalancer(); } }通过以上步骤我们就实现了一个自定义的随机负载均衡器。总结在 Spring Cloud 的微服务架构中客户端负载均衡是保障系统高效、稳定运行的关键技术。通过 Ribbon 以及新一代的 Spring Cloud LoadBalancer我们能够灵活地实现负载均衡策略提高系统的可用性和性能。在实际项目中我们需要根据业务场景和需求合理选择和配置负载均衡策略充分发挥 Spring Cloud 的优势打造出健壮、高性能的互联网软件系统。希望本文对各位互联网软件开发人员在理解和应用 Spring Cloud 客户端负载均衡方面有所帮助让我们一起在技术的道路上不断探索和前行。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

铜梁城乡建设网站网站安全风险提示单

Linly-Talker训练数据来源是否公开?伦理争议回应 在虚拟主播、数字员工和AI教师逐渐走入日常生活的今天,一个名为 Linly-Talker 的开源项目悄然走红。它只需一张人脸照片和一段文本或语音输入,就能生成口型同步、表情自然的讲解视频&#xff…

张小明 2025/12/31 20:55:19 网站建设

网站建设与制作的流程用户要承担变压器损耗吗

中国科学技术大学论文模板参考文献格式调整深度解析与实用指南 【免费下载链接】ustcthesis LaTeX template for USTC thesis 项目地址: https://gitcode.com/gh_mirrors/us/ustcthesis 中国科学技术大学论文模板(ustcthesis)近期针对参考文献格式…

张小明 2025/12/31 20:53:16 网站建设

网站推广的预算企业建设网站的主要目的有哪些

卷积神经网络基础:YOLO初学者必备知识 在智能摄像头自动识别行人、无人机实时追踪移动目标、工厂流水线自动检测产品缺陷的今天,背后支撑这些“看得见”的智能能力,往往离不开一个核心算法——YOLO(You Only Look Once&#xff09…

张小明 2025/12/31 20:51:14 网站建设

绍兴网站网站建设windows10云电脑

火山引擎AI大模型平台迁移至Qwen3-VL-30B的成本效益分析 在智能文档处理、金融投研辅助和医疗影像解读等专业场景中,企业对“能看懂图、会推理、可解释”的AI系统需求正迅速攀升。传统的OCR规则引擎组合早已力不从心——它们能提取数字,却无法理解“为何…

张小明 2025/12/31 20:49:10 网站建设

网站做的很差的案例网站添加备案号

量子力学、计算与密码学:原理与应用 1. 量子密码学基础 量子密码学是量子记忆的一个重要应用领域。在量子密钥分发(QKD)场景中,信息从发送方(Alice)传输到接收方(Bob),但中间可能存在窃听者(Eve)试图获取传输的信号。 1.1 安全类型 存在两种不同类型的安全:经典…

张小明 2025/12/31 20:47:07 网站建设

网站改版 更换域名哪个品牌网站设计感强

一、事件概述:什么是WannaCry? WannaCry(又称WannaCrypt、WCry)是一种利用Windows操作系统漏洞进行传播的勒索软件。2017年5月12日起,这款病毒以惊人的速度席卷全球,感染了超过150个国家的数十万台计算机。…

张小明 2025/12/31 20:45:05 网站建设