当前位置: 首页 > 编程日记 > 正文

RPC是什么?为什么要学习RPC?

随着近几年分布式、微服务架构的火热,RPC在开发工作中使用的越来越多,也变的越来越重要。

今天我们来看RPC是什么,为什么要了解RPC,通过学习RPC我们能掌握什么内容?

什么是「RPC」

RPC 全称 Remote Procedure Call, wikipedia的部分说明:

RPC is a request–response protocol. An RPC is initiated by the client , which sends a request message to a known remote server to execute a specified procedure with supplied parameters. The remote server sends a response to the client, and the application continues its process.

首先这里的重点是「protocol」,其次是 RPC中的R -「Remote」。所以这里的RPC的意义是一个调用执行远程方法的协议。我们对于方法的调用一般类似这样

Echoecho= child.say("Hello World");

这种一般是指调用自己本地的方法,比如 Java 应用是指调用在同一个 JVM 内的方法。

如果上述的代码要换成我们以RPC的形式去调用,写法有什么区别呢?

其实是没有的。

我们在调用时仍然按这个形式,仅需要在配置中指定这个方法对应的「远程地址」即可。

再举个生活化的例子。

假设你是招揽游客的小贩。每次集齐了游客你都在卖力的吆喝,在各种神奇的网站的搜索,找对应景点的导游。后来有一天,你和街边多个打印店谈了合作。符合条件可以导对应景点的都可以在打印店「登记」,你下次来的时候根据记录,直接「联系」对应的人即可,省力不少哇。

这里我们看到两种RPC的使用形式:

直接在配置中固定写好远程方法的地址,请求是一步到位

在配置中提供的「注册处」的地址,方法请求时先到注册处查方法地址再执行

看到这里,你不禁要说,调用个远程方法嘛,又不难,有啥看的。

那我们继续这个生活化的例子。

在你集齐了游客联系经常合作的导游时,他生病了。你要找谁? 你说我有「备份」嘛,登记处记录了好多呢。

那好,这好多个导游里,你「选哪一个」?

你说,靠,我那管那么多,随便挑一个打电话就是了。好,这时你就已经在用到了RPC中的「负载均衡LoadBalance」了,只不过你的策略是用的「随机」。

如果在导游登记的时候每个提供了照片和历史认证评级,那你可能不会随便挑一个打,可能会看看照片,哪个感觉更靠谱,哪个评级更高。此时这些项都做为你联系他的一个「权重」。在多个导游间,这个权重决定了被联系次数的多少。此时你的LB不再是简单随机,而是根据「权重」进行。

再比如你们合作多次,固定的几个景点就是固定的几个导游,老相识,每次带人来都找他。此时你的策略又变成了「一致性Hash」。

后来,有导游和你说,最近像他们这类自找生意的导游,被发现在主动拉生意,可能会罚款,下次联系他的时候别说那么多。于是你们订了个简单「协议」:先说「0或1」,代表是否空闲,再说「1到100」代表你们所带游客游览的景点。再说「0或1」代表是否可以带购物。

你会发现,此时你们的协议里有「编码」,有压缩,每个人在听到对方信息时,需要再在你这里解码,还原成真实的信息。在 RPC 里也一样,在方法调用前,需要将对应的参数序列化,以指定的「格式」传递,到达后再对应的还原回去执行方法。

过了一段时间,你的业务发展壮大,一个景区附近的导游们自动组队。在你请求到达时,这个景区的导游里自动根据上面的权重选一个人出来,这些导游组成的,就是一个「Cluster」

业务发展的同时,你成立了一个秘书团,这些人负责过一段时间联系一下各个导游组,判断这个景区是否能提供,这个时候,秘书团就在进行「监控」。

(一口老血,编不下去了……)

接下来要说的是,我们为什么要学习 RPC。

为什么要学习 RPC

为什么要学习 RPC呢? 我们开头时也提到,微服务、分布式应用的开发越来越常见, RPC 是其中相当重要的组件。通过 RPC 的学习,可以更好的理解和进行较大型应用的设计与开发。

同时, RPC 中涉及到的各类技术,也会使学习者知识面更宽广,每个方面,都值得深入。而对于技术,特别是源码的学习,又会返过来促使更好的理解 RPC,你写出更好的代码。

学习 RPC 我们能掌握什么

我们上面的生活化例子中,提到了这些技术

注册处

集群

负载均衡

协议

序列化编码、解码

一致性Hash

监控

……

这些技术,也是 RPC 中很重要的一些内容。 我们看 Dubbo 的源码中,从代码的组织上,也能一窥究竟。

RPC是什么?为什么要学习RPC?

这张图里,比我们在上面例子里提到的技术,多一些「Filter」,「Config」还有「Remoting」,包含了更完整的 RPC 的配置管理,请求过滤,多协议支持等内容。

而对 RPC 学习,例如负载均衡,除技术之外,还可以学习一种思想,是一种可迁移的东西。这种负载均衡的使用和实现,在 Nginx、Apache 做反向代理,在 应用服务器做集群搭建时,都会用的到。

像一致性Hash,对于通过 Hash思想来实现请求均衡的实现中,一致性 Hash 的思路,能更大程度的保证请求 Hash到原来的服务器上,在增减服务器时,影响减小。

再比如「注册处」Registry 中,我们可以了解到通过 zk, redis,甚至广播 的注册处实现。这种注册处的学习,可以在我们后续的微服务,分布式应用中常用的「注册中心」提供实现的思路。

再比如 我们远程调用时参数、信息的序列化,我们 Java 默认的序列化在性能上不能满足 RPC 这种高频序列化的应用场景,那有什么好的办法来提升序列化性能呢?

你会发现 Dubbo 中集成了 kryo,hessian2,fastjson等支持,可以比较学习这些不同的序列化实现,在自己的业务场景中有需要时,就发现你的技能工具箱中又多了一件工具。

类似的内容还有很多,学习这些都能让我们更好的成长。

欢迎工作一到五年的Java工程师朋友们加入Java架构开发:789337293

本群提供免费的学习指导 架构资料 以及免费的解答

不懂得问题都可以在本群提出来 之后还会有职业生涯规划以及面试指导

转载于:https://blog.51cto.com/13732225/2152884

相关文章:

Lua学习笔记6:C++和Lua的相互调用

曾经一直用C写代码。话说近期刚换工作。项目组中的是cocos2dx-lua,各种被虐的非常慘啊有木有。新建cocos2dx-lua项目。打开class能够发现,事实上就是C项目啦,只是为什么仅仅有一类Appdelegate类呢?哈哈,我相信聪明的你一定猜到了&…

Redis消息通知系统的实现

Redis消息通知系统的实现Posted on 2012-02-29by 老王 http://huoding.com/2012/02/29/146最近忙着用Redis实现一个消息通知系统,今天大概总结了一下技术细节,其中演示代码如果没有特殊说明,使用的都是PhpRedis扩展来实现的。内存比如要推送一…

用 Python 实现答题卡识别!

作者 | 棒子胡豆来源丨CSDN博客答题卡素材图片:思路读入图片,做一些预处理工作。进行轮廓检测,然后找到该图片最大的轮廓,就是答题卡部分。进行透视变换,以去除除答题卡外的多余部分,并且可以对答题卡进行校…

Confluence 6 计划任务

管理员控制台能够允许你对 Confluence 运行的计划任务进行计划的调整,这些计划任务将会按照你的调整按时执行。可以按照计划执行的任务如下: Confluence 站点备份存储优化任务,清理 Confluence 的临时目录中的文件和缓存索引优化任务&#xf…

PHP共享内存段

在asp.net和java中都有共享内存,php除了可以使用Memcached等方式变通以外其实php也是支持共享内存的!需要安装扩展shmop 找到php安装源文件目录# cd /usr/local/php-5.4.0/ext/shmop # /usr/local/php/bin/phpize # ./configure --with-php-config/usr/l…

马尔科夫随机场的基本概念

1、随机过程: 描写叙述某个空间上粒子的随机运动过程的一种方法。它是一连串随机事件动态关系的定量描写叙述。随机过程与其他数学分支,如微分方程、复变函数等有密切联系。是自然科学、project科学及社会科学等领域研究随机现象的重要工具。 2、马尔科夫…

从事了两年 AI 研究,我学到了什么?

作者 | Tom Silver译者 | 弯月出品 | CSDN我从事人工智能研究的工作已经有两年了,有朋友问我都学到了什么,所以我想借本文分享一些迄今为止积累的经验教训。我将在本文中分享一些常见的经历,还会讨论相对具体的人工智能行业技巧。希望对大家能…

Windows server 2008普通用户不能远程登录问题

1、查登录权限 如果文件服务器没有为用户授权,那么用户自然就不能远程登录服务器系统了,为此笔者决定先仔细检查一下文件服务器系统是否为自己使用的登录账号,授予了远程登录权限。在进行这种检查时,笔者先是在文件服务器本地以系…

面向小白的最全 Python 可视化教程,超全的!

作者 | 俊欣来源丨关于数据分析与可视化今天小编总结归纳了若干个常用的可视化图表,并且通过调用plotly、matplotlib、altair、bokeh和seaborn等模块来分别绘制这些常用的可视化图表,最后无论是绘制可视化的代码,还是会指出来的结果都会通过调…

Atitit.文件搜索工具 attilax 总结

Atitit.文件搜索工具 attilax 总结 1. 指定目录按照体积大小精确搜索1 1.1. File Seeker 4.5 版本的可以,3.5版本的不行。。1 2. 按照文件内容搜索1 2.1. File Seeker2 2.2. Notepad2 2.3. FileLocator Pro 是一款专业的文件搜索软件,2 2.4. 百度硬盘搜索…

ulimit -SHn 65535 含义

linux下用ulimit设置连接数最大值,默认是1024.在高负载下要设置为更高,但最高只能为65535. ulimit只能做临时修改,重启后失效。可以加入ulimit -SHn 65535到 /etc/rc.local 每次启动启用。终极解除 Linux 系统的最大进程数和最大文件打开数限…

5.7-基于Binlog+Position的复制搭建

基本环境 MasterSlaveMySQL版本MySQL-5.7.16-X86_64MySQL-5.7.16-X86_64IP192.168.56.156192.168.56.157Port33063306数据库环境的部署:两边安装好相同的数据库软件,初始化,可以启动起来。检查事项:两边防火墙是否开启&#xff0c…

PHP消息队列httpsqs安装与使用无错版

项目网址:http://code.google.com/p/httpsqs/使用文档:http://blog.s135.com/httpsqs/ 说明:由于需要安装的东西有些多,原文可能写的有些简略,所以适当补充了1.安装libevent-2.0.12-stable.tar.gzwget http://httpsqs.…

Windows Server 2012 系统群集

Windows Server 2012 系统群集本次将测试Windows Server 2012 系统群集功能。实验环境:4台服务器都为Windows Server 2012 DataCenter操作系统SRV2012服务器安装iSCSI目标服务器角色并配置2块虚拟磁盘给两台群集服务器共享使用。群集服务器安装群集功能,…

Python 中最强大的错误重试库

作者 | 费弗里来源丨Python大数据分析1 简介我们在编写程序尤其是与网络请求相关的程序,如调用web接口、运行网络爬虫等任务时,经常会遇到一些偶然发生的请求失败的状况,这种时候如果我们仅仅简单的捕捉错误然后跳过对应任务,肯定…

Spring Cloud云架构 - SSO单点登录之OAuth2.0登录流程(2)

上一篇是站在巨人的肩膀上去研究OAuth2.0,也是为了快速帮助大家认识OAuth2.0,闲话少说,我根据框架中OAuth2.0的使用总结,画了一个简单的流程图(根据用户名密码实现OAuth2.0的登录认证): 上面的图…

php的POSIX 函数以及进程测试

参考&#xff1a;http://cn.php.net/manual/zh/ref.posix.php <?phpecho posix_getpid(); //8805sleep(10);?>再用 #ps -ax这个时候如果多开开个浏览器请求&#xff0c;就会发现Apache自动增加了几个新的进程我们发现并非一直请求同一个进程重启apache # /usr/local/ap…

CAS (10) —— JBoss EAP 6.4下部署CAS时出现错误exception.message=Error decoding flow execution的解决办法...

CAS (10) —— JBoss EAP 6.4下部署CAS时出现错误exception.messageError decoding flow execution的解决办法 jboss版本: jboss-eap-6.4-CVE-2015-7501 jdk版本: 1.7.0_79 cas版本: cas 4.1.3 参考来源: Nabble: exception.messageErrordecodingflowexecution Nabble: Caused …

昇思MindSpore1.6发布 AI开发者体验再升级

智能时代&#xff0c;AI技术正在发挥至关重要的作用&#xff0c;而开源的深度学习框架不仅能够降低AI开发者的门槛&#xff0c;而且能够极大节省成本与时间&#xff0c;成为创新的重要推手。2022年3月26-27日&#xff0c;昇思MindSpore TechDay活动线上成功举办&#xff0c;包含…

深入解析:TRUNCATE TABLE 的内部原理解析与恢复思路

摘要 众所周知&#xff0c;truncate table 是一种快速清空表内数据的一种方式&#xff0c;与 delete 方式不同&#xff0c;truncate 只产生非常少的 redo 和 undo&#xff0c;就实现了清空表数据并降低表 HWM 的功能。本文主要围绕 truncate table 的实现原理和 truncate table…

Linux exec与重定向

exec和source都属于bash内部命令&#xff08;builtins commands&#xff09;&#xff0c;在bash下输入man exec或man source可以查看所有的内部命令信息。 bash shell的命令分为两类&#xff1a;外部命令和内部命令。外部命令是通过系统调用或独立的程序实现的&#xff0c;如se…

俄罗斯 Android 系统受限,或将转用 HarmonyOS!

整理 | 郑丽媛出品 | CSDN近一个月来&#xff0c;受当前局势影响&#xff0c;部分底层工具、基础软件、开源项目已相继宣布在俄罗斯停服&#xff0c;期间不少人因此担忧&#xff1a;同出自美国且占据极大智能手机市场的 Android 和 iOS 是否会趁机“作乱”&#xff1f;结果&…

Ios应用网络安全之https

戴维营教育原创文章&#xff0c;转载请注明出处。我们的梦想是做最好的iOS开发培训&#xff01;iOS应用网络安全之HTTPS1. HTTPS/SSL的基本原理安全套接字层 (Secure Socket Layer, SSL) 是用来实现互联网安全通信的最普遍的标准。Web 应用程序使用 HTTPS&#xff08;基于 SSL …

云原生应用的10大关键属性

2019独角兽企业重金招聘Python工程师标准>>> “云原生”是用于描述基于容器的环境的术语&#xff0c;而Kubernetes是一个运行云原生应用程序工作负载的理想平台。 开发人员在设计云原生应用程序时&#xff0c;一定要牢记本文内这10个关键属性&#xff01; “云原生&…

grep 正则表达式及选项以及注意

说明&#xff1a;在原文基础上稍作了修改grep命令简介&#xff1a; 在ex编辑器&#xff08;我没用过&#xff09;中&#xff0c;启动ex编辑器后要查找某个字符串时&#xff0c;在ex的命令提示符后键入::/pattern/p:/g/pattern/pgrep这个名字就由来如此。其中p的含义是print&…

iOS_25彩票_幸运转盘

终于效果图: 各个view的关系图: 背景圆盘(须要扣图处理)LuckyBaseBackground.png 盖在背景圆盘上面的转盘 LuckyRotateWheel.png 代表一个星座或生肖的button背景图片 要创建12个,并以最下方中点为锚点进行旋转 对背景圆盘进行扣图,并在其上面盖上转盘图片的核心代码 在自己定义…

Python 自动化办公之 Excel 对比工具

作者 | 周萝卜来源丨萝卜大杂烩今天我们继续分享真实的自动化办公案例&#xff0c;希望各位 Python 爱好者能够从中得到些许启发&#xff0c;在自己的工作生活中更多的应用 Python&#xff0c;使得工作事半功倍&#xff01;需求由于工作当中经常需要对比前后两个 Excel 文件&am…

jQuery简单实现iframe的高度根据页面内容自适应的方法(转)

本文实例讲述了jQuery简单实现iframe的高度根据页面内容自适应的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;方式1&#xff1a;//注意&#xff1a;下面的代码是放在和iframe同一个页面中调用 $("#iframeId").load(function () {var mainheight $(t…

linux wc 命令简介

此wc命令不是让大家没有食欲的地方。而是linux下一个简单的小命令。NAMEwc — word, line, character, and byte countSYNOPSISwc [-clmw] [file ...]下面让我们来简单的看一下其支持的参数及其代表的含义。 参数及含义 参数含义-c显示文件的Bytes数(字节数)-l将每个文件的行数…

这个插件竟打通了Python和Excel,还能自动生成代码!

作者 | 云朵君来源丨数据STUDIO加载一个Jupyter插件后&#xff0c;无需写代码就能做数据分析&#xff0c;还帮你生成相应代码&#xff1f;没错&#xff0c;只需要加载这个名为Mito的小工具包&#xff0c;用Python做数据分析&#xff0c;变得和用Excel一样简单&#xff1a;介绍以…