推理、部署与算力3143 字

RPC和REST两种通信方式分布式架构中该怎么选

·全库 568 / 611

《RPC和REST两种通信方式分布式架构中该怎么选》共 0.3 万字,通篇围绕 架构、微服务、场景、量化 展开,归在「推理、部署与算力」这一层。

覆盖架构微服务场景量化数据集Kafka

适合要把模型跑起来,还得跑得起的人

目录骨架(5 节)
  1. 一. 简介
  2. 二. 比较:
  3. 三. 适用场景
  4. 三. 总结
  5. 1. RPC(remote procedure call)

背景:

当下微服务架构都面临着服务间的远程调用,常见的远程调用方式有两种:

RPC:Remote Produce Call远程过程调用,类似的还有RMI。自定义数据格式,基于原生TCP通信,速度快,效率高。早期的webservice,现在热门的dubbo,都是RPC的典型。

Rest:使用HTTP POST(或GET)进行数据交互http,请求数据和应答数据均为JSON格式(或XML)。http其实是一种网络传输协议,基于TCP,规定了数据传输的格式。现在客户端浏览器与服务端通信基本都是采用Http协议。也可以用来进行远程服务调用。缺点是消息封装臃肿。现在热门的Rest风格,就可以通过http协议来实现。

​

​

一. 简介

1. RPC(remote procedure call)

image.png

执行远程服务器上的一个function,,像调用本地服务(方法)一样调用服务器的服务(方法)。通常的实现有 XML-RPC , JSON-RPC , 通信方式基本相同, 所不同的只是传输数据的格式.

(1) 优点:

设计简洁,便于理解

轻量的payload

很高的性能表现

(2) 缺点:

前后端代码高耦合

代码可读性不好,相关代码不容易被定位

会导致有大量被定义的函数,难以管理

(3) 核心

RPC是分布式架构的核心,按响应方式分如下两种:

同步调用:客户端调用服务方方法,等待直到服务方返回结果或者超时,再继续自己的操作

异步调用:客户端把消息发送给中间件,不再等待服务端返回,直接继续自己的操作。

同步调用的实现方式有WebService和RMI。Web Service提供的服务是基于web容器的,底层使用http协议,因而适合不同语言异构系统间的调用。RMI实际上是Java语言的RPC实现,允许方法返回 Java 对象以及基本数据类型,适合用于JAVA语言构建的不同系统间的调用。

​

异步调用的JAVA实现版就是JMS(Java Message Service),目前开源的的JMS中间件有Apache社区的ActiveMQ、Kafka消息中间件,另外有阿里的RocketMQ。

​

2. REST(Representational state transfer), 表现层状态转移

image.png

在设计API时,使用路径定位资源,方法定义操作,通过Content-Type和Accept来协商资源的类型

REST是一种架构风格,指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。REST规范把所有内容都视为资源,网络上一切皆资源。

REST并没有创造新的技术,组件或服务,只是使用Web的现有特征和能力。 可以完全通过HTTP协议实现,使用 HTTP 协议处理数据通信。REST架构对资源的操作包括获取、创建、修改和删除资源的操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法。

REST即表述性状态传递(Representational State Transfer,简称REST),是一种软件架构风格。REST通过HTTP协议定义的通用动词方法(GET、PUT、DELETE、POST) ,以URI对网络资源进行唯一标识,响应端根据请求端的不同需求,通过无状态通信,对其请求的资源进行表述。

(1) 优点:

前后端高度解耦

便于理解,即使没有看文档,也能大概知道接口是用来做什么的;

接口的功能有单一性,便于扩展和复用;

利用了HTTP原本的特性

(2) 缺点:

有时payload会变的特别大

同一个页面可能要调用很多个API,来获取不同的东西,在网络差的情况下会降低体验

(3) 特征:

资源:资源是以json(或其他Representation)为载体的、面向用户的一组数据集,资源对信息的表达倾向于概念模型中的数据

无状态:所谓无状态的,即所有的资源,都可以通过URI定位,而且这个定位与其他资源无关,也不会因为其他资源的变化而改变。

统一的接口:RESTful架构风格规定,数据的元操作,即CRUD(create, read, update和delete,即数据的增删查改)操作,分别对应于HTTP方法:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源,这样就统一了数据操作的接口,仅通过HTTP方法,就可以完成对数据的所有增删查改工作。

URI:可以用一个URI(统一资源定位符)指向资源,即每个URI都对应一个特定的资源。要获取这个资源,访问它的URI就可以,因此URI就成了每一个资源的地址或识别符

(4) 设计原则:

网络上的所有事物都被抽象为资源

每个资源都有一个唯一的资源标识符

同一个资源具有多种表现形式(xml,json等)

资料里没有你的场景?

把你手上的数据和想解决的那个环节发上来,我们按具体情况回,不复述方法论。

发布需求