[转载]通俗的语言解释一下什么是 RPC 框架

来自知乎:https://www.zhihu.com/question/25536695

关于RPC
你的题目是RPC框架,首先了解什么叫RPC,为什么要RPC,RPC是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。

比如说,一个方法可能是这样定义的:
Employee getEmployeeByName(String fullName)
那么:

  • 首先,要解决通讯的问题,主要是通过在客户端和服务器之间建立TCP连接,远程过程调用的所有交换的数据都在这个连接里传输。连接可以是按需连接,调用结束后就断掉,也可以是长连接,多个远程过程调用共享同一个连接。
  • 第二,要解决寻址的问题,也就是说,A服务器上的应用怎么告诉底层的RPC框架,如何连接到B服务器(如主机或IP地址)以及特定的端口,方法的名称名称是什么,这样才能完成调用。比如基于Web服务协议栈的RPC,就要提供一个endpoint URI,或者是从UDDI服务上查找。如果是RMI调用的话,还需要一个RMI Registry来注册服务的地址。
  • 第三,当A服务器上的应用发起远程过程调用时,方法的参数需要通过底层的网络协议如TCP传递到B服务器,由于网络协议是基于二进制的,内存中的参数的值要序列化成二进制的形式,也就是序列化(Serialize)或编组(marshal),通过寻址和传输将序列化的二进制发送给B服务器。
  • 第四,B服务器收到请求后,需要对参数进行反序列化(序列化的逆操作),恢复为内存中的表达方式,然后找到对应的方法(寻址的一部分)进行本地调用,然后得到返回值。
  • 第五,返回值还要发送回服务器A上的应用,也要经过序列化的方式发送,服务器A接到后,再反序列化,恢复为内存中的表达方式,交给A服务器上的应用

为什么RPC呢?就是无法在一个进程内,甚至一个计算机内通过本地调用的方式完成的需求,比如比如不同的系统间的通讯,甚至不同的组织间的通讯。由于计算能力需要横向扩展,需要在多台机器组成的集群上部署应用,

RPC的协议有很多,比如最早的CORBA,Java RMI,Web Service的RPC风格,Hessian,Thrift,甚至Rest API。

时间: 2024-10-23 04:37:17

[转载]通俗的语言解释一下什么是 RPC 框架的相关文章

通俗的语言解释面向对象

面向对象: Jeff Goodell:请你用尽量简练的语言解释一下,究竟什么是面向对象的软件? 乔布斯:对象就像人一样,也是活生生的生命.他们有知识,知道怎么完成任务:他们有记忆,可以把发生的事情记下来.而你和他们的互动并不是低层次的,你是与他们在一个高度抽象的层面上互动,就像我们现在的对话一样. 我举个例子来说明.如果我是一个“洗衣”对象,你可以把脏衣服给我,然后告诉我说:“请帮我把这些衣服洗了吧!”而我恰好知道旧金山最好的洗衣房在哪,并且 我会说英语,兜里也有美元.于是我出门打了一辆出租车,

转载:怎样用通俗的语言解释REST,以及RESTful?

作者:覃超链接:https://www.zhihu.com/question/28557115/answer/48094438来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. URL定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述操作. --- 简洁版 --- 0. REST不是"rest"这个单词,而是几个单词缩写.但即使那几个单词说出来,也无法理解在说什么 -_-!! (不是要贬低人,是我自己也理解困难):1. REST描述的是

用通俗的例子解释OAuth和OpenID的区别【原】

什么是OAuth(Wiki) 什么是OpenID(Wiki) 详细的定义可以看wiki,下面举个例子说说我的理解 现在很多网站都可以用第三方的账号登陆,比如,现在我要登录淘宝买东西,而如果我没有淘宝的账号,我也可以用微博的账号登录,这个微博账号就是第三方账号了. OpenID强调 验证 authentication,而OAuth强调 授权 authorization. 验证就是说“我”是不是(微博用户),而授权是说“淘宝”可不可以,而可不可以的前提则是“我”是不是. 过程大概是这样 我点开微博登

【转载】C语言 构建参数个数不固定函数

深入浅出可变参数函数的使用技巧本文主要介绍可变参数的函数使用,然后分析它的原理,程序员自己如何对它们实现和封装,最后是可能会出现的问题和避免措施. VA函数(variable argument function),参数个数可变函数,又称可变参数函数.C/C++编程中,系统提供给编程人员的va函数很少.*printf()/*scanf()系列函数,用于输入输出时格式化字符串:exec*()系列函数,用于在程序中执行外部文件(main(int argc,char*argv[]算不算呢,与其说main

如何用通俗易懂的语言解释需求变更带来的项目影响

如何用通俗易懂的语言解释需求变更带来的项目影响 你去饭店,坐下来.“服务员,给我来份宫保鸡丁!”“好嘞!”——————这叫原始需求 大厨做到一半.“服务员,菜里不要放肉.”“不放肉怎么做啊?”“不放肉就行了,其它按正常程序做,不就行了,难吗?”“好的您稍等”——————中途需求变更 厨房:大厨:“你大爷,我肉都回锅了”服务员:“顾客非要要求的嘛,你把肉挑出来不就行了吗”大厨:“行你大爷”然而还是一点点挑出来了——————改动太大,部分重构 餐厅:“服务员,菜里能给我加点腐竹吗?”“行,这个应该简

(转载)C语言单链表实现19个功能完全详解

最近在复习数据结构,想把数据结构里面涉及的都自己实现一下,完全是用C语言实现的. 自己编写的不是很好,大家可以参考,有错误希望帮忙指正,现在正处于编写阶段,一共将要实现19个功能.到目前我只写了一半,先传上来,大家有兴趣的可以帮忙指正,谢谢 在vs2010上面编译运行无错误. 每天都会把我写的新代码添加到这个里面.直到此链表完成. #include "stdafx.h" #include "stdio.h" #include <stdlib.h> #in

[转载]学习C语言基本思路与参考书籍

http://zhuanlan.zhihu.com/linjr/19694823 计算机行业发展非常快,大学里的教育基本都跟不上实际的社会需求.如果你所在的学校还在指定大家使用谭浩强的教材,或使用VC6.0来教大家上机实验,那你不妨看看本文,这里有一些建议可以帮助你不会脱离社会太远. 考虑到这是一个过来人感觉很基础,但是对于初学者又觉得困难重重的问题,我想如果这篇文章要想写得不让你觉得专业名词扎堆,内容高深莫测,读完还是不知所云,那最好的办法也许是,我们通过沟通的方式把整个「C语言应该怎么学」的

【转载】分布式RPC框架性能大比拼

dubbo.motan.rpcx.gRPC.thrift的性能比较 Dubbo 是阿里巴巴公司开源的一个Java高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成.不过,略有遗憾的是,据说在淘宝内部,dubbo由于跟淘宝另一个类似的框架HSF(非开源)有竞争关系,导致dubbo团队已经解散(参见http://www.oschina.net/news/55059/druid-1-0-9 中的评论),反到是当当网的扩展版本仍在持续发展,墙

架构、引擎与UI通用语言解释

做项目的人,通常都懂得我说的这三个词,今天我用通用点的语言来解释一下: 其实,我们在做一个项目的时候,跟生产车是差不多的. 架构:整个车所有的东西,应该怎么放,放到哪个位置更合理,怎么才能让用户感觉到舒适. 引擎:发动机.螺丝.布线,怎么能让车跑的更快. 外观:当我们走到车的面前,能看到的部分,都叫外观.