2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

挑战 REST,RSocket 是认真的!

  • 2019-04-24
  • 本文字数:2420 字

    阅读完需:约 8 分钟

挑战REST,RSocket是认真的!

对微服务领域的同步协议而言,REST 已经成为公认的事实上的标准。但是拥有 10 年的分布式实时系统经验,曾领导 Netflix 和 Nike 大规模技术项目的 Netifi 公司的 CEO 兼联合创始人 Robert Roeser 却不认为这是一件好事。Robert Roeser 将在 QCon 北京 2019 分享专为服务到服务通信而设计的协议,可以有效避免 REST 缺陷的开源项目 RSocket 的相关内容, 点此了解

你是否正在部署微服务?

微服务是一种软件架构风格,将专注于单一责任与功能的小型功能区块,利用模组化的方式组合出复杂的大型应用程序。换句话说,这样的应用程序,是由一个或者多个微服务组成,它对外开放不受语言限制的 API,比如最常用的 HTTP。


REST(Representational State Transfer,表征状态转换)则是根基于超文本传输协议(HTTP)之上而确定的一种软件架构设计约束风格,它描述了网络上客户端与服务器之间的交互形式,带来了高效、可靠和可扩展的分布式系统。如果一个应用程序或者设计满足了 REST 的约束条件和原则,那么我们就称它是 RESTful 的。


微服务各个区块小而独立,但是开发和维护起来却颇为复杂。大部分时候,微服务都是建立在一种基于请求和响应的协议之上,即通过同步协议或者异步协议的相互通信来实现业务目标。对微服务领域的同步协议而言,REST 已经成为公认的事实上的标准。



但是,Netifi 公司的 CEO 兼联合创始人 Robert Roeser 认为,这并不是一件好事。Robert Roeser 拥有 10 年的分布式实时系统经验,曾领导 Netflix 和 Nike 大规模技术项目。他表示:“RESTful Web 服务有一个巨大的缺陷,它们实际上是基于文本实现的。要发送任何二进制数据,你需要对数据进行 Base64 编码,并将所有内容序列化两次。你真正想要的是二进制的东西——因为它可以表示任何东西——包括文本。此外,与文本(尤其是数值)相比,应用程序处理二进制数据的效率要高得多。此外,它们天生更紧凑——它们没有额外的大括号、花括号或尖括号。最后,如果数据是二进制的,根据格式的不同,也有可能实现零拷贝序列化和反序列化。”


Robert Roeser 认为,REST 的最大限制是它与 HTTP 绑定。Pivotal Reactor 项目负责人 Stephane Maldini 的看法印证了这一点——我们在使用手机应用的时候,不需要通过请求来得到回复,意思就是不需要与设备进行交互,所以你看,HTTP 真不是为此而设计的。他认为,HTTP 还有一个重要问题是,它把所有的职责都放在客户端,用重试逻辑、超时、断路器等来处理不同类型的错误。使用反应式架构构建的应用程序可以提高效率并有很好的扩展性,但 Maldini 认为:“反应式支持停留在应用程序边界上”。


如果你想要一种专为服务到服务通信而设计的协议,从而创建更简单,更可靠的应用程序,且不存在任何黑客攻击,变通方法或阻抗不匹配,为什么不试试开源项目 RSocket 呢?


简单,高效,又可靠,为服务而设计。你还在犹豫什么?盘它!

什么是 RSocket

RSocket 是一个新的、语言无关的第七层应用网络协议。它是一种基于 Reactive Streams 背压的双向,多路复用,基于消息的二进制协议。它由 Facebook、Netifi 和 Pivotal 等开发,提供 Java、JavaScript、C++和 Kotlin 等实现,目前正在被互联网上一些流量最高的网站使用。RSocket 旨在处理复杂的微服务网络,并支持使用现有协议难以或无法实现的推送通知和实时数据处理等用例。



Cloud Foundry Java Experience 团队负责人 Ben Hale 说:“我个人认为,反应式编程是 Java 高效应用的下一个前沿。”Hale 指出,反应式编程有两个主要障碍——数据访问和网络。RSocket 旨在解决后一个问题,而 R2DBC 用于解决前一个问题。


RSocket 与 HTTP 的不同之处在于它定义了四种交互模型:


即发即忘(Fire-and-Forget):这是对请求 / 响应的优化,在不需要响应时非常有用,比如用于非关键事件的日志记录。


请求 / 响应:当你发送一个请求并接收一个响应时,就像 HTTP 一样。即使在这种情况下,该协议也比 HTTP 更具优势,因为它是异步且多路复用的。


请求 / 流:类似于返回集合的请求 / 响应,集合将以流的方式返回,而不是等到查询完成,例如,发送一个银行帐号,使用一个实时的帐户事务流进行响应。


通道:允许任意交互模型的双向消息流。


基于消息意味着该协议可以在单个连接上支持多路复用。此外,与 TCP 一样,它是真正双向的,一旦客户端初始化了到服务器的连接,连接双方就变得彼此对等——实际上,服务器可以从客户端请求数据。


RSocket 还支持以消息为单位的流量控制。在主题演讲中,Facebook 工程师 Steve Gury 表示:“当你发送消息时,你同时得指定你能够满足多少响应,服务器必须满足这个约束,但是,当我处理完这些响应后,我可以要求更多的响应。RSocket 也是在整个链上工作,因此,如果你链接多个 RSocket 连接,那么流控制也将作用到端到端。”



实际上,正如 Hale 在当天晚些时候的后续会议中所说的那样,RSocket 解决的问题是跨进程回压,即网络上的回压:“我可以保证,我不会请求超出进程内部处理能力的数据,但是当我不得不调用服务网格中的另一个微服务时会发生什么。我如何保证,它不会突然出现一大堆数据,也不会试图给我发送所有的数据。”


RSocket 是传输无关的,支持 TCP、WebSocket 和 Aeron UDP 协议,并支持无语义损失的混合传输协议——回压和流量控制仍然有效。



它还支持连接恢复。当你建立 RSocket 连接时,你可以指定前一个连接的 ID,如果流仍然在服务器的内存中,则你可以继续消费你的流。


想了解更多 RSocket 的落地应用?QCon 北京 2019 应该可以给你参考,Netifi 公司的联合创始人兼 CTO 和资深工程师将双双来到现场,为你概述他们是如何使用 RSocket 以及如何用它改进 gRPC,演示如何利用 RSocket 在应用程序性能和开发速度方面取得令人难以置信的收益。


2019 年 5 月 6-8 日,QCon 与您相约北京国际会议中心,超 100 位国内外资深技术专家,聚焦 26+热门专题,从工程实践出发,深度剖析技术痛点,助你提升技术视野。访问 大会日程 了解 QCon 十周年精心策划。


2019-04-24 12:0012212

评论 4 条评论

发布
用户头像
Robert Roeser 拥有 10 年的分布式实时系统经验,曾领导 Netflix 和 Nike 大规模技术项目。他表示:“RESTful Web 服务有一个巨大的缺陷,它们实际上是基于文本实现的。要发送任何二进制数据,你需要对数据进行 Base64 编码,并将所有内容序列化两次。

谁说的传输二进制需要base64,,,不敢相信这是10年经验得出来的结论。。。low到家了简直。
2019-04-24 12:25
回复
找了下出现这个话的原文 https://www.infoq.com/articles/give-rest-a-rest-rsocket
结合上下文作者说的是用json传输的方式... ...这边翻译这个上下文没一起带着...
2019-04-24 14:51
回复
对。 中文文章有歧义。
作者愿意是说:JSON不支持二进制类型,所以在JSON中包含二进制数据时。序列化时,要把二进制数据 转换成Base64 String,反序列化时需要把 Base64 String转回来。
并不是说RESTful Web 服务(HTTP 1.1)本身不能直接传binary,是说在JSON中不能直接包含binary。
2019-04-24 14:58
回复
可见翻译有多烂,,,
2019-04-28 13:56
回复
没有更多了
发现更多内容

安全极客团队荣获首届“矩阵杯”网络安全大赛人工智能挑战赛“三等奖”

云起无垠

观测云产品更新 | 视图变量、仪表板、监控通知对象、日志索引等

观测云

监控 日志

基于Rspack实现大仓应用构建提效实践|得物技术

得物技术

最佳实践 企业号2024年7月PK榜 Rspack 前端大仓

袋鼠云产品支持全栈信创适配,更加安全可靠、自主可控

袋鼠云数栈

信创 信创产业 信创生态 信创国产化 国产信创

彻底解决网络哈希冲突,百度百舸的高性能网络 HPN 落地实践

百度Geek说

网络 哈希 企业号2024年7月PK榜

Nacos 2.3.2 连接达梦数据库

JEECG低代码

信创 naocs JeecgBoot 信创国产化 达梦数据库

《第一章、HarmonyOS介绍》02-HarmonyOS赋能套件介绍

清风论

华为 鸿蒙 HarmonyOS 鸿蒙应用开发

1688跨境寻源通系统案例:rakumart日本市场1688代采集运系统搭建

tbapi

1688代采系统 1688代采 1688代购系统 1688寻源通 1688寻源通系统

优秀的程序员都有的十条特征,你中了几条?

禅道项目管理

项目管理 程序员 软件开发 项目管理软件

利用 MySQL 克隆插件搭建主从

Simon

MySQL MySQL主从复制

京东.Vision首登苹果Vision Pro 背后的技术探索

京东零售技术

Vision pro 企业号2024年7月PK榜

2024 年 6 月公链行业研报:市场回调,比特币和以太坊 Layer 2 表现各异

Footprint Analytics

比特币 以太坊 公链 区块链+ BTC

汽车尾气排放污染的解决方案

DevOps和数字孪生

汽车

河南正规等保测评机构名称以及地址汇总

行云管家

等保 等保测评 河南

华为云IoT端到端灰度发布,如何实现海量用户业务平稳过渡升级

华为云开发者联盟

微服务 物联网 华为云 华为云开发者联盟 企业号2024年7月PK榜

Sentieon Arm版本:进一步降低基因组计算成本

INSVAST

基因数据分析 生信服务

即时通讯技术文集(第41期):直播技术合集(Part1) [共12篇]

JackJiang

网络编程 即时通讯 IM

【洞见】智算操作系统,推进算力迈入普惠智算新时代

九章云极DataCanvas

淘宝详情数据获取的 API 之旅:突破与创新

Noah

文献解读-多组学-第十八期|《整合 WES 和 RNA-Seq 数据以进行短变异发现》

INSVAST

基因数据分析 生信服务

深入解析 MS404:基于 ERC404 标准的独特原生资产

NFT Research

NFT ERC404

探索大模型:袋鼠云在 Text To SQL 上的实践与优化

袋鼠云数栈

sql 大数据 数据中台 AI 大模型

传统行业包括哪些行业?需要采购堡垒机吗?

行云管家

IT 等保 堡垒机 传统行业

小间距LED显示屏:安防监控的未来趋势

Dylan

科技 LED LED display LED显示屏 市场

DataCanvas Alaya NeW智算操作系统震撼亮相WAIC 2024

九章云极DataCanvas

使用这些API文档工具创建漂亮的API文档

幂简集成

API API 文档

tiup与prometheus迁移实践

神州数码

如何高效使用YashanDB PL语言?这5点建议值得收藏

YashanDB

数据库 数据库系统 yashandb 崖山数据库

十大 Feature:腾讯云数据仓库TCHouse-D 2.0内核引擎全新升级

腾讯云大数据

TCHouse

看完这篇,你的服务设计能力将再次进化!

京东零售技术

后端 企业号2024年7月PK榜

挑战REST,RSocket是认真的!_其他_邓艳琴_InfoQ精选文章