既然有http 请求,为什么还要用rpc调用?

先弄明白什么是RPC。

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

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

有多种 RPC模式和执行。最初由 Sun 公司提出。IETF ONC 宪章重新修订了 Sun 版本,使得 ONC RPC 协议成为 IETF 标准协议。现在使用最普遍的模式和执行是开放式软件基础的分布式计算环境(DCE)。

这个解释挺复杂的,但是我们可以简单的理解一下,毕竟,现在已经不是以前那个年代了。

还是先来看一下,没有PRC的时候,会怎么样。

在过去是这样的,包括现在很多对企业服务可能也是这样的,只有一个包部署在Tomcat里。

那个时候,没什么需要用到RPC的场景。

然后当用户量大的时候呢?渐渐出现了负载均衡。

大概是这个样子。

负载均衡能解决的问题很多,但是还是不够好,比如说,只是某一个功能模块(假设是用户中心)被访问的次数特别频繁,我可不可以把这部分内容单独拿出去?用户中心的机器独立,给它单独的带宽,给他单独的服务器,给他单独的数据库?

不这么干其他的功能模块都干不下去了啊。

好比是原来是学校餐厅,可以同时供200个人用餐,但是修真院的饺子馆生意特别好,每次来吃饭的人都有5000人,占满了所有餐椅,排队几万米,餐厅的其他摊位肯定不乐意了吧?

比如说那个卖炒菜的,虽然我每天只有30来个人吃饭,那也是钱啊,你人这么多,想来我这边吃饭的人都找不着了。

大概的情景应该是这样的。

能理解么?

遇到这种场景怎么办?不可能不让修真院饺子馆开门啊,那最好的方式就是:

你可不可以搬出去?

你不搬我们搬也行!(哭泣脸,反正我们是再也不要和你家饺子馆开在一起了,必须给我们一个说法)

那么,搬家之后的样子可能是这样的。

嗯啊。分是分开了,然后餐卡什么的还是在一起,还是和其他摊位一样,给大家提供就餐的功能。这就是分而治之,哪怕你修真院饺子馆关门了,也不影响我,这又叫分布式。

说到分布式,就问题就来了。

可不可以互相调用?其实细分下去,买菜,切菜,结账这些都是独立的流程,我们能不能都把它们独立出来?

当然是可以的,但是带来的问题就是,如何通信?大家都不在一个进程里。

这种通信的方式,就叫做RPC,在今天,RPC已经不仅仅是远程,这个远程,确切来说,就是指不在一个进程内,只能通过其他协议来完成,通常都是TCP或者是Http。

好了,RPC讲清楚了,再看RPC的重点是什么。

不能太慢,对不对?如果太慢了,怎么办?

这种性能的要求,要做到什么程度?希望是和在同一个进程里,一致的体验。

Http能做到这种程度么?

不行。Http本身的三次握手协议,就会带来大概1MS的延迟(emmm,这个数据其实我有点不确定了,也可能是几微秒,很早之前做过测试)。

一般的场景下,没什么问题,但是对于Google这种级别的公司,他们接受不了。

几MS的延迟可能就导致多出来几万台服务器,所以他们想尽办法去优化,优化从哪方面入手?

1.减少传输量。

2.简化协议。

Http的协议就注定了,在高性能要求的下,不适合用做线上使用的通信协议。

而常见的几种高效的协议有:protocolBuffer,Thrift,Hessian,RMI等。

所以再回到题主的问题上面,为什么不使用http?

因为有些场景下极限的追求,是普通人一生都难达到的境界啊。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【面试】Java并发编程面试题

文章目录基础知识为什么要使用并发编程多线程应用场景并发编程有什么缺点并发编程三个必要因素是什么?在 Java 程序中怎么保证多线程的运行安全?并行和并发有什么区别?什么是多线程多线程的好处多线程的劣势:线程和进程区别什么是…

基于java+ssm+vue病人跟踪治疗信息管理系统的搭建及源码

源码获取方式见文末 一.需求简介 病人治疗信息管理系统采用B/S模式,实现安全、快捷、高效的病人跟踪治疗信息管理。传统手工管理模式效率低下,已无法满足病人需求。 信息化时代的到来,使得开发病人跟踪治疗信息管理系统成为必然。 本系统采…

Linux 串口RS232/485/GPS 驱动实验(移植minicom)

目录Linux 下UART 驱动框架I.MX6U UART 驱动分析硬件原理图分析RS232 驱动编写移植minicomRS232 驱动测试RS232 连接设置minicom 设置RS232 收发测试RS485 测试RS485 连接设置RS485 收发测试GPS 测试GPS 连接设置GPS 数据接收测试串口是很常用的一个外设,在Linux 下…

python入门(一)conda的使用,创建修改删除虚拟环境,以及常用命令,配置镜像

文章目录背景1.conda的下载地址:2.安装3.执行常用命令1)查看版本2)查看所有虚拟环境3)创建虚拟环境4)激活虚拟环境5)关闭虚拟环境6)删除虚拟环境7)创建python2.7的虚拟环境8)使用pyt…

命令行上的数据科学第二版 二、开始

原文:https://datascienceatthecommandline.com/2e/chapter-2-getting-started.html 贡献者:Ting-xin 在这一章中,我需要确定你能够利用命令行做数据科学,为此你需要能满足一些条件。条件主要分为三个部分:&#xff08…

SQLyog图形化界面工具【超详细讲解】

目录 一、SQLyog 介绍 二、SQLyog 社区版下载 三、SQLyog 安装 1、选择Chinese后点击OK 2、点击“下一步” 3、选择“我接受”后点击“下一步” 4、点击“下一步” 5、修改安装位置(尽量不要安装在C盘),点击“安装” 6、安装后点击“…

剥茧抽丝,细数模块化的前世今生

写在前面 本篇是前端工程化打怪升级的第 1 篇,关注专栏 | 小册传送门 | 案例代码 近几年,时常会感叹,前端,发展的太迅猛了。日新月异的新概念,异彩纷呈的新思想泉水般涌出;前端项目的复杂度、开发成本、维护…

Python 自动化指南(繁琐工作自动化)第二版:十五、使用 PDF 和 WORD 文档

原文:https://automatetheboringstuff.com/2e/chapter15/ PDF 和 Word 文档是二进制文件,这使得它们比纯文本文件复杂得多。除了文本,它们还存储大量的字体、颜色和布局信息。如果您想让您的程序读写 PDF 或 Word 文档,您需要做的…

【从零开始学习 UVM】3.5、UVM TestBench架构 —— UVM Sequencer [uvm_sequencer]

文章目录 Usage(用法)Custom Sequencer(自定义sequencer)Class Hierarchy一个 sequencer 生成数据事务作为类对象并将其发送到driver以执行。建议扩展uvm_sequencer基类,因为它包含了允许sequence与driver通信所需的所有功能。基类是由可以被sequencer处理的requset和resp…

CookieSession

目录 一. 回顾cookie 二. 会话机制Session 1. cookie:标识用户的身份信息 2. cookie 和 session 的关联区别 三. 一些常用的核心方法及原理应用 1. HttpServletRequest 类中的相关方法 2. HttpServletResponse 类中的相关方法 3. HttpSession 类中的相关方…

博客2:YOLOv5车牌识别实战教程:理论基础

摘要:本篇博客介绍了YOLOv5车牌识别的理论基础,包括目标检测的概念、YOLO系列的发展历程、YOLOv5的网络结构和损失函数等。通过深入理解YOLOv5的原理,为后续实战应用打下坚实基础。 车牌识别视频正文: 2.1 目标检测概念 目标检测…

【01 Provider HAL and Device HAL】

1. Overview Camera Provider Hal 和 Camera Device Hal3 即在Hal3 整个架构中紫色框框出来的部分中: 2. 简介 (1). Android定义了几个Interface: ICameraProvider, ICameraDevice, ICameraDeviceSession, ICameraDeviceCallback 。 Camera Hal 层去实做了这些 Interface。…

chatGPT陪你读源码

概述 chatGPT从2022年11月份崭露头角以来,一直备受关注。他的人工智能对话颠覆了以往智能对话的刻板印象,跟chatGPT聊天,感觉就像百晓生一样,什么都懂。尤其在编程方面,chatGPT可以根据实际的业务场景需求&#xff0c…

GPT-4原论文详细解读(GPT-4 Technical Report)

GPT-4原论文详细解读(GPT-4 Technical Report)返回论文和资料目录 1.导读 相比之前的GPT-3.5等大型语言模型(这里可以看我的InstructGPT解读,也方便理解本文内容),GPT-4最大的不同在于变成了多模态&#…

部署大数据集群时踩过的坑 (持续更新)

大数据集群踩过的坑 前言(必看) 如果你遇到了和我一样的问题并通过搜索引擎进入这篇文章,请善用CtrlF键搜索 该自检手册仅用于自己学习使用,记录所有自己遇到的问题。如果你没有检索到你的问题,请使用Bing或Google进行搜索 该自检手册严格…

PCB生产工艺流程一:PCB分类的三大要点

PCB生产工艺流程一:PCB分类的三大要点 PCB在材料、层数、制程上的多样化以适不同的电子产品及其特殊需求。因此其种类划分比较多,以下就归纳一些通用的区别办法,来简单介绍PCB的分类以及它的制造工艺。那么我们就从它的三个方面来分析一下吧。 1、材料…

某汽车零部件企业:定期反钓鱼演练是降低企业安全风险的优选方案

客户背景 作为一家主要从事于汽车、摩托车零部件的开发、制造和销售的中日合资企业,服务的客户大多为国内汽车生产领域领先企业,旗下进出口业务较多,该汽车零部件企业需要与海外企业一直保持着电子邮件的往来,电子邮件安全十分重…

eNSP 实现VLAN间通信实验

关于本实验本实验将通过上述方法(配置Dot1q终结子接口和VLANIF接口)实现不同VLAN间的通信,其中涵盖了与这两种方法相关的原理、配置命令和验证方法。实验目的掌握配置Dot1q终结子接口的方法,实现VLAN间通信。掌握配置VLANIF接口的…

window安装Redis服务

下载地址:Releases tporadowski/redis GitHub。 Redis 支持 32 位和 64 位。这个需要根据你系统平台的实际情况选择,这里我们下载 Redis-x64-xxx.zip压缩包,解压后,将文件夹重新命名为 redis。 命令创建Redis服务 上述方式虽然…

王炸!ChatGPT这算是彻底打脸马云。。。

在2019年的世界人工智能大会上,马斯克和马云针对人工智能话题上演了一场精彩对话。马云:我不觉得AI是一种威胁,我不认为人工智能是很恐怖的东西,因为人类很聪明。马斯克:一般大家都会低估人工智能的能力,实…