一、Dubbo介绍
Java开发的同学置信对Dubbo都有理解,Dubbo是阿里开源的RPC/服务治理框架,以下是百度的解释:
Dubbo(读音[db])是阿里巴巴公司开源的一个高性能优良的服务框架,使得利用可通过高性能的 RPC 实现服务的输入和输出性能,能够和 [1] Spring框架无缝集成。Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大外围能力:面向接口的近程办法调用,智能容错和负载平衡,以及服务主动注册和发现。https://baike.baidu.com/item/...
首先Dubbo是一个RPC框架,如果零碎是微服务架构,服务之间能够通过Dubbo来调用,解耦调用者(Consumer)和服务提供者(Provider)的依赖问题,为了对立概念,前面都以Consumer称说服务调用者,以Provider称说服务提供者;
没有RPC框架,可能要在配置文件中硬编码很多服务地址,有了Dubbo之后,Consumer不必关怀有多少服务提供者,打个比方我想调用用户服务,你只有把服务名通知Dubbo,Dubbo会主动寻找相应的Provider,而不必在配置文件中写死,真正解放了运维。
Dubbo具体的性能就不在这里解释了,能够参考官网手册:
http://dubbo.apache.org/zh-cn...
二、Dubbo2.7介绍
Dubbo最新版本为2.7.6,2.7当前有大的变动,次要个性有:
1、Tag路由
标签路由通过将某一个或多个服务的提供者划分到同一个分组,束缚流量只在指定分组中流转,从而实现流量隔离的目标,能够作为蓝绿公布、灰度公布等场景的能力根底。
这是1个理论的例子:
force: false
假如以后tradecenter服务有2台机器,1台是172.21.107.21,另1台是172.21.107.22;
下面将tradecenter这个服务其中1台172.21.107.21,打了标签pre,后续Consumer调用时,只有带了pre的tag,就肯定会调用到这台机;而没带tag的会调用到另1台机172.21.107.22,这样就能够实现灰度公布了。
这个上面再重点讲述。
2、新增元数据中心
这块以前是全在注册核心,之所以独自分进去,也是思考性能、带宽的问题,因为有的配置Consumer基本不必关怀,当集群调用方增多的时候,如果还按以前的形式,将大大将减少网络的耗费。
元数据中心负责存储包含服务动态化配置、服务定义(如办法签名)等数据,默认提供Zookeeper, Redis反对。
3、动静配置核心
次要承当2个性能:
A、内部化配置。启动配置的集中式存储 (简略了解为dubbo.properties的内部化存储)。
B、服务治理。服务治理规定的存储与告诉。
启用动静配置,以Zookeeper为例
<dubbo:config-center address="zookeeper://127.0.0.1:2181"/>
理论反对Redis、Zookeeper,还有阿波罗等第三方配置核心;能够看到,这些也是不便运维的操作,以前这些操作可能须要重启利用,有了动静配置核心后只有在后盾配置就能够了。
三、灰度公布
咱们来看下如何通过tag路由做灰度,假如咱们的利用架构是这样的:
在接入层,即用户浏览器能够拜访到的是商城的接口,而后商城会依赖订单核心服务,订单又会依赖商品核心服务,举1个理论的例子,以下单接口为例:
1、用户调用接口下单接口;
2、商城调用订单核心保留订单接口;
3、订单调用商品核心查问接口接口;
以下面的场景来说须要做灰度首先在调用层须要将tag传递过去,通过以下代码传递tag:
RpcContext.getContext().setAttachment(TAG_KEY, "pre");
如何对利用中无侵入呢,官网倡议通过Filter或SPI的形式实现,具体形式是放在动静配置中,或环境配置中,而后在过滤器初始化的时候读取这个配置,而后每次调用前将tag传递到调用链中。
对于非Java利用,比方PHP,如果通过Hessian协定调用,通过http头传递就能够了,看下Hessian的实现:
RpcContext.getContext().setRemoteAddress(request.getRemoteAddr(), request.getRemotePort());
即在http头中这样传参数,Hessian Php客户端的实现,github上曾经有了,原仓库地址我曾经不记得了,我在github上曾经clone,并做了些优化,地址:
https://github.com/programwit...
function getStream($url, $data, $options)
即在http头中加上参数 headerdubbo.tag,下面tag内容是写死的,能够依据状况本人读取动静配置或环境配置。
四、Dubbo环境搭建
1、从github下载代码:https://github.com/apache/dubbo
2、切到相应分支,我用的是2.7.4.1的;
3、mvn编译就行了,mvn clean:compile
官网自带了一些样例代码,即demo模块,上面是demo的代码,实现形式有注解、api、xml的形式,我用xml的形式进行测试,其中dubbo-demo-xml-provider-service是我另外加的模块
这是consumer的xml配置,次要是多了 metadata-report和config-center的标签配置:
<dubbo:application name="demo-consumer"/>
记得在pom文件援用zookeeper的依赖:
<dependency>
provider的xml配置:
<dubbo:application name="demo-provider"/>
下面加了hessian协定,是为了不便PHP调用而测试的。
以下是运行后果:
往期精彩文章:
FastDFS不同步怎么破
OAuth2.0及Spring实现
Mysql中间件360 Atlas踩坑
RabbitMQ跨机房迁徙数据零失落
[](http://mp.weixin.qq.com/s?__b...
继续获取最新中间件等技术,请关注公众号: