简介:相信大家对Dubbo都不陌生。它是一个微服务开发框架,提供了RPC通信和微服务治理两大关键能力。在日常开发中,大家使用较多的是Dubbo提供的RPC通信能力,相对较少使用Dubbo提供的服务治理能力。本文的重点将放在服务治理上。Dubbo框架提供了极其丰富的服务治理功能,如流量控制、动态配置、服务mock、服务测试等,而Dubbo-Admin的作用是为服务治理能力提供一个开箱即用的平台由Dubbo框架提供。本文将介绍Dubbo-Admin提供的功能,让大家快速了解和使用Dubbo-Admin,初步了解Dubbo提供的服务治理能力。作者介绍程璐,Java开发工程师,中间件开发爱好者,关注服务治理。严昊,Dubbo贡献者,专注于RPC、服务治理等领域。前言Dubbo相信大家都不陌生。它是一个微服务开发框架,提供了RPC通信和微服务治理两大关键能力。在日常开发中,大家更多的是使用dubbo提供的RPC通信能力,相对较少使用dubbo提供的服务治理能力。本文的重点将放在服务治理上。dubbo框架提供了极其丰富的服务治理功能,如流量控制、动态配置、服务mock、服务测试等,而dubbo-admin的作用是为服务治理能力提供一个开箱即用的平台dubbo框架提供。本文将介绍dubbo-admin提供的功能,让大家快速了解和使用dubbo-admin,对dubbo提供的服务管理能力有一个初步的了解。服务详情服务详情会在接口维度展示dubbo服务提供的服务信息,包括服务提供者、消费者信息以及提供的方法名、参数列表等服务元数据信息。最新版本支持dubbo3.0提供的应用级发现模型,注册源以应用级/接口级区分。动态路由Dubbo-Admin提供了三种路由的支持,分别是条件路由、标签路由和Mesh路由。提供的功能可以轻松满足黑白名单、集群隔离、金丝雀发布等服务治理需求。下面将举例说明这部分的功能。条件路由条件路由可以写一些自定义的路由规则来满足服务治理的需要,比如黑白名单,读写分离等。路由规则在发起RPC调用之前起到过滤目标服务器地址的作用,过滤后的地址列表将作为消费者最终发起RPC调用的备选地址。下图显示了一个简单的黑名单功能的实现。这条路由规则的意思是禁止IP为172.22.3.91的消费者调用服务HelloService。条件路由规则格式为:[服务消费者匹配条件]=>[服务提供者匹配条件]。标签路由标签路由将一个或多个服务商划分到同一组,约束流量只在指定的组内流动,从而达到流量隔离的目的,可作为蓝绿发布、灰度发布和其他场景。根据。在provider应用层创建规则,对应的静态标签为dubbo.provider.tag=tag1和@DubboService(tag="tag2")。Mesh路由Mesh路由是dubbo3.0推出的一种全新的路由规则,功能极其强大。使用mesh路由可以覆盖以上两种路由的功能场景,也可以结合更复杂的路由场景。Mesh路由将整个流量管理分为两部分,VirtualService和DestinationRule。VirtualService匹配入口流量,DestinationRule匹配出口流量。下面将实现一个案例,通过传入参数number路由服务HelloService的hi方法,将传入参数为偶数的请求路由到标签为v1的服务,传入参数为奇数的服务进行路由的功能标签为v2的服务的参数。publicinterfaceHelloService{Stringhi(Integernumber);}服务实现返回服务提供者端口。publicclassHelloServiceImplimplementsHelloService{@Value("${dubbo.protocol.port}")私有字符串端口;@OverridepublicStringhi(Integernumber){return"hi"+number+",myportis:"+port;}}第一步:启动两个服务提供者参数分别是port=20883、dubbo.application.parameters.test-version=v1和port=20884、dubbo.application.parameters.test-version=v2,通过dubbo中定义的参数.application.parameters将暴露在服务的URL上。dubbo.application.parameters.test-version=v1dubbo.protocol.port=20883第二步:创建mesh路由规则,定义了VirtualService和DestinationRule两部分。DestinationRule部分将服务URL参数test-version=v1和test-version=v2分别划分为服务v1和v2。VirtualService会匹配服务HelloService#hi方法的入参,将偶数路由到v1服务,将奇数路由到标签为v2的服务。apiVersion:service.dubbo.apache.org/v1alpha1kind:VirtualServicemetadata:name:demo/oddEvenRouterspec:dubbo:-routedetail:-match:-method:argc:1args:-index:0num_value:oneof:-exact:0.0mod:2.0类型:intname_match:exact:hiname:even-routeroute:-destination:host:demosubset:v1-match:-method:argc:1args:-index:0num_value:oneof:-exact:1.0mod:2.0type:intname_match:exact:hiname:odd-routeroute:-destination:host:demo2subset:v2services:-exact:org.test.apache.dubbo.interfaces.HelloService---apiVersion:service.dubbo.apache.org/v1alpha1kind:目标ionRulemetadata:name:test-routespec:host:demosubsets:-name:v1labels:test-version:v1-name:v2labels:test-version:v2第三步:启动consumer进行测试,可以看到返回结果如下正如我们所料,通过上诉案例,实现了一个简单的灰度功能。当然,A/B测试、金丝雀发布等功能也可以轻松实现。动态配置动态配置提供了一种无需重新启动能力即可动态调整RPC调用行为的方法。例如修改超时时间、权重、负载均衡策略调整、服务降级等。避免为了调整Dubbo参数需要重启服务,下面将展示一些常见的参数调整情况。将超时时间调整为6000参数权重调整configVersion:v2.7scope:applicationkey:demo-providerenabled:trueconfigs:-addresses:["10.20.153.10:20880"]side:providerparameters:weight:200loadpolicyadjustmentconfigVersion:v2.7scope:applicationkey:demo-consumerenabled:trueconfigs:-side:consumerparameters:loadbalance:random文档和测试接口文档dubbo-Api-Docs是一个展示dubbo接口文档和测试接口的工具,相当于swaggerfor的作用RESTful风格的网络服务。dubbo服务要使用该功能,需要引入相关包dubbo-api-docs-annotations和dubbo-api-docs-core,以注解的形式用于描述接口和参数信息。
