Dubbo

Dubbo中用zookeeper 做注册中心,如果注册中心集群都挂掉,发布者和订阅者之间还能通信么

dubbo 时,消费者会从 zk 拉取注册的生产者的地址接口等数据,缓存在本地。每次调用时,按照本地存储的地址进行调用;  注册中心对等集群,任

意一台宕机后,将会切换到另一台;注册中心全部宕机后,服务的提供者和消费者仍能通过本地缓存通讯。服务提供者无状态, 任一台宕机后,不影响

使用;服务提供者全部宕机,服务消费者会无法使  用,并无限次重连等待服务者恢复;  挂掉是不要紧的,但前提是你没有增加新的服务,如果你要调

用新的服务,则是不能办到的。

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

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

什么是Hessian 协议

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

Hessian 的远程调用协议。 

连接个数:多连接 连接方式:短连接 传输协议:HTTP 传输方式:同步传输序列化:Hessian 二进制序列化

适用范围:传入传出参数数据包较大,提供者比消费者个数多,提供者 压力较大,可传文件。

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

Dubbo 协议为什么要消费者比提供者个数多

因 dubbo 协议采用单一长连接,假设网络为千兆网卡(1024Mbit=128MByte),根 据测试经验数据每条连接最多只能压满 7MByte(不同的环

境可能不一样,供参考),理论上 1 个服务提供者需要 20 个服务消费者才能压满网卡。

Dubbo 协议为什么不能传大包

因 dubbo 协议采用单一长连接, 如果每次请求的数据包大小为 500KByte,假设网络为千兆网卡

(1024Mbit=128MByte)

每条连接最大 7MByte(不同的环境可能不一样,供参考), 

单个服务提的 TPS(每秒处理事务数)最大为:128MByte / 500KByte = 262。 

单个消费者调用单个服务提供者的TPS(每秒处理事务数)最大为:7MByte / 500KByte = 14。

如果能接受,可以考虑使用,否则网络将成为瓶颈。

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

因为服务的现状大都是服务提供者少,通常只有几台机器,而服务的消费者多,可能整个网站都在访问该服务, 比如 Morgan 的提供者只有 6 台提

供者,却有上百台消费者,每天有 1.5亿次调用,如果采用常规的 hessian 服务,服务提供者很容易就被压跨,通过单一连接,保证单一消费者不会 

压死提供者, 长连接,减少连接握手验证等, 并使用异步 IO,复用线程池,防止 C10K 问题。

dubbo 协议适用范围

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

常规远程服务方法调用 dubbo 协议补充: 连接个数:单连接 连接方式:长连接传输协议:TCP 传输方式:NIO 
异步传输序列化:Hessian 二进制序列化

RMI 协议采用的标准

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

连接个数:多连接连接方式:短连接 传输协议:TCP 传输方式:同步传输 序列化:Java 标准二进制序列化 

适用范围:传入传出参数数据包大小混合,消费者与提供者个数差不多,可传文件。适用场景:常规远程服务方法调用,与原生RMI 服务互操作

http 采用 Spring 的 HttpInvoker 实现

基于 http 表单的远程调用协议。连接个数:多连接 连接方式:短连接 传输协议:HTTP 传输方式:同步传输序列化:表单序列化(JSON) 

适用范围:传入传出参数数据包大小混合,提供者比消费者个数多,可用浏览器查看,可用表单或 URL 传入参数, 暂不支持传文件。

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

Webservice 基于 CXF 的 frontend-simple 和 transports-http 实现

基于WebService 的远程调用协议。 连接个数:多连接 

连接方式:短连接 传输协议:HTTP

传输方式:同步传输 序列化:SOAP 文本序列化

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

概述下Thrif

Thrift 是 Facebook 捐给 Apache 的一个 RPC 框架,当前 dubbo 支持的 thrift 协议是对 thrift 原生协议的扩展,在原生协议的基础

上添加了一些额外的头信 息,比如 service name,magic number 等