【Dubbo3终极特性】「流量治理体系」一文教你如何通过Dubbo-Admin实现动态进行流量隔离机制

背景信息

如果一个应用有多个版本在线上同时运行,部署在不同环境中,如日常环境和特殊环境,则
可以使用标签路由对不同环境中的不同版本进行流量隔离,将秒杀订单流量或不同渠道订单流量路由到特殊环境,将正常的流量路由到日常环境。即使特殊环境异常,本应进入特殊环境的流量也不会进入日常环境,不影响日常环境的使用。

启动运行Dubbo-Admin

在运行之前,我们需要保障进行运行对应的Dubbo-Admin服务,可以参考 【Dubbo3终极特性】「流量治理体系」一文教你如何搭建Dubbo3的控制台服务Dubbo-Admin,进行搭建和运行启动Dubbo-Admin服务。

因为dubbo-admin-server会将dubbo-admin-ui打包为资源文件,所以启动dubbo-admin-server就可直接访问页面了

我们在这里可以直接下载clone源码

git clone http://github.com/apache/dubbo-admin.git

直接可以下载到IDE中

  • dubbo-admin-distribution:主要用于操作安装和打包使用的项目组件
  • dubbo-admin-server:dubbo-admin服务的后台服务springboot类型的项目
  • dubbo-admin-test:dubbo-admin服务的测试服务
  • dubbo-admin-ui:dubbo-admin的ui服务,主要会显示前端的ui页面。

通过源码打包运行

  1. dubbo-admin-server/src/main/resources/application.properties中指定注册中心地址
  2. 构建
    • mvn clean package -Dmaven.test.skip=true
  3. 启动
    • mvn --projects dubbo-admin-server spring-boot:run
      或者
    • cd dubbo-admin-distribution/target; java -jar dubbo-admin-${project.version}.jar
  4. 访问 http://localhost:38080

可以直接再IDE的md文件中进行允许编译对应的dubbo-admin的代码以及运行服务。

Dubbo-Admin 动态进行流量隔离

Dubbo提供动态流量隔离的服务治理能力,可以在无需重启应用的情况下,动态进行流量隔离。Dubbo可以通过XML配置,注解配置,动态配置实现流量隔离,这里主要介绍动态配置的方式。

允许多个Provider端服务

你可以直接进行运行服务进行运行多个实例。如下所示。

当然也可以通过VM参数进行调整为不同的dubbo.protocol.port,方便我们进行路由转发机制。

标签路由规则

将服务提供者进行分组,约束流量只在指定分组中流转,从而实现流量隔离的目的,有两种方式可以完成实例分组,分别是动态规则打标和静态规则打标

2.1 动态规则相较于静态规则优先级更高

标签路由

登录Dubbo-Admin控制台

用户名为root,密码为root。

在左侧导航栏选择服务治理 > 标签路由。

点击创建按钮,在创建新标签规则面板中,填写规则内容,然后单击保存。

配置模板

---
  force: false
  runtime: true
  enabled: true
  key: application-provider
  tags:
    - name: tag1
      addresses: ["127.0.0.1:20880"]
    - name: tag2
      addresses: ["127.0.0.1:20881"]
 ...

对于流量隔离场景,只需要理清楚以下问题基本就知道配置该怎么写了:

修改服务所属提供者应用的配置。

应用:scope: application, key: app-name(还可使用services指定某几个服务)。

当路由结果为空,是否强制返回。

  • force=false: 当路由结果为空,降级请求tag为空的提供者。
  • force=true: 当路由结果为空,直接返回异常。

路由规则的优先级

priority=1: 路由规则的优先级,用于排序,优先级越大越靠前执行,可不填,缺省为 0。

配置是否只对某几个特定实例生效。

所有实例:addresses: ["0.0.0.0"] 或addresses: ["0.0.0.0:*"] 具体由side值决定。

指定实例:addersses[实例地址列表]。

运行服务提供者

可以从dubbo-admin中看到对应的服务已经注册上来了

开发服务消费者

RpcContext.getContext().setAttachment("dubbo.tag",name);

切换不同的tag参数,即可完成流量转发:tag1 tag2

我们通过name参数进行切换标签

请求 GET http://127.0.0.1:8082/add?name=tag1&age=12

我们可以看到打印了对应provider1服务的日志

请求 GET http://127.0.0.1:8082/add?name=tag2&age=12

我们可以看到打印了对应provider2服务的日志

小伙伴们,你们学会了嘛?

本文来自博客园,作者:洛神灬殇,转载请注明原文链接:http://www.cnblogs.com/liboware/p/17060519.html,任何足够先进的科技,都与魔法无异。

本文转载于网络 如有侵权请联系删除

相关文章

  • IBM Semeru Windows 下的安装

    可以访问:IBMDeveloper 来下载。在界面中,选择你需要的版本和操作系统。semeru有认证版和非认证版,主要是因为和OpenJ9的关系和操作系统的关系而使用不同的许可证罢了,本质代码是一样的。在Windows下没有认证版,直接下开源版就行。可以下载msi包,让安装程序直接进行配置。运行安装程序双击安装程序,进行安装。同意许可证设置相关环境变量这里可以选择让安装程序设置JAVA_HOME环境变量和覆盖Oracle安装程序在Windows中创建的键值。如果你的操作系统中安装了多个JDK的话,建议不要让安装程序设置你的JAVA_HOME你可以自己进行设置。下一步继续安装。获得管理员权限进行安装安装需要管理员权限,在这里单击下一步继续。安装进程完成安装校验安装运行 java-version 来查看安装的版本。C:\Users\yhu>java-version openjdkversion"11.0.16"2022-07-19 IBMSemeruRuntimeOpenEdition11.0.16.0(build11.0.16+8) EclipseOpenJ9V

  • vuex-router-sync 源码解析

    vuex-router-sync:路由状态管理,保持vue-router和vuex存储同步。import{sync}from'vuex-router-sync' importrouterfrom'@/router' importstorefrom'@/store' sync(store,router) newVue({ el:'#app', router, store, components:{App}, template:'' })复制第1步:vuex模块动态注册constmoduleName=(options||{}).moduleName||'route' store.registerModule(moduleName,{ namespaced:true, state:cloneRoute(router.currentRoute), //route全部属性 mutations:{ //改变state值 'ROUTE_CHANGED'(s

  • mybatis-spring整合的三种(逐渐优化)方案

    第一种就是作者之前写过的,就是通过编写是实现类然后在实现类里面实现接口的方法,然后在applicationcontex.xml文件中注册创建一个该实现类的bean对象,然后在该对象中注入SQLSession的以来即可<?xmlversion="1.0"encoding="UTF-8"?> <beansxmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context&qu

  • 树莓派推出滑动式键盘笔记本,可以通过编程DIY自己的电脑 | 酷玩

    用户可以按照自己的意愿随时设置计算机。Pi-Top,是一家位于伦敦的创业公司,他们创建了由RaspberryPi驱动的笔记本电脑(又称树莓派),13日,这家公司宣布推出其最新一代树莓派笔记本电脑,让用户可以按照自己的意愿随时设置计算机。新的Pi-Top笔记本电脑采用RaspberryPi3,它包含四核1.2GhzARMCPU、1GB内存、蓝牙和Wi-Fi无线电芯片。此外,它拥有8到10个小时的电池寿命。关于新的笔记本,最有趣的部分是它的键盘。虽然从外表上看,树莓派笔记本就像一个传统的笔记本电脑,但是,用户可以滑动键盘来打开内部,接入模块后,使用者可以通过编程DIY自己的电脑。这款使用滑出式键盘的笔记本电脑,可以充分显露内部硬件模块,这是非常令人印象深刻的。当喜爱开发的科技爱好者想利用RaspberryPi3包含的一系列GPIO引脚接入各种外接模块(如电机、泵等)时,这一优点就十分显著了。树莓派笔记本基本上在确保了其便携式外形尺寸的同时,能够达到不削弱RaspberryPi的功能,并且不会阻止用户开发有趣的基于硬件的项目。Pi-Top在新闻稿称,其最新型号的笔记本电脑是世界上第一个采用滑

  • 谈谈addSubview和insertSubview

    子视图是以栈的方式存放的,也就是说有层次的存放addSubview:addsubview时都是在最上面面添加eg: <pre> UIView*v1=[UIViewnew];v1.frame=CGRectMake(100,100,100,60);v1.backgroundColor=[UIColorredColor];UIView*v2=[UIViewnew];v2.backgroundColor=[UIColorpurpleColor];v2.frame=CGRectMake(80,120,100,60);[self.viewaddSubview:v1];[self.viewaddSubview:v2]; </pre> 看到如下效果pic1insertSubviewinsertSubView可以控制将view添加到指定的层eg: <pre> UIView*v1=[UIViewnew];v1.frame=CGRectMake(100,100,100,60);v1.backgroundColor=[UIColorredColor];UIView*v2=[

  • Java基本包装类型

    基本类型的对象包装,也就是将常用的基本数据类型包装成对象byteByteshortShortintIntegerlongLongbooleanBooleanfloatFloatdoubleDoublecharCharacter最常用的作用就是基本数据类型与字符串的转换1.基本数据类型转字符串: 基本数据类型+”” 基本数据类型类.toString(基本类型的数值)2.字符串转成基本数据类型: Integer.parseInt() Long.parseLog() 对character不用转就是string3.进制转换: 向十进制转:toHexString() 向其他进制转换:parseInt(“”,radax)radax指的是字符串的进制4.自动拆箱和装箱: 1.5版本的新特性,自动装箱与拆箱以前要这么写:Integerx=newInteger(1) Integerx=newInteger("1")复制现在可以自动装箱: Integerx=5;//自动装箱 x=x+2//先拆箱后和装箱拆箱原理就是x.intValue()复制1.5后对于在byte范围(-128~+12

  • Cloudera(CDH) 简介和在线安装

    实验背景笔者需要维护线上的hadoop集群环境,考虑在本地搭建一套类似的hadoop集群,便于维护与管理。 Cloudera简介经过搜索发现Cloudera产品很适合笔者当前需求,于是开始研究Cloudera(CDH)的安装与使用,参考: Cloudera官网:https://www.cloudera.comCloudera官方文档:https://www.cloudera.com/documentation/enterprise/latest.htmlCDH是ApacheHadoop和相关项目的最完整,经过测试的流行发行版。CDH提供了Hadoop的核心元素-可扩展的存储和分布式计算-以及基于Web的用户界面和重要的企业功能。CDH是Apache许可的开放源码,是唯一提供统一批处理,交互式SQL和交互式搜索以及基于角色的访问控制的Hadoop解决方案。 Cloudera作为一个强大的商业版数据中心管理工具,提供了各种能够快速稳定运行的数据计算框架,如ApacheSpark;使用ApacheImpala做为对HDFS,HBase的高性能SQL查询引擎;也带了Hive数据仓库工具帮助用户

  • Selenium 库的基本用法

      1.基本使用 fromseleniumimportwebdriver fromselenium.webdriver.common.byimportBy fromselenium.webdriver.common.keysimportKeys fromselenium.webdriver.supportimportexpected_conditionsasEC fromselenium.webdriver.support.waitimportWebDriverWait brower=webdriver.Chrome() try: brower.get('https://www.baidu.com') input=brower.find_element_by_id('kw')#查找id为kw的元素 input.send_keys('Python')#向input文本框输入python input.send_keys(Keys.ENTER)#输入回车 wait=WebDriverWait(brower,10)#等待浏览器加载 wait.until(EC.presence_of_ele

  • Nginx企业级优化

    Nginx企业级优化 一、隐藏版本号信息 安装软件前修改,源码包中的版本信息 #切换到源码包目录[root@localhost~]#cd/usr/src/nginx-1.15.9/[root@localhostnginx-1.15.9]#vimsrc/core/nginx.h        #修改nginx.h配置文件#definenginx_version     1015009#defineNGINX_VERSION     "2.2.2"                     #版本号信息#defineNGINX_VER      &n

  • 2019-2020年度APT黑客组织被揭露过的网络攻击

    APT高级持续性威胁是一种发动复杂攻击手段达到窃取敏感信息而且不被发现的攻击形式,APT黑客组织攻击的目标包括政府,国防,金融服务,法律服务,工业,电信,消费品等等行业的单位与企业。 采用目标侦擦,渗透测试,绕过安全机制和窃取信息等不同阶段实施APT攻击。经验丰富的网络犯罪分子们花费大量时间对一个特定目标进行持久化渗透测试,获得访问权限。也有一定能力可以开发定制版恶意程序绕过杀毒软件查杀与网络入侵检测。 2019年的APT攻击 一月 1 Jan/16 LatestTargetAttackofDarkHydrunsGroupAgainstMiddleEast 2 Jan/17 MalwareUsedby“Rocke”GroupEvolvestoEvadeDetectionbyCloudSecurityProducts 3 Jan/18 DarkHydrusdeliversnewTrojanthatcanuseGoogleDriveforC2communications 4 Jan/24 GandCrabandUrsnifCampaign 5 Jan/30 Tar

  • OneDrive一直显示“正在处理更改” Label:Win10解决方案

    OneDrive会在其目录下建立一个存储状态的文件,如果该文件无法写入,就会一直进行同步工作,即使已经完成同步。这是由于重装系统后新用户没有权限操作旧用户的文件造成的。OneDrive文件夹右键属性安全中添加当前用户的完全控制权限即可   版权声明:本博客所有文章除特别声明外,均采用CCBY-NC-SA3.0许可协议。转载请注明出处!

  • SQL 存储过程优化经验

    经现场同事反映,他们用的好好的XML导出工具最近一直报错,经常报数据库连接超时,查看数据库发现已经有100G以上有空间了。 但导出数据的存储过程里面每次按时间只导1000多条数据,近理说有时间过滤应该不会产生问题。 将存储过程拉到SQLSERVER中执行,发现需要5分钟, --创建临时表用来存放数据 createtable#temp ( idvarchar(10), namevarchar(20), zg_idvarchar(10), ks_idvarchar(10) ) --按时间段插入数据 insertinto#temp(id,name) selectid,name fromtb1(nolock) wherebeginTimebetween'20150606'and'20150706' --按已有的数据关联其它表,补全其它数据 update#temp setzg_id=b.id from#tempa,tb_zgb(nolock) wherea.zg_id=b.id update#temp setks_id=b.id from#tempa,tb_ksb(nolock)

  • jdk证书

    每一步:进入某个https://www.xxx.com开头的网站,把要导入的证书下载过来,    在该网页上右键>>属性>>点击"证书">>    再点击上面的"详细信息"切换栏>>    再点击右下角那个"复制到文件"的按钮    就会弹出一个证书导出的向导对话框,按提示一步一步完成就行了。    例如:保存为abc.cer,放在C盘下第二步:如何把上面那步的(abc.cer)这个证书导入java中的cacerts证书库里?    方法如下    假设你的jdk安装在C:\jdk1.5这个目录,    开始>>运行>>输入cmd进入dos命令行>>    再用cd进入到C:\jdk1.5\jre\lib\security这个目录下    敲入如下命令回车执行    keytool-import-aliascacerts-keystorecacerts-filed:\software\AKAZAM-Mail.cer-trustcacerts    此时命令行会提示你输入cacerts证书库的密码,   

  • Twitter算法面试题详解(Java实现)——Trapping Rain Water

    【算法题:求出高低不同的砖中能存多少水】 「TrappingRainWater」 Given n non-negativeintegersrepresentinganelevationmapwherethewidthofeachbaris1,computehowmuchwateritisabletotrapafterraining. Forexample, Given [0,1,0,2,1,0,1,3,2,1,2,1],return 6. Theaboveelevationmapisrepresentedbyarray[0,1,0,2,1,0,1,3,2,1,2,1].Inthiscase,6unitsofrainwater(bluesection)arebeingtrapped.    解法思路:先找出数列中最左和最右的数值最大值,序列号为p、q(若最大值唯一则p、q相同),然后分三段计算存水量,具体代码如下: 1/* 2*算法题:求高低不同的砖中能存多少水 3*/ 4 5importjava.util.Arr

  • Xposed和JustTrustMe 下载地址

    Xposed安装器下载地址 安卓5.0版本如下下载地址:https://pan.baidu.com/s/1dEToAvJ 密码:uiu8 安卓5.0版本以上下载地址:https://files.cnblogs.com/files/pingming/xposedinstaller.apk JustTrustMeRelese版本下载地址:https://files.cnblogs.com/files/pingming/JustTrustMe.apk  github:https://github.com/Fuzion24/JustTrustMe/releases   转载:https://www.jianshu.com/p/310d930dd62fgit

  • 黑客来了。。。键盘钩子,听起来很高端。

    首先是这个公共的类:globalKeyboardHook.cs usingSystem; usingSystem.Collections.Generic; usingSystem.Text; usingSystem.Runtime.InteropServices; usingSystem.Windows.Forms; namespaceUtilities{ ///<summary> ///Aclassthatmanagesagloballowlevelkeyboardhook ///</summary> classglobalKeyboardHook{ #regionConstant,StructureandDelegateDefinitions ///<summary> ///definesthecallbacktypeforthehook ///</summary> publicdelegateintkeyboardHookProc(intcode,intwParam,refkeyboardHookStructlParam);

  • [k8s]容器及k8s学习笔记(目录)

    容器基础学习 容器:docker学习思路 三部曲: 1,vm会搭建服务 2,docker会跑服务 3,k8s集群会调度该服务 -存储 vm1vm2共享存储,vm1的容器挂了直接调度到vm2(docker存储驱动实现) -网络 物理机安装flannel,使两台docker上容器能通(物理机/容器搭建etcd集群) 物理机搭建openvswitch,实现两台docker -监控 cadvisor会跑 物理机安装grafana,物理机安装promethus(实现nodeexplore和mysqlexplore) 容器跑promethus+cadvisor+grafana 容器跑cadvisor+influendb+grafana 容器跑elk,物理机跑filebeat搜集容器日志 复制 k8s学习 我会陆陆续续小结下. dns相关 dns策略 1.集群内 2.指定内网subdomain 3.访问互联网resovel.conf 复制 kube-dns架构图解及策略 nginx-ingress:DNSPolicy导致hostnetwork网络问题 coredns/kube-dns配置subd

  • 关于网上quartus ii 生成fft核出现问题解决

    ------------恢复内容开始------------ 关于网上quartusii生成fft核出现问题解决 1:必须把软件破解啦 2:必须把IP核破解啦    破解步骤网上也有可以直接看,一定要全部破解,有问题的大部分是没有破解成功。 问题1:关于fft核生成过程中出现卡住不动 网上给出的2个解决方法 https://blog.csdn.net/tt2356/article/details/81138753 1.在ip核生成卡住的时候,把任务管理器里面的quartus_map进程结束。 2.更新JRE 个人经验:    关一次就行啦,后面还是会有quartus_map.exe    就会出现网上的.vo文件    仿真文件中一定要加入.vo文件,否则不能用    仿真结果    如果这里缺少文件,可以把.txt文件放到modelsim路径下    生成的ip自带matlab程序,可以进行对比    结果是一

  • 排序-冒泡排序

    大部分的互联网校招的笔试都会有算法与数据机构的题目,为了准备笔试,开始算法与数据结构的学习。 本文是基础的冒泡排序,此系列学习都用的C++.  冒泡排序语言叙述: 假设要求递增排序。选取第一个元素,遍历后面元素并与之比较,如果大于,则交换2者位置;重复上述过程,直到最后一个元素。 代码如下: boolBubbleSort(int*Array){ inttemp; for(inti=0;i<length(Array);i++){ for(intj=0;j<length(Array);j++){ if(Array[j]>Array[j+1]){ temp=Array[i]; Array[i]=Array[j]; Array[j]=temp; } } } returntrue; } 复制 这样的代码效率太低,因为不管这次循环有没有产生交换,都会把这次遍历跑完,其实没有必要这样,如果没有发生交换,则可以跳出本次循环,进行下一次循环,所以改进后如下: boolBubbleSort(int*Array){ in

  • js 对象、数组对象覆盖

    1.数组和数组对象覆盖合并vararrObject=[ {id:1,name:'zs'}, {id:2,name:'ls'}, {id:3,name:'we'}, ]; varobject={id:1,name:'ww'}; arrObject.forEach((val,key)=>{ if(val.id===object.id){ Object.assign(val,object); } }) console.log(arrObject)//[{"id":1,"name":"ww"},{"id":2,"name":"ls"},{"id":3,"name":"we"}]复制 2.数组对象去重 vardataObjectArray=[ {id:1,name:'zs'}, {id:2,name:'ww'}, {id:1,name:'ls'}, {id:3,name:'ls'}, {id:4,name:'we'}, {id:2,name:'wmz'} ]; //使用obj来记录push过的值复制 varobj={};varresult=[];复制 for(vari=0;i<d

  • .技术参数图用pillow自动处理

    python2.7 pillow 安装python2.7.10(自带pip),修改豆瓣源,下载pillow

相关推荐

推荐阅读