Dubbo的架构及使用法

作者 : 开心源码 本文共2982个字,预计阅读时间需要8分钟 发布时间: 2022-05-11 共98人阅读

1.?详情

Dubbo |?d?b??| 是阿里下的一个分布式、高性能、透明化的RPC服务框架,提供服务自动注册、自动发现等高效服务治理方案的开源框架。

1.1.?RPC需要处理的问题

1.1.1.?通询问题

主要是通过在用户端和服务器之间建立TCP连接,远程过程调使用的所有交换的数据都在这个连接里传输。连接可以是按需连接,调使用结束后就断掉,也可以是长连接,多个远程过程调使用共享同一个连接。

1.1.2.?寻址问题

A服务器上的应使用怎样告诉底层的RPC框架,如何连接到B服务器(如主机或者IP地址)以及特定的端口,方法的名称是什么,这样才能完成调使用。比方基于Web服务协议栈的RPC,就要提供一个endpoint URI,或者者是从UDDI服务上查找。假如是RMI调使用的话,还需要一个RMI Registry来注册服务的地址。

1.1.3.?序列化与反序列化

当A服务器上的应使用发起远程过程调使用时,方法的参数需要通过底层的网络协议如TCP传递到B服务器,因为网络协议是基于二进制的,内存中的参数的值要序列化成二进制的形式,也就是序列化(Serialize)或者编组(marshal),通过寻址和传输将序列化的二进制发送给B服务器。

同理,B服务器接收参数要将参数反序列化。B服务器应使用调使用自己的方法解决后返回的结果也要序列化给A服务器,A服务器接收也要经过反序列化的过程。

2.?Dubbo架构

2.2.?Dubbo注册中心

? Multicast注册中心

??Zookeeper注册中心

? Redis注册中心

? Simple注册中心

2.3.?协议

Dubbo缺省协议采使用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调使用,以及服务消费者机器数远大于服务提供者机器数的情况。

URL格式:

dubbo://username:password@host:port/path?key=value&key=value

3.?Dubbo优点

? 透明化的远程方法调使用,就像调使用本地方法一样调使用远程方法,只要简单配置,没有任何API侵入。

? 软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。

? 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑增加或者删除服务提供者。

? 服务接口监控与治理

Dubbo-admin与Dubbo-monitor提供了完善的服务接口管理与监控功能,针对不同应使用的不同接口,可以进行 多版本,多协议,多注册中心管理。

4.?推荐使用法

4.1.?在Provider上尽量多配置Consumer端属性

? timeout 方法调使用超时

? retries 失败重试次数,缺省是2(表示加上第一次调使用,会调使用3次)

? loadbalance 负载均衡算法(有多个Provider时,如何筛选Provider调使用),缺省是随机(random)。还可以有轮询(roundrobin)、最不活跃优先(leastactive,指从Consumer端并发调使用最好的Provider,可以减少的反应慢的Provider的调使用,由于反应更容易累积并发的调使用)

? actives 消费者端,最大并发调使用限制,即当Consumer对一个服务的并发调使用到上限后,新调使用会Wait直到超时。 在方法上配置(dubbo:method)则并发限制针对方法,在接口上配置(dubbo:service),则并发限制针对服务。

4.2.?Provider上配置正当的Provider端属性

? threads 服务线程池大小

? executes 一个服务提供者并行执行请求上限,即当Provider对一个服务的并发调使用到上限后,新调使用会Wait(Consumer可能到超时)。在方法上配置(dubbo:method )则并发限制针对方法,在接口上配置(dubbo:service),则并发限制针对服务。

4.3.?配置上Dubbo缓存文件

提供者列表缓存文件

4.4.?配置优先级

? 方法级优先,接口级次之,全局配置再次之。

? 假如级别一样,则消费方优先,提供方次之。

4.5.?推荐XML配置

<?xml version=”1.0″ encoding=”UTF-8″?>

<beans xmlns=”http://www.springframework.org/schema/beans”

xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”?

xmlns:dubbo=”http://code.alibabatech.com/schema/dubbo”

xsi:schemaLocation=”http://www.springframework.org/schema/beans

?http://www.springframework.org/schema/beans/spring-beans.xsd

?http://code.alibabatech.com/schema/dubbo

?http://code.alibabatech.com/schema/dubbo/dubbo.xsd”>

< !–提供方应使用信息,使用于计算依赖关系 –>

<dubbo:registry protocol=”zookeeper” address=”127.0.0.1:2181″/>

<!–用zookeeper注册中心暴露服务地址–>

<dubbo:protocol name=”dubbo” port=”20880″/>

<!– 使用dubbo协议在20880端口暴露服务 –>

<dubbo:provider timeout=”60000″ retries=”0″ accesslog=”true”/>

<!–设置服务方统一参数–>

<dubbo:service interface=”com.**.api.UserInfoService” ref=”userInfoService”/>

beans>

5.?Dubbo服务划分

1、接口尽可能大粒度,接口中的方法不要以业务流程来,这个流程尽量在方法逻辑中调使用,接口应代表一个完整的功能对外提供;

2、接口应以业务为单位,业务相近的进行笼统,避免接口数量爆炸

3、参数先做校验,在传入接口。

4、要做到在设计接口时,已经确定这个接口职责、预测调使用频率

6.?Dubbo服务高级特性

1、启动检查

在启动某服务时,先检查该服务所依赖的服务能否可使用,不可使用则抛出异常,以便上线时,能及早发现问题,默认check=“true”;

2、负载均衡

针对某一方法在db管控台进行配置

负载算法:随机(Random LoadBalance)、轮循(RoundRobin)、最少活跃调使用数(LeastActive ,越活跃接收请求的概率越大)、一致性hash(ConsistentHash )

3、线程模型:threadpool threads

最大线程数计算方式 ulimit -u命令计算服务器可执行最大线程数

4、只订阅

只订阅服务,自己不注册,例如该服务正在测试,先不能向zk中注册避免其余服务调使用它报错

5、只注册

只注册服务,不订阅;应使用在集群中该服务器上无该服务需要调使用的服务,就让他只注册,指定调使用其它服务器上的可使用服务

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Dubbo的架构及使用法

发表回复