• 【三】Spring Cloud Ribbon 实战


    Spring Cloud Ribbon 实战

    概述

            一直在构思写一个spring cloud系列文章,一方面是对自己实践经验进行一次完整的梳理,另一方面也是希望能够给初学者一些借鉴,让初学者少走些弯路,看到本系列博客就能够很好的把微服务系列组件用好。

            spring cloud是一系列开源项目的集合,这些组件组合起来提供了一套微服务解决方案,本系列文章将按组件来进行讲解,本篇文章将以Ribbon为主题来讲解ribbon的使用和实现原理。

    一、实战应用

    1、负载均衡

            想到负载均衡大家最熟悉的应该是Nginx和F5了,市面上的负载均衡都有哪些类型呢,如下图所示:

            图1、负载均衡类型汇总

            这里还是以Ngin和F5为例来进行说明,如下图是Nginx和F5的应用

    图1、Nginx典型应用

    图2、F5硬件跨机房高可用负载均衡

            Ribbon的应用场景与Nginx和F5不同,Ribbon是一个客户端负载均衡器,它赋予了应用一些支配HTTP与TCP行为的能力,可以得知,这里的客户端负载均衡(许多人称之为后端负载均衡)也是进程内负载均衡的一种。如下图示:

    图3、Ribbon负载均衡

    2、示例应用

            首先要引入依赖:

    
        org.springframework.cloud
        spring-cloud-starter-netflix-ribbon
    

            然后需要注入一个RestTemplate的Bean,并且使用@LoadBalanced注解标注:

    @Configuration
    public class WebConfig {
        public RestTemplate restTemplate() {

            //负载均衡,默认使用轮询规则
            @LoadBalanced
            @Bean
            return new RestTemplate();
        }
    }

    这里主要是使用了@LoadBalanced注解,它的作用是在服务调用时自动选择负载均衡策略,并将请求转发到合适的后端服务实例上。

            上面介绍了Ribbon使用的基本配置,其中最重要的是@LoadBalanced注解,这个是开启Ribbon负载均衡的入口,后面分析Ribbon的实现原理将从这里着手。

    二、原理介绍

    1、核心接口展示

            首先Ribbon是基于如下核心接口实现的:

    图4、Ribbon核心接口

            这里只是展示一下核心接口,具体实现原理讲解起来篇幅将会太长不利于初学者学习,下一篇将会详细分析源码级实现原理。

    2、负载均衡策略

            如下图展示的是Ribbon中负载均衡策略UML类图:

    Ribbon内部一共提供了7种可选的负载均衡策略:

    轮询策略:RoundRobinRule,按照一定的顺序依次调用服务实例。

    权重策略:WeightedResponseTimeRule,根据每个服务提供者的响应时间分配一个权重,响应时间越长,权重越小,被选中的可能性也就越低。

    随机策略:RandomRule,从服务提供者的列表中随机选择一个服务实例。

    最小连接数策略:BestAvailableRule,也叫最小并发数策略,它是遍历服务提供者列表,选取连接数最小的⼀个服务实例。如果有相同的最小连接数,那么会调用轮询策略进行选取。

    重试策略:RetryRule,按照轮询策略来获取服务,如果获取的服务实例为 null 或已经失效,则在指定的时间之内不断地进行重试来获取服务,如果超过指定时间依然没获取到服务实例则返回 null。

    可用敏感性策略:AvailabilityFilteringRule,先过滤掉非健康的服务实例,然后再选择连接数较小的服务实例。

    区域敏感策略:ZoneAvoidanceRule,根据服务所在区域(zone)的性能和服务的可用性来选择服务实例,在没有区域的环境下,该策略和轮询策略类似。

    总结

            本文首先围绕ribbon的实际应用和实现原理两方面展开讲解,意在让大家能够快速了解这一负载均衡组件的使用和实现,如果想更深入了解ribbon的原理可以去把源码down下来认真学习。

    参考文章

    Spring Cloud Ribbon 中的 7 种负载均衡策略的实现方法_java_脚本之家

  • 相关阅读:
    【LeetCode-简单题】844. 比较含退格的字符串
    使用c++视觉处理----canny 边缘检测、sobel边缘检测、scharr 滤波边缘检测
    【C++MiNiSTL项目开发笔记】
    docker 生成镜像的几个问题
    突破从0到1后,鲜花电商2.0时代怎么走?
    Docker启动mysql服务
    苹果电脑误删文件怎么找回?苹果电脑删了文件能恢复吗?苹果电脑文件删除怎么恢复
    Mysql 45讲学习笔记(三十五)优化join语句
    汽车驾驶自动化分级L1~L5
    [数据分析与可视化] Python绘制数据地图5-MovingPandas绘图实例
  • 原文地址:https://blog.csdn.net/wanghengwhwh/article/details/137890448