• ribbon的理解


    什么是ribbon?

    Ribbo是一个基于HTTP和TCP的客户端负载均衡器
    

    什么是客户端负载均衡?

    客户端负载均衡和服务端负载均衡最大的区别在于服务清单所存储的位置。
    在客户端负载均衡中,所有的客户端节点都有一份自己要访问的服务端清单,客户端在发起请求的时候会先自行选择一个服务端,向该服务端发起请求,从而实现负载均衡
    

    ribbon的职能主要有两个:

    1、维护所有的服务实例SeverList(新增、更新、删除等)
    2、当需要请求Server实例时,从SeverList中找到最合适的Server实例并返回
    

    维护server列表

    1、基于定时任务拉取服务列表方式,然后将最新的服务列表更新到ServerList之中(默认30s一次从Eureka服务端拉取)
    2、基于Eureka服务事件通知的方式,来更新ServerList(例如:有新服务注册,或有服务down机,会有事件通知)
    

    选择服务实例的流程

    1、通过ServerList获取当前可用的服务实例列表
    
    2、使用ServerListFilter过滤器过滤出符合要求的服务实例列表
    	(Ribbon默认采取了区域优先的过滤策略,即从ServerList中过滤出和当前实例所在的区域(zone)一致的serverList)
    
    3、应用Rule规则,结合服务实例的统计信息,返回满足规则的某一个服务实例
    	
    
    说明:在服务实例列表选择的过程中,有两次过滤的机会
            第一次是首先通过ServerListFilter过滤器
            另外一次是用过Rule的选择规则进行过滤
    

    rule规则

    1、RoundRobinRule	线性轮询
    2、RandomRule	随机
    3、WeightedResponseTimeRule	权重
    4、BestAvailableRule	选出最空闲的实例
    5、RetryRule	线性轮询重试
    6、ZoneAvoidanceRule	
    	计算出哪个区域的服务最差,将此zone的服务从服务列表中剔除
    	再过滤掉正处于熔断状态的服务
    	然后通过RoundRobinRule线性轮询的方式从列表中挑选一个服务
  • 相关阅读:
    DSA——基数排序
    cannot instantiate the type
    DSA——从尾到头打印链表笔记
    DSA——AVL平衡二叉树
    Leetcode——438. Find All Anagrams in a String【java】【没搞清楚呢】
    Leetcode——415. Add Strings【java】
    Leetcode——387. First Unique Character in a String【java】
    Leetcode——344. Reverse String
    Leetcode——205-Isomorphic Strings(同构字符串)【待反思周末】
    DSA——Shell排序算法
  • 原文地址:https://www.cnblogs.com/jis121/p/11018015.html
Copyright © 2020-2023  润新知