RPC 服务 与 HTTP 服务的区别

1、什么是RPC

 

RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。

 

RPC采用客户机/服务器(c/s)模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。

 

2、OSI网络七层模型

 

在说RPC和HTTP的区别之前,我觉的有必要了解一下OSI的七层网络结构模型,它可以分为以下几层(自下而上):

图片

第一层:物理层。这一层主要就是传输这些二进制数据。

第二层:链路层。将上面的网络层的数据包封装成数据帧,便于物理层传输;

第三层:网络层。定义网络设备间如何传输数据;

第四层:传输层。管理着网络中的端到端的数据传输;

第五层:会话层。管理用户的会话,控制用户间逻辑连接的建立和中断;

第六层:表示层。定义不同的系统中数据的传输格式,编码和解码规范等;

第七层:应用层。定义了用于在网络中进行通信和传输数据的接口;

 

3、RPC调用流程

 

简单地说一下,一个完整的RPC架构里面包含了四个核心的组件,分别是Client ,Server,Client Stub以及Server Stub

 

1、 客户端(RPC Client):服务调用方

 

2、 客户端存根(Client Stub):存放服务端地址信息,将客户端的请求参数打包成网络消息,再通过网络发送给服务方

 

3、 服务端存根(Server Stub):接受客户端发送过来的消息并解包,再调用本地服务

 

4、 服务端(RPC Server):真正的服务提供者。

 

RPC采用C/S模式,请求程序就是一个客户端应用,而服务提供者就是一个服务器。首先,服务消费者(RPC客户端应用)调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务提供方(RPC服务器端),进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,调用服务端方法对调用请求进行计算而得到计算结果,并发送答复信息,然后等待下一个调用信息;最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。

图片

 

 

4、RPC架构的作用

 

RPC 的主要目标是让构建分布式计算(应用)更容易、透明,在提供强大的远程调用能力时不损失本地调用的语义简洁性。为实现该目标,RPC 框架需提供一种透明调用机制让使用者不必显式的区分本地调用和远程调用。RPC框架负责屏蔽底层的传输方式(TCP或者UDP)、序列化方式(XML/JSON/二进制)和通信细节。开发人员在使用的时候只需要了解谁在什么位置提供了什么样的远程服务接口即可,并不需要关心底层通信细节和调用过程。

 

5、常见RPC技术和框架

 

(1)、应用级的服务框架:阿里的Dubbo/Dubbox、Google GRPC、Spring Boot/Spring Cloud。

 

(2)、远程通信协议:RMI、Socket、SOAP(HTTP XML)、REST(HTTP JSON)。

 

(3)、通信框架:MINA和Netty

 

6、HTTP服务 VS RPC服务

 

传输协议

 

RPC,可以基于TCP协议,也可以基于HTTP协议

 

HTTP,基于HTTP协议

 

传输效率

 

RPC,使用自定义的TCP协议,可以让请求报文体积更小,或者使用HTTP2协议,也可以很好的减少报文的体积,提高传输效率

 

HTTP,如果是基于HTTP1.1的协议,请求中会包含很多无用的内容,如果是基于HTTP2.0,那么简单的封装以下是可以作为一个RPC来使用的,这时标准RPC框架更多的是服务治理

性能消耗,主要在于序列化和反序列化的耗时

 

RPC,可以基于thrift实现高效的二进制传输

HTTP,大部分是通过json来实现的,字节大小和序列化耗时都比thrift要更消耗性能

 

负载均衡

 

RPC,基本都自带了负载均衡策略

 

HTTP,需要配置Nginx,HAProxy来实现

 

服务治理(下游服务新增,重启,下线时如何不影响上游调用者)

 

RPC,能做到自动通知,不影响上游

 

HTTP,需要事先通知,修改Nginx/HAProxy配置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/535419.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker 网络命名空间

Docker 用户可以通过与 CNM 的 Object 以及 API 的交互来管理对应容器的网络,下面是一个典型的容器网络生命周期: 1、Driver要向NetworkController注册。内置的Driver在Libnetwork内注册,远程的Driver则通过Plugin mechanism注册。每一个Driv…

缓存雪崩、击穿、穿透解决方案

用户的数据一般都是存储于数据库,数据库的数据是落在磁盘上的,磁盘的读写速度可以说是计算机里最慢的硬件了。 当用户的请求,都访问数据库的话,请求数量一上来,数据库很容易就奔溃的了,所以为了避免用户直…

Ansible中的playbook详解

首先简单说明一下playbook,playbook是什么呢? 根本上说playbook和shell脚本没有任何的区别,playbook就像shell一样,也是把一堆的命令组合起来,然后加入对应条件判断等等,在shell脚本中是一条一条的命令&am…

【Docker】容器镜像有哪些特性

首先解释一下什么是Docker镜像? Docker镜像它其实是一个模板,拥有这个模板我们才能创建我们的Docker容器,镜像里含有启动 docker 容器所需的文件系统结构及其内容,因此是启动一个 docker 容器的基础。docker 镜像的文件内容以及一…

nginx中的location指令

1、location 介绍 location是Nginx中的块级指令(block directive),location指令的功能是用来匹配不同的url请求,进而对请求做不同的处理和响应,这其中较难理解的是多个location的匹配顺序,本文会作为重点来解释和说明。 开始之前…

容器底层实现技术Namespace/Cgroup

Docker容器实现原理 Docker容器在实现上是通过namespace技术来进行进程隔离,通过cgroup技术实现容器进程可用资源的限制,当docker启动一个容器时,实际是创建了多了namespace参数的进程。 Namespace Namespace:命名空间 作用&#…

身体原因 断更一周

由于众所周知的原因,博主最近具有发热、全身乏力、酸痛、干咳等症状,已严重影响日常的工作学习和博客编写,所以断更我将一周,由下周三(即2022年12月21日)恢复更新 更多往期内容可以参考:全网最…

异方差与多重共线性对回归问题的影响

异方差的检验 1.异方差的画图观察 2.异方差的假设检验,假设检验有两种,一般用怀特检验使用方法在ppt中,课程中也有实验,是一段代码。 异方差的解决办法 多重共线性 多重共线性可能带来的影响: 多重共线性的检验 多重…

如何修改Docker的镜像源

改或新增/etc/docker/daemon.json 文件 vi/etc/docker/daemon.json 添加需要修改的国内镜像源镜像源 { "registry-mirrors":["http://hub-mirror.c.163.com"] } 重启Docker服务 Systemctl restart docker.service 方法二 修改或新增 /etc/sysconfig…

nginx 的 rewrite 模块

ngxhttprewrite_module 模块用来使用正则表达式(PCRE)改变请求的 URI,返回重定向,并有条件地选择配置。 指令执行顺序 首先顺序执行 server 块中的 rewrite 模块指令,得到 rewrite 后的请求 URI 然后循环执行如下指令…

所有的Python库

库名称简介 Chardet字符编码探测器,可以自动检测文本、网页、xml的编码。 colorama主要用来给文本添加各种颜色,并且非常简单易用。 Prettytable主要用于在终端或浏览器端构建格式化的输出。 difflib,[Python]标准库,计算文本…

Oracle行转列语法总结大全

一、decode语法 SELECT deptno, nvl(SUM(decode(job, MANAGER, sal)), 0) s_MANAGER, nvl(SUM(decode(job, ANALYST, sal)), 0) s_ANALYST, nvl(SUM(decode(job, CLERK, sal)), 0) s_CLERK, nvl(SUM(decode(job, PRESIDENT, sal)), 0) s_PRESIDENT, …

Shell 各种符号 之 含义

#!&#xff1a;符号能够被内核识别成是一个脚本的开始&#xff0c;这一行必须位于脚本的首行 $0&#xff1a;当前脚本的名字 $#&#xff1a;输入<调用>参数(脚本或函数的位置参数) 的个数&#xff0c;如 NumArg$#&#xff1b;echo"\$#: $#;\$NumArg: $NumArg"…

Nginx的11个执行流程

1 Nginx简介 Web服务器市场份额 Nginx [engine x] 最初由 Lgor Sysoev 编写。根据 Netcraft 的数据&#xff0c;到2020年9月&#xff0c;Nginx 服务或代理了25.76&#xff05;站点&#xff0c;市场份额占到了约34.03&#xff05;。 Nginx 被广泛用作&#xff1a; HTTP服务器…

Nginx的执行阶段详解

在了解nginx的执行阶段前&#xff0c;先看一个例子 对echo不熟悉的&#xff0c;可以先看文章Nginx调试必备了解下echo扩展 回到上面这个例子&#xff0c;在server块中配置这样的location&#xff0c;你觉得输出是什么样子&#xff1f; 按照正常的逻辑&#xff0c;输出应该是32 …

Docker挂了,数据如何找回

docker在实际使用中&#xff0c;让运维人员诟病的&#xff0c;除了安全问题外&#xff0c;大概就是数据的问题了 很多人在初用docker的时候&#xff0c;很多时候都忘记或不知道docker中需要保留的数据需要挂载到宿主机文件夹到容器内部对应目录&#xff08;当然除了挂载宿主机目…

TCP总结

TCP这些东西&#xff0c;基本每个程序猿都或多或少是掌握的了。虽然感觉在实际开发中没有什么用武之处&#xff0c;但&#xff0c;面试他要问啊 而最近大家伙过完年&#xff0c;也都在准备春招&#xff0c;我也一样。阅读了一些okHttp源码之后&#xff0c;又屁颠屁颠地跑回来重…

Shell 中各种括号的作用

一、小括号&#xff0c;圆括号&#xff08;&#xff09; 1、单小括号 () ①命令组。括号中的命令将会新开一个子shell顺序执行&#xff0c;所以括号中的变量不能够被脚本余下的部分使用。括号中多个命令之间用分号隔开&#xff0c;最后一个命令可以没有分号&#xff0c;各命令和…

linux基线核查脚本

#!/bin/bash #version 2.0cat <<EOF ************************************************************************************* ***** linux基线检查脚本 ***** ************************************************************************************* *…

LDAP命令介绍---dsreplication

可以使用此实用程序来配置服务器之间的复制, 以使服务器数据保持同步。要正确进行复制, 必须先使用 enable 子命令启用复制, 然后再使用 initialize 子命令将一个服务器的内容初始化为另一个服务器的内容用法: dsreplication {子命令} {选项}可用子命令:disable对指定服务器中…