首页 > 其他分享 > RPC 与 REST 对比指南

RPC 与 REST 对比指南

时间:2023-02-10 21:00:44浏览次数:41  
标签:指南 协议 服务 REST RPC 风格 Thrift

RPC可以有很多种,比较流行的是Alibaba贡献的Apache Dubbo、Facebook贡献的Apache Thrift和Google的gRPC。实际上,不同RPC框架的底层协议和实现,会有一定的差异,但是也是类同的。为了进一步讨论RPC。

Thrift是一种接口描述语言和二进制通信协议,用于定义和创建跨语言的服务。它被当作一个远程过程调用(RPC)框架来使用,是Facebook为“大规模跨语言服务”开发的。Thrift服务在实际应用中分为4层,分别是服务器层(server)、处理器层(processor)、数据协议层(protocal)和传输层(transport),它们的作用如下。

  • 服务器层:它提供一个关于Thrift的服务器,客户端可以连接它,它会实现一个线程池,来管理这些客户端连接。
  • 处理器层:处理器是由开发者根据自己业务的需要实现的业务逻辑代码。
  • 数据协议层:指定数据采用何种编码协议进行传输,然后客户端也可以按照该协议进行解码解析,还原数据。在Thrift中可以使用二进制,这样传输的数据就会大大减少,从而提高传输的速度。当然也可以使用JSON类型的数据协议,这样会使得开发者更容易理解。
  • 传输层:可以用Socket、按帧、压缩(zlib)等协议进行传输。

其中服务层、数据协议层和传输层,Thrift都已经提供了良好的封装类,我们只需要告诉Thrift服务器选择便可以了。而处理器层则是开发所需的业务逻辑代码,需要自行开发。Thrift的服务调用并不是很复杂。

首先,服务提供者按照Thrift的要求提供4层结构,然后暴露对应的服务端口。其次,服务消费者会连接服务提供的Thrift服务器,获取它暴露的接口的存根(stub),然后通过存根执行远程调用。这里谈到的存根是一个接口,它会屏蔽内部实现的细节,从而提高代码可读性,降低开发者使用的困难。

从Thrift来看,可以说,RPC和REST风格服务调用在性能上相差是很大的,究其原因主要是以下3点:

  • RPC不单可以使用HTTP协议,也可以使用其他协议,如TCP、UDP等,而REST风格只能使用HTTP协议。
  • RPC需要传递的净荷(payload)小,一般是REST风格的20%左右。而REST传输的内容越多,需要的带宽越大、时间也越长,对系统性能不利,因此RPC的性能更优。
  • RPC一般层级较少,而REST风格则需要更多的层结构,这意味着,在转换和传输的性能上,RPC将大大超过REST风格的调用。

注意,以上3点只是针对性能来说的。但在分布式(微服务)中,追求的不仅仅是性能,在大部分的情况下,如果不会出现较为严重的性能瓶颈,还是推荐使用REST风格,因为REST风格比起RPC,至少有以下3种优势:

  • 平台无关性:在RPC中,可用协议很多,传输的数据也可以使用不同的规则(如Java的序列化数据流),这样就使得它只能适应某些平台。而REST风格使用HTTP协议,只要约定采用某种数据格式,如JSON,就具备平台无关性的特点。
  • 安全性:REST风格遵循的协议多,可以通过防火墙、网关等进行拦截,这样可以降低恶意入侵的可能性。而RPC则不具备这样的功能。
  • 独立性:采用REST风格后,当前的服务是一个相对独立的服务,对于服务消费者来说,不依赖服务提供者的接口和类。而使用RPC,则需要服务提供者暴露对应的接口服务进行调用,因此耦合性较高,独立性较差。

 RPC 与 REST 对比指南_RPC

从上面可以看出,使用RPC可以得到很轻的载荷、传输较轻、速度快、协议层少、转换快,但是会产生依赖性,做不到平台无关性,在安全性上较差。使用REST风格,则具备平台无关性、高安全性和独立性。从程序开发的角度来说,使用REST风格时,可以把服务提供者看成一个独立的产品,它更容易使用和扩展,依赖性更低,这有利于应用的复用和扩展,可读性也高。如果性能不会遇到严重瓶颈,那么作为开发者,应该先考虑可读性,这就是为什么微服务推荐使用REST风格调用,而非RPC的原因。对于那些需要高性能、高并发的服务,在某些情况下,也可以考虑牺牲REST风格的优点去使用RPC,以满足性能的需要,所以在使用RPC的时候,需要考虑其适用的场景。

标签:指南,协议,服务,REST,RPC,风格,Thrift
From: https://blog.51cto.com/key3feng/6049742

相关文章

  • SpringMVC.三 RESTFul编程风格
    1、RESTFuli简介REST:RepresentationalStateTransfer,.表现层资源状态转移,资源资源是一种看待服务器的方式,即,将服务器看作是由很多离散的资源组成。每个资源是服务器上一......
  • RestTemplate调用天地图api
    代码ClientHttpRequestFactoryrequestFactory=newHttpComponentsClientHttpRequestFactory(HttpClients.createDefault());RestTemplateclient=newRest......
  • 如何制作一本免费的、开源的、可发布的电子书籍指南 All In One
    如何制作一本免费的、开源的、可发布的电子书籍指南AllInOneebook自我出版self-publish自我雇佣self-employedtoolsreedsyhttps://reedsy.com/https://bl......
  • 产研指南针的量化指标实践笔记
    背景在公司和业务发展到一定阶段,高层管理者会逐步期望从直觉化的管理逐步转向量化的关键指标管理;同时从hr层面okr和kpi的考核逐步从直觉化的定性考核,转变为数据化指标考核为......
  • RPC异常重试机制详解
    1异常重试的意义发起一次RPC调用,调用远程的一个服务,如用户的登录操作,先对用户的用户名以及密码进行验证,验证成功后,获取用户基本信息。通过远程的用户服务获取用户基本信息......
  • 减肥指南
    一、前言1.1、减肥原理人体一天的总代谢=基础代谢+行为代谢基础代谢是维持身体正常运行需要的热量,就是你一天躺那不动,维持生命体需要的热量,比如,你的呼吸,心跳,肌肉收缩等......
  • OpenHarmony富设备移植指南(4)第三方内核适配与定制
    1,OpenHarmony移植为什么这么难?为什么OpenHarmony的移植这么久才出来,安卓手机厂商开源了内核代码之后LineageOS可以很快跟进,这应该是广大网友都疑惑的事情,我......
  • Adobe国际认证教程指南|Adobe Premiere Pro 新建项目
    导入模式可作为在PremierePro中新建项目、浏览和选择媒体以及创建和编辑视频序列的起点。可从多个位置选择媒体(例如视频剪辑、音频和图形文件),将其用于新建项目或添加到现......
  • 现代图片性能优化及体验优化指南 - 图片类型及 Picture 标签的使用
    图片资源,在我们的业务中可谓是占据了非常大头的一环,尤其是其对带宽的消耗是十分巨大的。对图片的性能优化及体验优化在今天就显得尤为重要。本文,就将从各个方面阐述,在各种......
  • 第七十一章 使用 REST API 监控 IRIS - 活动量指标
    第七十一章使用RESTAPI监控IRIS-活动量指标活动量指标iris_interop_avg_processing_time{id="namespace",hosttype="HostType",host="host",production="produc......