RPC 通信协议

Dubbo3 提供了 Triple(Dubbo3)、Dubbo2 协议,这是 Dubbo 框架的原生协议。除此之外,Dubbo3 也对众多第三方协议进行了集成,并将它们纳入 Dubbo 的编程与服务治理体系。

RPC 协议的选择

协议是 RPC 的核心,它规范了数据在网络中的传输内容和格式。除必须的请求、响应数据外,通常还会包含额外控制数据,如单次请求的序列化方式、超时时间、压缩方式和鉴权信息等。

协议的内容包含三部分

  • 数据交换格式: 定义 RPC 的请求和响应对象在网络传输中的字节流内容,也叫作序列化方式
  • 协议结构: 定义包含字段列表和各字段语义以及不同字段的排列方式
  • 协议通过定义规则、格式和语义来约定数据如何在网络间传输。一次成功的 RPC 需要通信的两端都能够按照协议约定进行网络字节流的读写和对象转换。如果两端对使用的协议不能达成一致,就会出现鸡同鸭讲,无法满足远程通信的需求。

RPC 协议的设计需要考虑以下内容:

  • 通用性: 统一的二进制格式,跨语言、跨平台、多传输层协议支持
  • 扩展性: 协议增加字段、升级、支持用户扩展和附加业务元数据
  • 性能:As fast as it can be
  • 穿透性:能够被各种终端设备识别和转发:网关、代理服务器等 通用性和高性能通常无法同时达到,需要协议设计者进行一定的取舍。

Dubbo3.0支持的协议有哪些

RPC协议支持的源码在dubbo-rpc模块中。

Dubbo3.0支持很多协议,如下:

协议名 描述
Triple 以 HTTP2 作为传输层构建新的协议。
dubbo 采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。
grpc gRPC 是谷歌开源的一套 RPC 协议框架
injvm 发布到本地时使用的时injvm协议,是指服务器发布方和引用方的程序在同一个jvm中执行。
rest 基于标准的Java REST API——JAX-RS 2.0(Java API for RESTful Web Services的简写)实现的REST调用支持

1. Triple协议

简介

Triple 协议是 Dubbo3 推出的主力协议。Triple 意为第三代,通过 Dubbo1.0/ Dubbo2.0 两代协议的演进,以及云原生带来的技术标准化浪潮,Dubbo3 新协议 Triple 应运而生。

采用分层设计,其数据交换格式基于Protobuf (Protocol Buffers) 协议开发,具备优秀的序列化/反序列化效率,当然还支持多种序列化方式,也支持众多开发语言。在传输层协议,Triple 选择了 HTTP/2,相较于 HTTP/1.1,其传输效率有了很大提升。此外HTTP/2作为一个成熟的开放标准,具备丰富的安全、流控等能力,同时拥有良好的互操作性。Triple 不仅可以用于Server端服务调用,也可以支持浏览器、移动App和IoT设备与后端服务的交互,同时 Triple协议无缝支持 Dubbo3 的全部服务治理能力。

在Cloud Native的潮流下,跨平台、跨厂商、跨环境的系统间互操作性的需求必然会催生基于开放标准的RPC技术,而gRPC顺应了历史趋势,得到了越来越广泛地应用。在微服务领域,Triple协议的提出与落地,是 Dubbo3 迈向云原生微服务的一大步。

现状

1、完整兼容grpc、客户端/服务端可以与原生grpc客户端打通

2、目前已经经过大规模生产实践验证,达到生产级别

特点与优势

1、具备跨语言互通的能力,传统的多语言多 SDK 模式和 Mesh 化跨语言模式都需要一种更通用易扩展的数据传输格式。

2、提供更完善的请求模型,除了 Request/Response 模型,还应该支持 Streaming 和 Bidirectional。

3、易扩展、穿透性高,包括但不限于 Tracing / Monitoring 等支持,也应该能被各层设备识别,网关设施等可以识别数据报文,对 Service Mesh 部署友好,降低用户理解难度。

4、多种序列化方式支持、平滑升级

5、支持 Java 用户无感知升级,不需要定义繁琐的 IDL 文件,仅需要简单的修改协议名便可以轻松升级到 Triple 协议

Triple 协议内容介绍

基于 grpc 协议进行进一步扩展

  • Service-Version → “tri-service-version” {Dubbo service version}
  • Service-Group → “tri-service-group” {Dubbo service group}
  • Tracing-ID → “tri-trace-traceid” {tracing id}
  • Tracing-RPC-ID → “tri-trace-rpcid” {_span id _}
  • Cluster-Info → “tri-unit-info” {cluster infomation}

其中 Service-Version 跟 Service-Group 分别标识了 Dubbo 服务的 version 跟 group 信息,因为grpc的 path 申明了 service name 跟 method name,相比于 Dubbo 协议,缺少了version 跟 group 信息;Tracing-ID、Tracing-RPC-ID 用于全链路追踪能力,分别表示 tracing id 跟 span id 信息;Cluster-Info 表示集群信息,可以使用其构建一些如集群划分等路由相关的灵活的服务治理能力。

Triple Streaming

Triple协议相比传统的unary方式,多了目前提供的Streaming RPC的能力。

Streaming 用于什么场景呢?

在一些大文件传输、直播等应用场景中, consumer或provider需要跟对端进行大量数据的传输,由于这些情况下的数据量是非常大的,因此是没有办法可以在一个RPC的数据包中进行传输,因此对于这些数据包我们需要对数据包进行分片之后,通过多次RPC调用进行传输,如果我们对这些已经拆分了的RPC数据包进行并行传输,那么到对端后相关的数据包是无序的,需要对接收到的数据进行排序拼接,相关的逻辑会非常复杂。但如果我们对拆分了的RPC数据包进行串行传输,那么对应的网络传输RTT与数据处理的时延会是非常大的。

为了解决以上的问题,并且为了大量数据的传输以流水线方式在consumer与provider之间传输,因此Streaming RPC的模型应运而生。

通过Triple协议的Streaming RPC方式,会在consumer跟provider之间建立多条用户态的长连接,Stream。同一个TCP连接之上能同时存在多个Stream,其中每条Stream都有StreamId进行标识,对于一条Stream上的数据包会以顺序方式读写。

案例

  1. 引入triple支持包。
        <dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-rpc-triple</artifactId></dependency>
  1. 生产者消费者修改协议名
dubbo:protocol:port: 20880name: tri

2. dubbo协议

简介

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

反之,Dubbo 缺省协议不适合传送大数据量的服务,比如传文件,传视频等,除非请求量很低。

特性

缺省协议,使用基于 mina 1.1.7 和 hessian 3.2.1 的 tbremoting 交互。

  • 连接个数:单连接
  • 连接方式:长连接
  • 传输协议:TCP
  • 传输方式:NIO 异步传输
  • 序列化:Hessian 二进制序列化
  • 适用范围:传入传出参数数据包较小(建议小于100K),消费者比提供者个数多,单一消费者无法压满提供者,尽量不要用 dubbo 协议传输大文件或超大字符串。
  • 适用场景:常规远程服务方法调用

约束

  • 参数及返回值需实现 Serializable 接口
  • 参数及返回值不能自定义实现 List, Map, Number, Date, Calendar 等接口,只能用 JDK 自带的实现,因为 hessian 会做特殊处理,自定义实现类中的属性值都会丢失。
  • Hessian 序列化,只传成员属性值和值的类型,不传方法或静态变量,兼容情况:


接口增加方法,对客户端无影响,如果该方法不是客户端需要的,客户端不需要重新部署。输入参数和结果集中增加属性,对客户端无影响,如果客户端并不需要新属性,不用重新部署。

输入参数和结果集属性名变化,对客户端序列化无影响,但是如果客户端不重新部署,不管输入还是输出,属性名变化的属性值是获取不到的。

总结:服务器端和客户端对领域对象并不需要完全一致,而是按照最大匹配原则。

案例

修改协议名为dubbo即可。

dubbo:protocol:port: 20880name: dubbo

Dubbo3.0系列(6)- Dubbo3.0支持的RPC协议相关推荐

  1. Vue3.0系列(一): VUE3.0的新特性

    和Vue2.0 相比,Vue3.0有哪些亮点: 序号 特性 解析 1 Performance 性能上比Vue2.0快1.3-2倍 2 Tree shaking support 按需编译,体积更加轻量化 ...

  2. diskgeniusv4.4.0_一文上手最新Tensorflow2.0系列|TensorFlow2.0安装

    本文中我们将会详细讲解TensorFlow2.0安装.Tensorflow兼容性最好的是Unix内核的系统,如Linux,MacOS等.另外TensorFlow的GPU版本仅支持Linux环境,不支持 ...

  3. Dubbo 3.0 前瞻之:常用协议对比及 RPC 协议新形态探索

    作者 | 郭浩(项升)  阿里巴巴经济体 RPC 框架负责人 导读:Dubbo 社区策划了[Dubbo 云原生之路]系列文章,和大家一起回顾 Apache Dubbo 产品和社区的发展,并展望未来发展 ...

  4. Dubbo3.0系列(2)- Dubbo3.0核心概念与架构

    前言 本文整理内容来自官网:https://dubbo.apache.org/zh/docs/concepts/ 服务发现 服务发现,即消费端自动发现服务地址列表的能力,是微服务框架需要具备的关键能力 ...

  5. Android音视频学习系列(七) — 从0~1开发一款Android端播放器(支持多协议网络拉流本地文件)

    系列文章 Android音视频学习系列(一) - JNI从入门到精通 Android音视频学习系列(二) - 交叉编译动态库.静态库的入门 Android音视频学习系列(三) - Shell脚本入门 ...

  6. SpringBoot 2.0 系列001 -- 入门介绍以及相关概念

    为什么80%的码农都做不了架构师?>>>    SpringBoot 2.0 系列001 -- 入门介绍以及相关概念 什么是SpringBoot? 项目地址:http://proje ...

  7. Hadoop 生态系列之 1.0 和 2.0 架构

    自学大数据有一段时间了,找工作历时一周,找到一家大厂,下周入职,薪资待遇还不错,公司的业务背景自己也很喜欢.趁着还没有入职,给大家争取先把 Hadoop 系列的文章总结完毕,可以当做科普文,也可以当做 ...

  8. Hadoop 系列之 1.0 和2.0 架构

    Hadoop 系列之 1.0 和2.0 架构 自学大数据有一段时间了,找工作历时一周,找到一家大厂,下周入职,薪资待遇还不错,公司的业务背景自己也很喜欢.趁着还没有入职,给大家争取先把 Hadoop ...

  9. Hadoop 基础系列一Hadoop 系列之 1.0 和2.0 架构

    精选30+云产品,助力企业轻松上云!>>> Hadoop 系列之 1.0 和2.0 架构 自学大数据有一段时间了,找工作历时一周,找到一家大厂,下周入职,薪资待遇还不错,公司的业务背 ...

最新文章

  1. 区块链笔记-Hash算法
  2. 使用ssh-keygen和ssh-copy-id三步实现SSH无密码登录
  3. NET 应用架构指导 V2 学习笔记(十九) 表现层组件设计指导
  4. 一站式解决使用枚举的各种痛点
  5. pom.xml配置文件中所有标签及作用简单描述
  6. opencv+pythons相机标定源码解析
  7. Django--实现分页功能,并且基于cookie实现用户定制每页的数据条数
  8. 小程序 text decode 真机无效_【移动端测试】APP自动化测试案例2:微信小程序自动化测试...
  9. 【无码专区1】简单路径的第二大边权(启发式合并+最小生成树)
  10. rz/sz:工作原理
  11. surging+EFCore 服务实现入门
  12. php小偷程序实例代码
  13. windows 端口被System进程占用怎么解决?
  14. nginx实现均衡负载、nginx第三方模块的添加
  15. 虎符WEB Writeup
  16. 剑~~~~~~~~~~
  17. 用python实现识别框选图片字体部分,并分割成单独图片
  18. 零基础入门学习Python--永久存储:腌制一缸美味的泡菜
  19. STVP ST Visual Programmer 下载程序出错
  20. 经济金融经典书籍推荐(中文版)——转自豆瓣

热门文章

  1. ps怎么抠图?教你怎么用钢笔工具抠图
  2. flutter的Toast
  3. excel求方差和标准差的函数_Excel如何计算方差与均方差
  4. Chrome插件 Tamper Dev
  5. 贪婪算法-Greedy algorithm
  6. 北大青鸟毕业的程序员该何去何从
  7. 企业级网络架构: 综合项目和网络升级(NETWORK05----DAY26)
  8. ATF官方文档翻译(二):Authentication Framework Chain of Trust(身份验证框架和信任链)(1)
  9. win7 简易版升级旗舰版
  10. 逻辑运算符(logical operator)