写点什么

挑战 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:0011980

评论 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
回复
没有更多了
发现更多内容

解密虾皮商品详情API接口:获取与运用

科普小能手

API 接口 API 测试 虾皮商品详情接口 虾皮商品详情数据接口 虾皮API接口

捷行2024Train-the-Trainer微课程系列-用户故事地图实操工作坊

ShineScrum

Redis Desktop Manager for Mac(Redis可视化工具)

Mac相关知识分享

Microsoft Remote Desktop Beta for Mac(微软远程连接工具)

Mac相关知识分享

适用于 Mac 系统的 SSH 工具Termius Beta for Mac

Mac相关知识分享

软件测试学习笔记丨Selenium复用已打开浏览器

测试人

软件测试

多所头部高校教师参加鸿蒙生态学堂·师资培训(贵安站),持续赋能万千开发者

最新动态

鸿蒙网络编程系列39-Web组件打印示例

长弓三石

DevEco Studio 开发实例 HarmonyOS NEXT 网络与连接

一文彻底弄懂spring boot自动转配的过程

不在线第一只蜗牛

Java Spring Boot 后端

西部数据亮相安博会,展出多款领先存储产品

Geek_2d6073

华大北斗芯片级产品矩阵亮相第三届北斗规模应用国际峰会

江湖老铁

文献解读-Sentieon DNAscope LongRead – A highly Accurate, Fast, and Efficient Pipeline for Germline Variant Calling from PacBio HiFi

INSVAST

基因数据分析 生信服务 长读长测序 Sentieon

CST电磁仿真软件如何计算有源S参数

思茂信息

cst cst使用教程 cst电磁仿真

软件设计文档怎么写?详细步骤与注意事项

爱吃小舅的鱼

软件 软件开发 软件设计

摊牌了,创业失败了

禅道项目管理

创业 企业管理 决策 战略规划 决策管理

互联网 Java 面试八股文出炉(2024最新整理)

采菊东篱下

java面试

区块链开发:DAPP、NFT、DAO、公链与钱包软件

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 NFT开发 代币开发

AI驱动的低代码未来:加速应用开发的智能解决方案

天津汇柏科技有限公司

低代码平台 AI 人工智能

IntelliJ IDEA 2024:编程新境界,高效开发新引擎

Rose

2024 必备工具:JProfiler,解锁 Java 应用性能密码

Rose

AnyGo for Mac 在iPhone / iPad上轻松模拟GPS位置

Rose

深度解读GaussDB逻辑解码技术原理

华为云开发者联盟

数据库 GaussDB DRS #SQL

Java EasyExcel 导出报内存溢出如何解决

威哥爱编程

Java EasyExcel JavaEE

颠覆性创新,低成本一天内快速上线体育赛事直播平台!

软件开发-梦幻运营部

Microsoft Word 2019 for mac(word mac)中文版

Mac相关知识分享

史上最全ThreadLocal 详解

EquatorCoco

Java 算法 JVM

深圳!入选北斗规模应用试点城市

江湖老铁

交易所开发:开启数字金融新时代

区块链软件开发推广运营

交易所开发 dapp开发 区块链开发 链游开发 代币开发

Charles for Mac 强大的网络代理工具

Rose

VMware Fusion Pro 13 for Mac(VM虚拟机)中文版

Mac相关知识分享

OpenHarmony首次亮相欧洲开源会议

科技热闻

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