iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >服务之间的如何调用 HTTP代替RPC
  • 132
分享到

服务之间的如何调用 HTTP代替RPC

2023-06-03 17:06:21 132人浏览 独家记忆
摘要

今天就跟大家聊聊有关服务之间的如何调用 Http代替rpc,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。RPC(Remote Procedure Call)—远程过程调用,它是一种通

今天就跟大家聊聊有关服务之间的如何调用 Http代替rpc,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。

什么是 RPC?

RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。比如两个不同的服务 A、B 部署在两台不同的机器上,那么服务 A 如果想要调用服务 B 中的某个方法该怎么办呢?使用 HTTP请求 当然可以,但是可能会比较慢而且一些优化做的并不好。 RPC 的出现就是为了解决这个问题。

RPC原理是什么?

服务之间的如何调用 HTTP代替RPC

服务之间的调用为啥不直接用 HTTP 而用 RPC?

服务消费方(client)调用以本地调用方式调用服务;

client stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体;

client stub找到服务地址,并将消息发送到服务端;

server stub收到消息后进行解码;

server stub根据解码结果调用本地的服务;

本地服务执行并将结果返回给server stub;

server stub将返回结果打包成消息并发送至消费方;

client stub接收到消息,并进行解码;

服务消费方得到最终结果。

下面再贴一个网上的时序图:

服务之间的如何调用 HTTP代替RPC

服务之间的调用为啥不直接用 HTTP 而用 RPC?

RPC 解决了什么问题?

从上面对 RPC 介绍的内容中,概括来讲RPC 主要解决了:让分布式或者微服务系统中不同服务之间的调用像本地调用一样简单。

常见的 RPC 框架总结?

RMI(jdk自带): JDK自带的RPC,有很多局限性,不推荐使用。

dubbo: Dubbo是 阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 spring框架无缝集成。目前 Dubbo 已经成为 spring cloud Alibaba 中的官方组件。

grpc :gRPC是可以在任何环境中运行的现代开源高性能RPC框架。它可以通过可插拔的支持来有效地连接数据中心内和跨数据中心的服务,以实现负载平衡,跟踪,运行状况检查和身份验证。它也适用于分布式计算的最后一英里,以将设备,移动应用程序和浏览器连接到后端服务。

Hessian: Hessian是一个轻量级的remotinGonhttp工具,使用简单的方法提供了RMI的功能。 相比WEBService,Hessian更简单、快捷。采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据。

Thrift: Apache Thrift是Facebook开源的跨语言的RPC通信框架,目前已经捐献给Apache基金会管理,由于其跨语言特性和出色的性能,在很多互联网公司得到应用,有能力的公司甚至会基于thrift研发一套分布式服务框架,增加诸如服务注册、服务发现等功能。

RPC 只是一种设计而已

RPC 只是一种概念、一种设计,就是为了解决 不同服务之间的调用问题, 它一般会包含有 传输协议 和 序列化协议 这两个。

实现 RPC 的可以传输协议可以直接建立在 tcp 之上,也可以建立在 HTTP 协议之上。大部分 RPC 框架都是使用的 TCP 连接(gRPC使用了HTTP2)。

HTTP 和 TCP

可能现在很多对计算机网络不太熟悉的朋友已经被搞蒙了,要想真正搞懂,还需要来简单复习一下计算机网络基础知识:

我们通常谈计算机网络的五层协议的体系结构是指:应用层、传输层、网络层、数据链路层、物理层。

应用层(application-layer)的任务是通过应用进程间的交互来完成特定网络应用。HTTP 属于应用层协议,它会基于TCP/IP通信协议来传递数据(html 文件, 图片文件, 查询结果等)。HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过 URL 向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。HTTP协议建立在 TCP 协议之上。

运输层(transport layer)的主要任务就是负责向两台主机进程之间的通信提供通用的数据传输服务。TCP是传输层协议,主要解决数据如何在网络中传输。相比于UDP,TCP 提供的是面向连接的,可靠的数据传输服务。

主要关键就在 HTTP 使用的 TCP 协议,和我们自定义的 TCP 协议在报文上的区别。

http1.1协议的 TCP 报文包含太多在传输过程中可能无用的信息:

HTTP/1.0 200 OK  Content-Type: text/plain Content-Length: 137582 Expires: Thu, 05 Dec 1997 16:00:00 GMT Last-Modified: Wed, 5 August 1996 15:55:28 GMT Server: Apache 0.84    Hello World

使用自定义 TCP 协议进行传输就会避免上面这个问题,极大地减轻了传输数据的开销。 这也就是为什么通常会采用自定义 TCP 协议的 RPC 来进行进行服务调用的真正原因。除此之外,成熟的 RPC 框架还提供好了“服务自动注册与发现”、"智能负载均衡"、“可视化的服务治理和运维”、“运行期流量调度”等等功能,这些也算是选择 RPC 进行服务注册和发现的一方面原因吧!

一个常见的错误观点

很多文章中还会提到说 HTTP 协议相较于自定义 TCP 报文协议,增加的开销在于连接的建立与断开,但是这个观点已经被否认,下面截取自某乎中一个回答:

首先要否认一点 HTTP 协议相较于自定义 TCP 报文协议,增加的开销在于连接的建立与断开。HTTP 协议是支持连接池复用的,也就是建立一定数量的连接不断开,并不会频繁的创建和销毁连接。二一要说的是 HTTP 也可以使用 Protobuf 这种二进制编码协议对内容进行编码,因此二者最大的区别还是在传输协议上。

看完上述内容,你们对服务之间的如何调用 HTTP代替RPC有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网精选频道,感谢大家的支持。

--结束END--

本文标题: 服务之间的如何调用 HTTP代替RPC

本文链接: https://www.lsjlt.com/news/235086.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 服务之间的如何调用 HTTP代替RPC
    今天就跟大家聊聊有关服务之间的如何调用 HTTP代替RPC,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。RPC(Remote Procedure Call)—远程过程调用,它是一种通...
    99+
    2023-06-03
  • openstack中的rpc如何远程调用
    本篇内容介绍了“openstack中的rpc如何远程调用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是 RPC看不明白这个图对于看no...
    99+
    2023-06-20
  • Springboot HTTP如何调用其他服务
    目录HTTP如何调用其他服务1.GET请求2.POST请求springboot请求其他服务器的http接口使用Get方式,携带headers请求数据使用Post方式,携带body请求...
    99+
    2024-04-02
  • Feign如何解决服务之间调用传递token
    目录解决服务之间调用传递tokenFeign有提供一个接口RequestInterceptor调用方式Feign调用服务各种坑处理编写被调用服务编写调用api编写客户端服务解决服务之...
    99+
    2024-04-02
  • Golang如何实现简易的rpc调用
    这篇文章主要介绍“Golang如何实现简易的rpc调用”,在日常操作中,相信很多人在Golang如何实现简易的rpc调用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Golang如何实现简易的rpc调用”的疑...
    99+
    2023-07-05
  • spring cloud服务之间的调用之ribbon详解
    前言 昨天,我们通过一个实例演示了,spring-cloud服务注册组件——Eureka的基本配置和简单用法,但是服务注册就是为了方便后期的发现和调用,所以今天我们趁热打铁,分享下s...
    99+
    2024-04-02
  • dubbo服务之间是怎么调用的
    Dubbo服务之间的调用是通过远程过程调用(RPC)实现的。在Dubbo中,服务提供者将自己的服务发布到注册中心,并将自己的地址注册...
    99+
    2023-10-23
    dubbo
  • Github代码空间服务之如何使用在线的VSCode
    这篇文章主要讲解了“Github代码空间服务之如何使用在线的VSCode”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Github代码空间服务之如何使用在线...
    99+
    2024-04-02
  • java类与类之间如何调用
    在Java中,类与类之间可以通过以下方式进行调用:1. 创建对象调用:一个类可以创建另一个类的对象,然后通过对象调用另一个类的方法或...
    99+
    2023-10-12
    java
  • 如何理解SAP ABAP 程序之间的调用
    如何理解SAP ABAP 程序之间的调用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一,同步调用从一个程序同步调用其他的ABAP程序,有2种方式:1,调用程序...
    99+
    2023-06-05
  • java服务之间调用的方式是什么
    Java服务之间调用的方式有多种,包括:1. 远程过程调用(RPC):使用RPC框架进行服务间的调用,如Dubbo、gRPC等。通过...
    99+
    2023-08-15
    java
  • css中如何调整a标签之间的间距
    这篇文章主要介绍“css中如何调整a标签之间的间距”,在日常操作中,相信很多人在css中如何调整a标签之间的间距问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”css中如何调整...
    99+
    2024-04-02
  • 微服务之间如何通过feign调用接口上传文件
    具体需求: 我们的项目是基于springboot框架的springcloud微服务搭建的,后端服务技术层面整体上分为business服务和core服务,business服务用于作为应...
    99+
    2024-04-02
  • 如何实现springboot中controller之间的相互调用
    springboot controller之间相互调用 SpringBoot之间内部调用 @Autowired private RestTemplate restTemplat...
    99+
    2024-04-02
  • Golang如何用RPC实现转发服务
    今天小编给大家分享一下Golang如何用RPC实现转发服务的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。首先,我们需要了解一...
    99+
    2023-07-06
  • 爬虫新手如何选用代理http服务
    作为爬虫新手,选择代理HTTP服务可以考虑以下几个方面:1. 稳定性:代理服务的稳定性非常重要,因为爬虫需要长时间运行,并且可能需要...
    99+
    2023-09-20
    http服务
  • rpc服务器不可用如何解决
    这篇“rpc服务器不可用如何解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“rpc服务器...
    99+
    2023-02-02
    rpc服务器 服务器
  • Spring Boot Feign服务调用之间带token问题
    目录Feign服务调服务传递数据带token验证解决方式小结一下Feign调用进行token鉴权1、项目场景2、解决办法3、具体实现Feign服务调服务传递数据带token验证 Fe...
    99+
    2024-04-02
  • python如何实现图与图之间的间距调整subplots_adjust
    小编给大家分享一下python如何实现图与图之间的间距调整subplots_adjust,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!如下所示:plt.subplots_adjust(left=None,bottom=No...
    99+
    2023-06-15
  • css中导航栏之间的距离如何调
    调整导航栏之间的距离可以使用CSS的margin属性。通过设置不同的margin值,可以调整元素之间的间距。例如,如果导航栏是一个水...
    99+
    2023-10-11
    css
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作