rpc的相关知识

news/2024/11/16 11:33:25/

rpc ,http, restful的区别
 网上充斥着各类类似于这样的文章:rpc 比 http 快了多少倍?既然有了 http,为什么还要用 rpc 调用等等遇到这类文章,说明对 http 和 rpc 是由理解误区的。
 实际上二者存在性以及速度是不好比的。

通信协议并不是rpc重点。rpc是一个方法,而http是一种协议。

http1.1这种和自定义的tcp协议有什么区别:http的头部有太多的冗余信息,而且是文本编码的。但是信息简单不是主要区别,比如grpc就是基于http2.0的他可以优化头部编码效率,好像是基于一个表记录了常见的字段,用简单的二进制信息来表示。

所以,更多的是封装了 “服务发现”,“负载均衡”,“熔断降级” 一类面向服务的高级特性。可以这么理解,rpc框架是面向服务的更高级的封装。

所以为什么要用rpc调用?
  因为良好的 rpc 调用是 面向服务的封装,针对服务的 可用性 和 效率 等都做了优化。单纯使用http调用则缺少了这些特性。一般大公司内部通信用的是这个。而用于访问就是http了。

那么,为什么会有http,rpc比较这种问题呢?
可能是因为要想让服务A 调用 服务B 中的方法,最先想到的就是通过 HTTP 请求实现。首先接口比较简单(restful),可以通过防火墙,随便一个web容器就能访问,不需要双方语言一致。

但是,如果遇到服务间调用很多的话。http缺点就暴露了,首先效率低(不包括http2),再者封装调用比较复杂需要很多函数名和参数。

而RPC就是解决这一点的,RPC要求在调用方中放置被调用的方法的接口,就像调用本地的方法一样,不需要函数和参数了。另外,它的效率比较高(不是绝对的)。

最重要的一点其实是,rpc有面向服务的更多特性,比如服务发现,均衡负载,熔断机制等,更加可用性。

正是因为以上三点,导致一般大公司内部通信用rpc框架(因为内部的框架一致是前提条件,再者内部通信需要效率和可用性,其次不需要http可读性的优势因为封装在内部,你只需要调用接口)。而用户访问公司网站就是http。因为用户和公司的架构不一致,只有浏览器。

rpc调用框架是:服务端有个stub,他可以把服务B的接口作为参数序列化,然后通过传输协议(http2,protobuf等)给B,B反序列化然后计算得到结果返回给A。

常见的rpc框架有,brpc,dubbo(阿里),thrift、

总结: 首先阐述本质,二者不是一个东西,一个是方法,一个是协议。rpc重要的不是协议,更重要的对一些高级特效的封装。
二者的关系可以使包含也可以是并列。正是因为并列所以会产生二者比较的问题。A,B调用可以用http,也可以用rpc。包含的话就是rpc可以用http2作为传输协议。

一般而言,Http优点是可读性好,双方不用同一架构,只要浏览器就可以。可以通过防火墙。
缺点:rpc不需要封装很多函数和参数;效率高;有更多的特性可用性好。


http://www.ppmy.cn/news/84936.html

相关文章

如何基于LiveNVR实现无人机等RTMP推流转成GB28181协议级联到GB28181视频平台

1、需求介绍 目前很多移动终端设备(如无人机等)只支持RTMP推流输出,不支持GB28181协议。但是又有需要通过GB28181协议接入到视频平台的需求。比如有些大疆无人机产品不能直接注册国标平台,只能rtmp推流。那么,项目中如…

DataX-一款稳定高效的数据同步工具-从安装、启动、配置、使用总结,看这篇让你一步到位

前言 大数据部门现阶段ETL按同步方式分为两种: 实时同步:DTS、CloudCanal离线同步:dataworks-DI节点 但CloudCanal在使用中出现了部分问题,归纳总结后主要为以下几点: 部分使用场景获取不到binlog点位停止任务&…

( 数组) 59. 螺旋矩阵 II ——【Leetcode每日一题】

❓59. 螺旋矩阵 II 难度:中等 给你一个正整数 n ,生成一个包含 1 到 n 2 n^2 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1: 输入:n 3 输出:[[1,2,3],[8,9,4],[7,6,5…

Linux 备份要点

文章目录 Linux 备份要点确定备份的目录和文件备份的种类、频率与工具的选择完整备份增量备份差异备份镜像备份 定期备份远程备份的脚本使用rsync上传备份数据 Linux 备份要点 在Linux系统中,备份数据是非常重要的,特别是在生产环境中。以下是Linux备份…

Android 12.0SystemUI 下拉状态栏默认展开下拉框(展开下拉快捷)

1.概述 在12.0定制化开发中,在进行定制SystemUI 下拉状态栏的时候 ,需要默认展开下拉框 显示出所以的下拉快捷图标 就是不需要二次展开下拉状态栏 这就要从NotificationPanelView.java中 下拉事件处理 而在12.0中下拉事件全都有NotificationPanelViewController.java 来处理…

vue-router

watch(() > route.path,(newPath, oldPath) > { if (newPath.includes(“/user”)) { default_open.value ‘0-1’ } else if(newPath.includes(“/role”)) { default_open.value ‘0-2’ }else if(newPath.includes(“/privilege”)) { default_open.value ‘0-3’ …

软件工程学习1:软件项目项目管理

假设你被指派作为一个软件公司的项目负责人,任务是开发一个管理系统,人员规模大约为8人,人员角色应如何确定?应如何进行项目管理?(从软件项目管理估算、软件规模、工作量估算、进度计划安排、软件过程模型等…

数字档案馆建设指南

数字档案馆建设指南 目 录 1.总体要求 2.管理系统功能要求 3.应用系统开发和服务平台构建 4.数字档案资源建设 5.保障体系建设 1.总体要求 1.1概述 数字档案馆是指各级各类档案馆为适应信息社会日益增长的对档案信息资源管理、利用需求,运用现代信息技术对数字…