Dubbo

时间:2019-09-26
本文章向大家介绍Dubbo,主要包括Dubbo使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

Dubbo是一个分布式服务框架,以及SOA治理方案。其功能主要包括:高性能NIO通讯及多协议集成,服务动态寻址与路由,软负载均衡与容错,依赖分析与降级等。

Dubbo通过长连接减少握手,通过NIO及线程池在单连接上并发拼包处理消息,通过二进制流压缩数据,比常规HTTP等短连接协议更快。在阿里巴巴内部,每天支撑2000多个服务,30多亿访问量,最大单机支撑每天近1亿访问量。

Dubbo RPC服务框架支持丰富的传输协议、序列化方式等通讯相关的配置和扩展。dubbo执行一次RPC请求的过程大致如下:消费者(Consumer)向注册中心(Registry)执行RPC请求,注册中心分配服务URL并路由到具体服务提供方(Provider),消费者和服务提供方建立网络连接,服务提供方在本地创建连接池对象并提供远程服务,对于长连接类型协议(如dubbo协议)将保持连接,减少握手认证,调用过程中可以避免频繁建立和断开连接导致的性能开销,保持长连接需要有心跳包的发送,所以对于非频繁调用的服务保持连接同样会有消耗。

长传输协议:dubbo
传输框架:Netty
序列化方式:Hession2

dubbo协议采用NIO复用单一长连接更适合满足高并发小数据量的rpc调用

  • 使用Zookeeper作为服务注册中心
  • 补充:
    mvc架构  --垂直应用架构,前后端分离。
    rpc     --分布式服务架构  使用RPC框架 dubbo
    SOA架构  --流动计算架构  新增调度中心,对服务管控,监督
    微服务架构   在SOA的基础上,将功能分散到各个离散的服务当中。
    微服务技术关注: 服务注册、发现、负载均衡、健康检查、前端路由、容错、服务框架的选择、
    动态配置管理等。
    

dubbo通信协议dubbo协议适用范围和适用场景

适用范围:传入传出参数数据包较小(建议小于100K),消费者比提供者个数多,单一消费者无法压满提供者,尽量不要用dubbo协议传输大文件或超大字符串。

适用场景:常规远程服务方法调用

dubbo协议补充:
连接个数:单连接
连接方式:长连接
传输协议:TCP
传输方式:NIO异步传输
序列化:Hessian二进制序列化

Hessian协议

Hessian协议用于集成Hessian的服务,Hessian底层采用Http通讯,采用Servlet暴露服务,Dubbo缺省内嵌Jetty作为服务器实现
基于Hessian的远程调用协议。

适用场景:页面传输,文件传输,或与原生hessian服务互操作

连接个数:多连接
连接方式:短连接
传输协议:HTTP
传输方式:同步传输
序列化:Hessian二进制序列化
适用范围:传入传出参数数据包较大,提供者比消费者个数多,提供者压力较大,可传文件。

http协议

采用Spring的HttpInvoker实现
基于http表单的远程调用协议。

适用场景:需同时给应用程序和浏览器JS使用的服务。

连接个数:多连接
连接方式:短连接
传输协议:HTTP
传输方式:同步传输
序列化:表单序列化(JSON)
适用范围:传入传出参数数据包大小混合,提供者比消费者个数多,可用浏览器查看,可用表单
或URL传入参数,暂不支持传文件。

Webservice协议

基于CXF的frontend-simple和transports-http实现
基于WebService的远程调用协议。

适用场景:系统集成,跨语言调用。

连接个数:多连接
连接方式:短连接
传输协议:HTTP
传输方式:同步传输
序列化:SOAP文本序列化

RMI协议

RMI协议采用JDK标准的java.rmi.*实现,采用阻塞式短连接和JDK标准序列化方式,Java标准的远程调用协议。

适用场景:常规远程服务方法调用,与原生RMI服务互操作

连接个数:多连接
连接方式:短连接
传输协议:TCP
传输方式:同步传输
序列化:Java标准二进制序列化
适用范围:传入传出参数数据包大小混合,消费者与提供者个数差不多,可传文件。

dubbo服务负载均衡策略

Random LoadBalance 随机,按权重
RoundRobin LoadBalance 轮询 存在慢的提供者累积请求问题
LeastActive LoadBalance 最小活跃数
ConsistentHash LoadBalance  一致性hash

Dubbo在安全机制方面是如何解决的

Dubbo通过Token令牌防止用户绕过注册中心直连,然后在注册中心上管理授权。Dubbo还提供服务黑白名单,来控制服务所允许的调用方。

dubbo服务集群配置(集群容错模式)

Failover Cluster(默认) 失败自动切换
Failfast Cluster  快速失败  只发起一次调用,失败立即报错
Failsafe Cluster   失败安全,出现异常时,直接忽略,写入日志
Failback Cluster   失败自动恢复,后台记录失败请求,定时重发。
Forking Cluster    并行调用多个服务器,只要一个成功即返回。

dubbo通信协议dubbo协议为什么要消费者比提供者个数多

因dubbo协议采用单一长连接,假设网络为千兆网卡(1024Mbit=128MByte),
根据测试经验数据每条连接最多只能压满7MByte(不同的环境可能不一样,供参考),理论上1个服务提供者需要20个服务消费者才能压满网卡。

dubbo通信协议dubbo协议为什么不能传大包

因dubbo协议采用单一长连接,
如果每次请求的数据包大小为500KByte,假设网络为千兆网卡(1024Mbit=128MByte),每条连接最大7MByte(不同的环境可能不一样,供参考),
单个服务提供者的TPS(每秒处理事务数)最大为:128MByte / 500KByte = 262。
单个消费者调用单个服务提供者的TPS(每秒处理事务数)最大为:7MByte / 500KByte = 14。
如果能接受,可以考虑使用,否则网络将成为瓶颈。

dubbo通信协议dubbo协议为什么采用异步单一长连接

因为服务的现状大都是服务提供者少,通常只有几台机器,
而服务的消费者多,可能整个网站都在访问该服务,
比如Morgan的提供者只有6台提供者,却有上百台消费者,每天有1.5亿次调用,
如果采用常规的hessian服务,服务提供者很容易就被压跨,
通过单一连接,保证单一消费者不会压死提供者,
长连接,减少连接握手验证等,
并使用异步IO,复用线程池,防止C10K问题。

Netty和Tomcat有什么区别?

Netty和Tomcat最大的区别就在于通信协议,Tomcat是基于Http协议的,他的实质是一个基于http协议的web容器,但是Netty不一样,他能通过编程自定义各种协议,因为netty能够通过codec自己来编码/解码字节流,完成类似redis访问的功能,这就是netty和tomcat最大的不同。

附:

dubbo开发手册

dubbo使用手册

原文:大专栏  Dubbo


原文地址:https://www.cnblogs.com/chinatrump/p/11589042.html