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

统计网站建设程序刚刚济南最新发布

统计网站建设程序,刚刚济南最新发布,公司简介简短,做网站注册哪类商标文章目录 前言一、什么是 Ribbon二、Ribbon 实现负载均衡的原理2.1 负载均衡的流程2.2 Ribbon 实现负载均衡的源码剖析 三、Ribbon 负载均衡策略3.1 负载均衡策略3.2 演示 Ribbon 负载均衡策略的更改 四、Ribbon 的饥饿加载4.1查看 Ribbon 的懒加载4.2 Ribbon 的饥饿加载模式 前… 文章目录 前言一、什么是 Ribbon二、Ribbon 实现负载均衡的原理2.1 负载均衡的流程2.2 Ribbon 实现负载均衡的源码剖析 三、Ribbon 负载均衡策略3.1 负载均衡策略3.2 演示 Ribbon 负载均衡策略的更改 四、Ribbon 的饥饿加载4.1查看 Ribbon 的懒加载4.2 Ribbon 的饥饿加载模式 前言 在前文《深入理解 Eureka 注册中心的原理、服务的注册与发现》中介绍了如何使用 Eureka 实现服务的注册与拉取并且通过添加 LoadBalanced 注解实现了负载均衡。这种自动化的背后隐藏着许多疑问 服务是在何时进行拉取的负载均衡是如何实现的负载均衡的原理和策略又是什么 本文旨在深入探讨使用 Eureka 实现负载均衡的原理为我们理解微服务架构中服务调用的内部机制提供更清晰的认识。通过解答这些疑惑我们将更好地理解服务发现、负载均衡的运作方式为构建高性能、稳定的分布式系统打下坚实的基础。 一、什么是 Ribbon Ribbon 是一个基于 HTTP 和 TCP 客户端的负载均衡器。在微服务架构中服务的调用通常涉及到负载均衡的问题即在多个服务提供方中选择一个进行调用。Ribbon 提供了一种简单而有效的负载均衡解决方案。 Ribbon 最初是 Netflix 公司开发的后来成为 Spring Cloud 项目的一部分。它的主要作用是在服务消费者和提供者之间实现均衡的流量分发确保每个服务提供者都能够得到适当的请求避免出现服务过载或资源浪费的情况。 具体而言Ribbon 实现了以下功能 负载均衡算法 Ribbon 支持多种负载均衡算法例如轮询、随机、权重轮询等使得服务消费者可以根据实际场景选择适当的负载均衡策略。 服务实例的自动发现 Ribbon 与 Eureka 等服务注册中心集成能够自动获取可用的服务实例列表。 故障转移和重试机制 Ribbon 具备故障转移和重试功能可以在服务提供者发生故障时自动切换到其他健康的实例提高系统的稳定性和可用性。 在 Spring Cloud 中Ribbon 作为一个负载均衡的客户端组件通过拦截微服务的调用请求动态地选择目标服务实例从而分配请求的负载实现了对服务调用的细粒度控制。 二、Ribbon 实现负载均衡的原理 2.1 负载均衡的流程 Ribbon 实现负载均衡的流程图如下 下面是对这个流程的详细说明 首先服务消费者发起请求Ribbon 负载均衡器收到请求之后获取请求路径中的服务名称例如 userservice。然后负载均衡器使用这个获取到的服务名称去向 Eureka Service 拉取对应的服务。在实际生产中一个服务一般都会有多个实例因此拉取到的就是一个服务列表列表中包含了这个服务所有正常实例的 IP 和端口号。负载均衡器在获取到这个列表之后使用当前采取的负载均衡策略去选择一个合适的服务然后再访问这个服务。 这个流程确保了服务的请求能够被合理地分发到多个实例中从而实现了负载均衡。 2.2 Ribbon 实现负载均衡的源码剖析 首先Ribbon 实现负载均衡使用到的一个类叫做 LoadBalancerInterceptor负载均衡拦截器可以通过 IDEA 查看它的源码 发现它实现了一个 ClientHttpRequestInterceptor接口即客户端 HTTP 请求拦截器 它会拦截 RestTemplate 发生的 HTTP 请求ClientHttpRequestInterceptor 是一个接口并且其中包含了一个 intercept 方法因此LoadBalancerInterceptor 作为实现这个接口的类也一定重写了 intercept 方法此时我们可以在这个方法中设置一个断点进行调试以追踪代码的运行 request.getURI() 获取请求地址 originalUri.getHost() 获取到了请求的地址中的主机名此时获取到的就是服务的名称也就是 userservice 3. 当找到了服务的名称之后接下来要做的工作就是向 EurekaServer 去拉取对应的服务了然后这个方法就把获取到的服务名交给了一个RibbonLoadBalancerClient Ribbon负载均衡客户端进行处理。 4. 继续调试代码进入execute 方法 继续往下走就得到了一个 LoadBalancer 对象 这个对象的名称叫做“动态服务列表均衡器”查看这个对象的内容可以发现服务列表中服务的数量为3这三个服务就是获取到的三个 user-service 向 EurekaServer 中注册的服务。 因此getLoadBalancer 方法的作用就是根据服务名称向 EurekaServer 中寻找服务列表。当找到了服务列表之后我们就可以大胆的猜测下一步所要做的工作就是进行负载均衡操作了。 此时我们进入 getServer 方法 接下来就调用了chooseServer 方法进入这个方法 8. 然后再进入chooseServer 方法最后找到了rule.choose方法 此时查看 rule 对象发现是一个接口 既然是接口那么就有实现类 此时发现的实现类就是负载均衡的规则了。大致的规则有随机、轮询等等。 最后通过默认的规则就选择到了 8082 这个端口的服务了。 接下来就可以使用真正的IP和端口号去代替 userservice 然后去访问指定了服务了。 以上就是 Ribbon 实现负载均衡的源码剖析通过调试了方法深入探索了服务发现与负载均衡是实现流程帮助我们更好的理解了服务发现、负载均衡的运作方式 三、Ribbon 负载均衡策略 3.1 负载均衡策略 通过上面的源码分析不难发现Ribbon 的负载均衡规则是一个叫做 IRule 的接口来定义的每一个子接口都是一种规则。 关于 IRule 接口的继承体系如下图所示 关于 Ribbon 的负载均衡策略可以总结如下表所示 内置负载均衡规则类规则描述RoundRobinRule简单轮询服务列表来选择服务器。它是Ribbon默认的负载均衡规则。AvailabilityFilteringRule对短路和并发数过高的服务器进行忽略WeightedResponseTimeRule为每一个服务器赋予一个权重值。服务器响应时间越长这个服务器的权重就越小。这个规则会随机选择服务器这个权重值会影响服务器的选择。ZoneAvoidanceRule以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类这个Zone可以理解为一个机房、一个机架等。而后再对Zone内的多个服务做轮询。BestAvailableRule忽略那些短路的服务器并选择并发数较低的服务器。RandomRule随机选择一个可用的服务器RetryRule重试机制的选择逻辑 Ribbon 提供了这些内置的负载均衡规则同时也支持自定义负载均衡规则。在实际应用中根据业务特点选择合适的负载均衡策略是非常重要的。下面演示了 Ribbon 负载均衡策略的更改。 3.2 演示 Ribbon 负载均衡策略的更改 通过定义IRule实现可以修改负载均衡规则有两种方式 代码方式在order-service中的OrderApplication启动类中定义一个新的IRule并使用 Bean 注解注册到 Spring 容器中 Bean public IRule randomRule(){return new RandomRule(); }配置文件方式在order-service的application.yml文件中添加新的配置也可以修改规则 # 修改 Ribbon 负载均衡策略 userservice:ribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则例如下面是修改了负载均衡策略之后再次使用 order-service 访问订单的结果。可以发现现在不再是以轮询的方式挑选user-service服务了而是以随机的方式进行挑选了。 四、Ribbon 的饥饿加载 4.1查看 Ribbon 的懒加载 当我们重新启动 order-service 服务然后在浏览器中进行订单访问可以发现如下的现象 当 order-service 服务启动后第一次访问服务可以发现耗时需要三百多毫秒 然后再次访问多次可以发现耗时都变成了十几毫米 通过以上的现象就可以发现Ribbon 默认采用的是懒加载模式就像单例模式的懒汉模式一样第一次访问的时候才会去创建LoadBalanceClient实例请求时间会很长。 4.2 Ribbon 的饥饿加载模式 为了解决上述懒加载的耗时问题Ribbon 还提供了饥饿加载模式饥饿加载则会在项目启动时创建降低第一次访问的耗时。 通过下面配置开启饥饿加载 此时重启 order-service服务 在启动服务的时候就会发现日志变得更多了 这个日志的内容就是加载LoadBalanceClient实例所产生的日志。 再次首次访问 order-service服务就会发现消耗的时间变短了
http://www.dnsts.com.cn/news/54537.html

相关文章:

  • 保险公司网站策划杭州论坛网站建设
  • wordpress手机端404页面佛山做网络优化的公司
  • WordPress站群 管理wordpress模板在哪
  • 写一个网站需要什么技术vs 网站项目
  • 音乐网站 模板公司建设网站的费用
  • 株洲网站建设开发网站开发 前端
  • 建设牌安全带厂家网站网站安全备案
  • 林州网站建设哪家好广告电商怎么做
  • 深圳品牌网站开发网站优化 福州
  • 如何安装网站商标注册需要多久
  • 资阳网站制作四川建设网站信息查询中心
  • 网站建设应注意哪些事项网站怎么做qq授权登录界面
  • 锦州网站建设多少钱在自己网站建立自己的外链
  • 如何创建网站名称郑州专业网站建设价格
  • 山东企业建站系统信息网页设计作品说明书
  • 网站空间和域名绑定wordpress目录顺序
  • 好的龙岗网站建设商城手机网站设计
  • 做网站与不做网站的区别武进网站建设平台
  • 做动漫网站侵权吗怎么制作一个网站教程
  • 建设网站采用的网络技术电商网站建设与管理 教案
  • 大连网站推广公司曹妃甸建设局网站
  • 玉田县建设工程招标网站四川建设网官
  • 做网站建设哪家效益快多产品的网站怎么做seo
  • 购物网站的后台建立个人网站费用
  • 网站运营刚做时的工作内容天津市津南区教育网站建设招标
  • 企业seo网站营销推广百度搜索软件
  • 六安网站建设价格网站制作导航超链接怎么做
  • 域名注册网站查询solaris+wordpress主题
  • 云南 网站建设wordpress网站上传服务器
  • 用股票代码做网站的国外的有名的网站