dubbo

JAVA ZMAS 12℃ 0评论

[必会]dubbo综合话术

   我最近做的这个项目使用的就是这个dubbo框架,Dubbo是一个高性能,基于Java的RPC框架(RPC是远程过程调用的简称,广泛使用的有RMI、Hessian、Dubbo等),由阿里巴巴开源。和许多RPC系统一样,dubbo基于定义一个服务的思想,指定可以通过参数和返回类型远程调用的方法。在服务器端,服务器实现这个接口并运行一个dubbo服务器来处理客户端调用。在客户端,客户端有一个存根,提供与服务器相同的方法。

之前啊我们项目组之维护上一个项目组所留下来的项目,在维护的过程中我发现,服务之间的调用和展示曾之间的引用特别繁琐,我们是花了好长一段时间来分析这个老项目之间的服务之间的关系。所以我这个项目使用了分布式的框架用了dubbo,我用dubbo的主要思想就是,我会根据我们这个项目的 业务拆分服务。按照功能暴露接口。不是按照某功能的一个步骤去爆露接口。
因为dubbo不支持分布式事务处理,而且按步骤暴露接口会导致接口爆炸太杂乱>

dubbo特点:

Dubbo是一个分布式服务框架,以及SOA治理方案,还是一种高性能和透明化的RPC远程服务调用方案。其核心部分包含:
a.:远程通讯(提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式)
b:集群容错(提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。)
c:自动发现(基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器)。
d:负载均衡

dubbo原理

1:提供服务区去注册中心添加服务,
2:消费者去注册中心寻找服务
3:返回一个ip和url。
4:通过ip和url直接去访问提供服务者。
5,提供者着和消费者都会往Monitor中去记录服务的调用和需求。

[熟悉]Dubbo优化

超时设置
DUBBO消费端设置超时时间需要根据业务实际情况来设定,默认的超时时间是1秒,
如果设置的时间太短,一些复杂业务需要很长时间完成,导致在设定的超时时间内无法完成正常的业务处理。
这样消费端达到超时时间,那么dubbo会进行重试机制,不合理的重试在一些特殊的业务场景下可能会引发很多问题,需要合理设置接口超时时间。
比如发送邮件,可能就会发出多份重复邮件,执行注册请求时,就会插入多条重复的注册数据。
消费者调用服务者的问题:
消费者调用提供服务者 本地会发生缓存通过jdk动态代理 有一次我们linux服务器因为一个实习生挂掉了,但是我发现服务之间的调用关系还是可以使用,我感觉非常奇怪,就去看了一下dubbo的源码,最后发现dubbo对zookpeer的依赖并不强 属于弱依赖 他会在本地会发生缓存服务提供者的地址列表,直接进行调用 (如果本地有缓存的情况下,也是可以用的)

[熟悉]dubbo中序列化的方式

dubbo序列化:阿里尚未开发成熟的高效java序列化实现,阿里不建议在生产环境使用它
hessian2序列化:hessian是一种跨语言的高效二进制序列化方式。但这里实际不是原生的hessian2序列化,而是阿里修改过的hessian lite,它是dubbo RPC默认启用的序列化方式
json序列化:目前有两种实现,一种是采用的阿里的fastjson库,另一种是采用dubbo中自己实现的简单json库,但其实现都不是特别成熟,而且json这种文本序列化性能一般不如上面两种二进制序列化。
java序列化:主要是采用JDK自带的Java序列化实现,性能很不理想。

[必会]dubbo负载均衡策略实现

随机,按权重设置随机概率。
轮循,按公约后的权重设置轮循比率。
最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差。

[熟悉]dubbo中对服务多版本的支持

dubbo中对服务多版本的支持
当一个接口实现,出现不兼容升级时,可以用版本号过渡,版本号不同的服务相互间不引用。
在低压力时间段,先升级一半提供者为新版本
再将所有消费者升级为新版本
然后将剩下的一半提供者升级为新版本

[熟悉]dubbo中 常使用的协议

dubbo协议 rmi协议 hessian协议 http协议
webservice:// thrift:// memcached://
redis://

[了解]dubbo的协议(详细)

(i)协议支持 Dubbo支持多种协议,如下所示: Dubbo协议Hessian协议 HTTP协议RMI协议 WebService 协议 Thrift协议 Memcached协议 Redis协议 在通信过程中,不同的服务等级一般对应着不同的服务质量,那么选择合适的协议便是一件非常重要的事 情。你 可以根据你应用的创建来选择。例如,使用RMI协议,一般会受到防火墙的限制,所以对于外部与内部进 行通信 的场景,就不要使用RMI协议,而是基于HTTP协议或者Hessian协议。
(2)默认使用Dubbo协议 连接个数:单连接 连接方式:长连接 传输协议:TCP 传输方式:NI0异步传输 序列化:Hessian二进制序列化 适用范围:传入传出参数数据包较小(建议小于100K),消费者比提供者个数多,单一消费者无法压满 提供者,尽量不要使用dubbo协议传输大文件或超大字符串 使用场景:常规远程服务方法调用 从上面的适用范围总结,dubbo适合小数据量大并发的服务调用,以及消费者机器远大于生产者机器数的 情况,不适合传输大数据量的服务比如文件、视频等,除非请求量很低。

转载请注明:ZMAS‘S blog » dubbo

喜欢 (3)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址