zoukankan      html  css  js  c++  java
  • dubbo学习(五)路由

     
     
     

    dubbo的路由规则,是基于invoker集合进行筛选,过滤出可用的invoker集合用于后续的执行。

    网关黑白名单场景如下所示:

    黑白名单的数据来源一般分两类,一类是静态内置,如:

    • 来自某个网段的请求加入黑名单
    • 来自预设的指定IP列表的请求加入黑名单

    第二类是动态列表,比如来自flink按时间区间动态计算的阈值计算出来的清单,如:

    • 按IP在10s内的访问频次阈值
    • 按用户id在30s内的访问频次阈值

    在dubbo网关下,黑白名单场景却不适合使用dubbo的路由规则来执行,以常用的ConditionRouter来解释。

    从ConditionRouter的matchCondition方法可以得知,规则的定义,来自router配置,规则匹配的数据参数则来自consumer&provider的url。基于url就存在一个严重的问题,即受限于数据量&刷新成本。

    在黑白名单场景下,规则的命中规模可膨胀,可收缩,也可以剧烈变化。如果使用dubbo的条件路由,则会面临url剧烈变化导致同步成本剧增,url膨胀导致同步效率极差。

    针对这种情况,可以自定义router实现,不从url获取参数与值,仅根据调用上下文来获取数据。

    从源码角度来看,router的触发有2个地方。其一是在RegistyDirectory在收到url更新时触发的刷新invoker来触发的,其二是在Directory的list时会对提取到的invoker集合进行router处理。故,可以自定义一个router实现,在这一个环节进行黑白名单处理。

    但是,实际场合,一般不会通过这种方式来处理,网关实现时,目前依赖的是spring webFlux框架,在接入http请求时,可以扩展filter来支持,并不需要下层到dubbo的执行层面由路由来支持。当然,如果是dubbo直接对外另说。

    网关灰度路由的场景:

    灰度路由一般是某个应用的某个url基于一定的条件定向转发请求到指定机器上。

    这种情况下,路由规则也可以以筛选器的身份参与进来。

  • 相关阅读:
    RedHat7安装NetCore环境并发布网站
    【WPF学习】第四十二章 透明
    细说枚举
    js获取ip地址,操作系统,浏览器版本等信息,可兼容
    js实现数据流(日志流,报警信息等)滚动展示,并分页(含实现demo)
    js实现点击copy,可兼容
    js实现htmlToWordDemo
    H5 web 存储之 Webstorage
    已发布的WEB项目,如何挂在服务器或者本机的IIS下
    Nuget打包没有注释显示
  • 原文地址:https://www.cnblogs.com/asfeixue/p/13859154.html
Copyright © 2011-2022 走看看