趣谈网络协议
刘超
前网易研究院云计算技术部首席架构师
130417 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 51 讲
趣谈网络协议
15
15
1.0x
00:00/00:00
登录|注册

第35讲 | 二进制类RPC协议:还是叫NBA吧,总说全称多费劲

使用跨语言的RPC框架,如gRPC
需要通过横向扩展来抵消性能损耗
性能较低
支持RESTful方式
不需要共享JAR包
灵活性高
升级策略
严格的项目管理流程
难以维护复杂的依赖关系
对接口的定义和传输对象的依赖性较高
支持多种网络传输方式
支持多种序列化方式
高性能
异常事件
可读事件
可写事件
连接事件
对象传输
RPC调用
通过独一无二的起始数字解析类型
解决方案
缺点
优点
解决方案
缺点
优点
跨语言调用可以使用跨语言的RPC框架
在微服务场景下,Dubbo和Spring Cloud的选择取决于依赖管理和性能需求
RESTful API和Dubbo的RPC框架都有各自的应用场景
事件
非阻塞的基于事件的网络传输框架
序列化示例
自描述
跨语言调用
Spring Cloud
Dubbo
总结
Netty
Hessian2
RPC框架

该思维导图由 AI 生成,仅供参考

前面我们讲了两个常用文本类的 RPC 协议,对于陌生人之间的沟通,用 NBA、CBA 这样的缩略语,会使得协议约定非常不方便。
在讲 CDN 和 DNS 的时候,我们讲过接入层的设计,对于静态资源或者动态资源静态化的部分都可以做缓存。但是对于下单、支付等交易场景,还是需要调用 API。
对于微服务的架构,API 需要一个 API 网关统一的管理。API 网关有多种实现方式,用 Nginx 或者 OpenResty 结合 Lua 脚本是常用的方式。在上一节讲过的 Spring Cloud 体系中,有个组件 Zuul 也是干这个的。

数据中心内部是如何相互调用的?

API 网关用来管理 API,但是 API 的实现一般在一个叫作 Controller 层的地方。这一层对外提供 API。由于是让陌生人访问的,我们能看到目前业界主流的,基本都是 RESTful 的 API,是面向大规模互联网应用的。
在 Controller 之内,就是咱们互联网应用的业务逻辑实现。上节讲 RESTful 的时候,说过业务逻辑的实现最好是无状态的,从而可以横向扩展,但是资源的状态还需要服务端去维护。资源的状态不应该维护在业务逻辑层,而是在最底层的持久化层,一般会使用分布式数据库和 ElasticSearch。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

文章介绍了数据中心内部相互调用时采用二进制类RPC协议的重要性,以及解决协议约定问题的方式。在数据中心内部相互调用时,采用二进制的RPC机制能够更加省空间和带宽。Dubbo服务化框架采用二进制的RPC方式,通过注册中心进行服务发现,然后进行编码和序列化,实现远程调用。为了解决协议约定问题,Dubbo默认采用Hessian2协议,该协议将远程调用序列化为二进制进行传输,并且具有自描述的特点,能够有效解决协议文件修改不方便的问题。Hessian2采用独一无二的起始数字来防止歧义,实现了自描述的序列化,能够高效压缩传输数据。在微服务场景下,Spring Cloud的RESTful方式也会被考虑,主要是因为JAR包的依赖和管理问题。总的来说,文章介绍了在数据中心内部相互调用时采用二进制类RPC协议的优势,以及Dubbo和Spring Cloud在解决RPC传输问题上的不同方式。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《趣谈网络协议》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(23)

  • 最新
  • 精选
  • 问题究竟系边度
    置顶
    dubbo 是这个rpc框架包括服务发现,服务均衡负载,接口层面监控。对于rpc中的扩展点比较多。后面会用servicemesh ,传输协议较多选择 spring cloud 是一个完整微服务框架,包括rpc框架,整体链路监控,熔断降级,网关,配置中心,安全验证。主要用http协议传输 对于跨语言的,首先要定义非编程语言相关的协议,例如http,protobuf ,然后需要每个语言需要写相关客户端,至于复杂程度,就要看服务发现,均衡负载是在客户端实现还是另外写一个代理
    2018-08-10
    35
  • andy
    spring cloud的restful方式虽然基于json,但是服务端在发送数据之前会将DTO对象转换为JSON,客户端收到JSON之后还会转换为DTO。这时会在客户端和服务端分别创建各自的DTO对象,会出现代码的重复,如果共享jar,又出现jar管理的问题。

    作者回复: 是的,我们是各自定义

    2018-08-06
    2
    17
  • 咸鱼与果汁
    同样是基于TCP协议,为什么RPC会比HTTP快呢?

    作者回复: RPC基于二进制,压缩好

    2019-06-21
    2
    7
  • 咕咕咕
    还真是越到后面人越来越少 我看到现在也好多没看懂 准备先看完整体后 再回过头 仔细再看一遍

    作者回复: 加油

    2019-04-29
    4
  • 怎么肥四
    书读百遍,其义自现。听不懂不要急,多看多听时间会让我们成长。

    作者回复: 这句话好“书读百遍,其义自现”

    2019-06-02
    3
  • 悟空聊架构
    题目1: 1.Dubbo只实现了服务治理,而Spring Cloud子项目分别覆盖了微服务架构下的众多部件。 2.Dubbo使用RPC通讯协议 Spring Cloud使用HTTP协议REST API 3.Dubbo通信性能略胜于Spring Cloud 4.Dubbo通过接口的方式相互依赖,强依赖关系,需要严格的版本控制,对程序无入侵 Spring Cloud 无接口依赖,定义好相关的json字段即可,对程序有一定入侵性
    2018-08-06
    24
  • 谢晋
    Dubbo 和 SpringCloud 各有优缺点? Dubbo只实现了服务治理,而Spring Cloud子项目分别覆盖了微服务架构下的众多部件。 Spring Cloud使用HTTP协议REST API Dubbo使用RPC通讯协议 Dubbo通信性能略胜于Spring Cloud Dubbo通过接口的方式相互依赖,强依赖关系,需要严格的版本控制,对程序无入侵 Spring Cloud 无接口依赖,定义好相关的json字段即可,对程序有一定入侵性 跨语言的RPC调用协议? Thrift是Facebook提供的跨语言轻量级RPC消息和数据交换框架; Ptotocol Buffers是Google提供的一个开源序列化框架,类似于XML、JSON这样的数据表示语言
    2019-05-12
    8
  • blackpiglet
    第二题,可以使用 thrift 和 protobuf
    2018-08-10
    7
  • 及子龙
    我们用的是gRpc,对多语言支持的比较好。
    2018-08-06
    6
  • 忆水寒
    跨语言调用的场景,可以使用序列化工具,比如Thrift、protobuf等序列化框架。
    2018-08-07
    4
收起评论
显示
设置
留言
23
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部