• Ribbon


    通过RestTemplate发送请求-》

    被负载均衡拦截器拦截-》

    通过RibbonClientAutoConfiguration自动装配的ILoadBalancer的实现类ZoneAwareLoadBalancer(负载均衡器)实现的选择策略选择服务实例-》

    向此实例发送请求

    ----------------------------

    负载均衡器:

    BaseLoadBalancer:轮询-线性负载均衡,缺陷:没有区域Zone的概念,所有的实例同出一个defaultZone,在多区域部署的环境下会产生跨区域访问的问题。跨区域访问应该作为本区域相关实例出现故障时的备用选项,而不应该在平时就放任跨区域访问带来的延迟

    ZoneAwareLoadBalancer:每个区域都有各自的负载均衡器,它负责维护各自区域的实例清单。实现区域亲和策略,将处于不同机房的实例配置成不同区域值,实现跨区域容错机制:eureka.instance.metadataMap.zone=shanghai

    当请求调用某服务时,ZoneAwareLoadBalancer会根据区域无效策略过滤掉不符合的Zone(故障率[断路器断开次数]、平均负载 等),然后使用轮询策略选择一个Zone,采用此Zone的负载均衡器执行选择服务实例的策略

    ----------------------------

    负载均衡策略:

    随机策略、轮询策略

    权重策略:对轮询策略的扩展,根据实例运行状况(平均响应时间)计算权重,根据权重挑选实例,平均响应时间越小的实例被选中的几率越大

    区域无效策略:过滤掉不符合的Zone(故障率[断路器断开次数]、平均负载 等)

    权重策略实现大转盘算法实例

    管理端配置

    实例 A B C D
    平均响应时间 10 40 80 100

    落盘算法逻辑:

    总平均响应时间:10+40+80+100=230

    A落盘区间:[0,230-10) -> [0,220)

    B落盘区间:[220,220+(230-40)) -> [220,410)

    C落盘区间:[410,410+(230-80)) -> [410,560)

    D落盘区间:[560,560+(230-100)] -> [560,690]

    -------------------------------------

    Ribbon调用失败重试

    eureka不会立即剔除故障实例,导致ribbon调用故障实例时出错,可设置当前实例重试次数、更换实例重试次数

  • 相关阅读:
    简单的react-dom.js react.js 中的源码手写
    回顾vue源码理解到哪记录到哪
    一道很有纪念意义的算法题之多维数组去重,不降维
    下载文件.xlsx .csv 或者下载压缩包
    koa+mysql简单实现查询功能
    幽灵空白节点解决方案,史上最明白
    useCallback,useMemo源码
    useContext源码解读
    useEffect源码
    Hadoop 学习笔记(二)Hadoop 本地运行环境搭建及简单应用
  • 原文地址:https://www.cnblogs.com/yfzhou528/p/13514258.html
Copyright © 2020-2023  润新知