谁能用通俗的语言解释一下什么是java rpc框架有哪些

谁能用通俗的语言解释一下什么是RPC框架_百度知道
谁能用通俗的语言解释一下什么是RPC框架
提问者采纳
采用的是二进制RPC协议,以及最重要的 C++&#47。
2,它是一款构建于Netty和Hessian基础上的高性能的RPC框架,当然。
3。比如搭建一个 Hello World Service 只需要几分钟,还包括很 cool 的 RubyThrift 是由 Facebook 开源的一个 RPC 框架,包括在 WEB 开发中很常用的 PHP:
1. 支持非常多语言,且速度较快.org 下了,现在已经挂在Java 等
WEB后端常用语言,还有Hetty,非常轻量级 、Erlang,开发者只需要集中精力处理好
业务逻辑;Python&#47,用脚本生成通讯相关的框架代码.拥有被 Facebook。Hessian是一款基于HTTP协议的RPC框架。当然、Last. 完整的 RPC 框架实现。主要的几个好处.fm 等不少大规模互联网应用验证过的性能和可用性
来自团队:
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁谁能用通俗的语言解释一下什么是RPC框架_百度知道
谁能用通俗的语言解释一下什么是RPC框架
我有更好的答案
它是一款构建于Netty和Hessian基础上的高性能的RPC框架.fm 等不少大规模互联网应用验证过的性能和可用性。
3,采用的是二进制RPC协议,还有Hetty,非常轻量级 Thrift 是由 Facebook 开源的一个 RPC 框架。
2,且速度较快。
Hessian是一款基于HTTP协议的RPC框架. 完整的 RPC 框架实现. 支持非常多语言、Last。主要的几个好处.拥有被 Facebook。比如搭建一个 Hello World Service 只需要几分钟,当然,开发者只需要集中精力处理好
业务逻辑.org 下了,用脚本生成通讯相关的框架代码;Python&#47,包括在 WEB 开发中很常用的 PHP、Erlang,还包括很 cool 的 RJava 等
WEB后端常用语言,以及最重要的 C++&#47:
1,现在已经挂在 apache。
其他类似问题
为您推荐:
rpc的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁了解到最近Java的Netty很火,只知道它是这样类型的一种框架想了解一下它主要用于解决了什么问题适用于什么样的场景
各位介绍的都很好,最近我也开始学习使用RPC相关的框架,google的GRPC,还有facebook开源的Thrift RPC,哪个在实践中使用起来更方面,我目前用的是centos6的系统,请大家给出比较,谢谢!
&b&关于RPC&/b&&br&你的题目是RPC框架,首先了解什么叫RPC,为什么要RPC,RPC是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。&br&&br&比如说,一个方法可能是这样定义的:&br&Employee getEmployeeByName(String fullName)&br&那么:&br&&ul&&li&首先,要解决通讯的问题,主要是通过在客户端和服务器之间建立TCP连接,远程过程调用的所有交换的数据都在这个连接里传输。连接可以是按需连接,调用结束后就断掉,也可以是长连接,多个远程过程调用共享同一个连接。&/li&&li&第二,要解决寻址的问题,也就是说,A服务器上的应用怎么告诉底层的RPC框架,如何连接到B服务器(如主机或IP地址)以及特定的端口,方法的名称名称是什么,这样才能完成调用。比如基于Web服务协议栈的RPC,就要提供一个endpoint URI,或者是从UDDI服务上查找。如果是RMI调用的话,还需要一个RMI Registry来注册服务的地址。&br&&/li&&li&第三,当A服务器上的应用发起远程过程调用时,方法的参数需要通过底层的网络协议如TCP传递到B服务器,由于网络协议是基于二进制的,内存中的参数的值要序列化成二进制的形式,也就是序列化(Serialize)或编组(marshal),通过寻址和传输将序列化的二进制发送给B服务器。&/li&&li&第四,B服务器收到请求后,需要对参数进行反序列化(序列化的逆操作),恢复为内存中的表达方式,然后找到对应的方法(寻址的一部分)进行本地调用,然后得到返回值。&/li&&li&第五,返回值还要发送回服务器A上的应用,也要经过序列化的方式发送,服务器A接到后,再反序列化,恢复为内存中的表达方式,交给A服务器上的应用&/li&&/ul&&img src=&/abfd0ac3b43bccc1abc3_b.jpg& data-rawwidth=&500& data-rawheight=&314& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&/abfd0ac3b43bccc1abc3_r.jpg&&&br&(图片来源:&a href=&///?target=https%3A//www.cs.rutgers.edu/%7Epxk/417/notes/03-rpc.html& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&cs.rutgers.edu/~pxk/417&/span&&span class=&invisible&&/notes/03-rpc.html&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&)&br&&br&为什么RPC呢?就是无法在一个进程内,甚至一个计算机内通过本地调用的方式完成的需求,比如比如不同的系统间的通讯,甚至不同的组织间的通讯。由于计算能力需要横向扩展,需要在多台机器组成的集群上部署应用,&br&&br&RPC的协议有很多,比如最早的CORBA,Java RMI,Web Service的RPC风格,Hessian,Thrift,甚至Rest API。&br&&br&&b&关于Netty&/b&&br&而Netty框架不局限于RPC,更多的是作为一种网络协议的实现框架,比如HTTP,由于RPC需要高效的网络通信,就可能选择以Netty作为基础。除了网络通信,RPC还需要有比较高效的序列化框架,以及一种寻址方式。如果是带会话(状态)的RPC调用,还需要有会话和状态保持的功能。&br&&br&大体上来说,Netty就是提供一种事件驱动的,责任链式(也可以说是流水线)的网络协议实现方式。网络协议包含很多层次,很多部分组成,如传输层协议,编码解码,压缩解压,身份认证,加密解密,请求的处理逻辑,怎么能够更好的复用,扩展,业界通用的方法就是责任链,&br&&br&一个请求应答网络交互通常包含两条链,一条链(Upstream)是从传输层,经过一系列步骤,如身份认证,解密,日志,流控,最后到达业务层,一条链(DownStream)是业务层返回后,又经过一系列步骤,如加密等,又回到传输层。 &br&&img src=&/aba782ff5ff61b70f842b64_b.jpg& data-rawwidth=&422& data-rawheight=&540& class=&origin_image zh-lightbox-thumb& width=&422& data-original=&/aba782ff5ff61b70f842b64_r.jpg&&(图片来源:&a href=&///?target=https%3A//docs.jboss.org/netty/3.2/api/org/jboss/netty/channel/ChannelPipeline.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ChannelPipeline (The Netty Project API Reference (3.2.6.Final))&i class=&icon-external&&&/i&&/a&)&br&&br&这样每一层都有一个处理接口,都可以进行不同的操作,比如身份认证,加解密,日志,流控,将不同的处理实现像拼积木那样插接起来就可以实现一个网络协议了(快速开发)。每一层都有自己的实现,上层不需要关注面向网络的操作(可维护)。Netty已经提供了很多实现。&br&&br&&img src=&/7decee9dcaebb0fea7d2be3_b.jpg& data-rawwidth=&592& data-rawheight=&348& class=&origin_image zh-lightbox-thumb& width=&592& data-original=&/7decee9dcaebb0fea7d2be3_r.jpg&&(图片来源:&a href=&///?target=http%3A//docs.jboss.org/netty/3.1/guide/html/architecture.html& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&docs.jboss.org/netty/3.&/span&&span class=&invisible&&1/guide/html/architecture.html&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&)&br&当然Netty还有许多好处,比如对非阻塞IO(NIO)的支持,比如在链上传递时最大程度的减少buffer的copy(高性能)。
关于RPC你的题目是RPC框架,首先了解什么叫RPC,为什么要RPC,RPC是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调…
Netty只是网络通信框架,把Java Socket的API又封装了一次,使得你可以用最少的代码来完成网络通信这一任务。&br&&br&回到RPC 上,我的看法和 &a data-hash=&b01e39fea3a66f124bd8& href=&///people/b01e39fea3a66f124bd8& class=&member_mention& data-editable=&true& data-title=&@肖继潮& data-tip=&p$b$b01e39fea3a66f124bd8&&@肖继潮&/a& 略有不同。&br&&br&根据字面意思来推断,RPC 的确是为了进程间通信而准备的,但构造成函数调用这一形式,是因为这是在抽象上最合理的。&br&&br&我们可以推断演进一下&br&====&br&1. A B 两个进程之间需要进行数据交换。&br&2.于是我们想出来在某个内存区域划出一个空间,然后向该空间中写入和读取数据。(共享文件也可以)(常见的socket就是这一共享内存的抽象,只是现在大多指网络通路)&br&3.A B 通信完成。&br&====&br&4.A B需要完成更复杂的交互&br&5.于是我们指定一个协议,A B 根据该协议对数据的进行编码解码,根据协议内容做出决策。&br&====&br&6.发现协议过于复杂(比如 编号1代表调用 a函数,编号2代表b函数) &br&7.试图优化协议,将函数参数和调用的函数名称作为协议的一部分,函数返回值类似&br&8.RPC达成&br&=====&br&9.表现出来的特性就是,object invok(parameter),就代表了,序列化 parameter 对象到中间格式,利用远程服务器的 invok 函数进行处理 ,同时将返回的数据解码生成 object对象。&br&&br&======总结=====&br&&br&RPC 在整个过程中,体现了逐层抽象,将复杂的协议编解码和数据传输封装到了一个函数中。&br&&br&======缺点=====&br&单一 RPC 无法实现 push,即推送服务。&br&理由是,RPC 是client 调用 server获取数据,是一个完整的过程,实现不了server调用client。&br&解决方案:让client 既可以调用server上的RPC服务,反之client本身也成为一个RPC服务让Server来调用。&br&&br&=====回到题主的问题====&br&1. Netty只是网络通信框架,目的是让你用最少的代码构建出足够支撑网络通信的功能。&br&&br&2.完成RPC 需要两个协议: 对象序列化协议
和 调用控制协议&br&&br&常见例子举例:&br&&br&1.zeroC ICE,拥有自己的网络通信框架 + ICE 调用控制协议和对象序列化协议,同时也涵盖了服务组件的抽象部署等功能。&br&&br&2.thrift,有自己的网络通信框架+thrift 对象序列化协议+thrift 调用控制协议&br&&br&3.probuff,只是 对象序列化协议&br&&br&4.XMLRPC ,jsonRPC,常见的语境是利用HTTP协议作为调用控制协议,XML 和 JSON 作为对象序列化之后的格式。&br&&br&5.其他的大概也差不多了。
Netty只是网络通信框架,把Java Socket的API又封装了一次,使得你可以用最少的代码来完成网络通信这一任务。回到RPC 上,我的看法和
略有不同。根据字面意思来推断,RPC 的确是为了进程间通信而准备的,但构造成函数调用这一形式,是因为这是在抽象…
已有帐号?
无法登录?
社交帐号登录
在gis的世界里找到自己的价值!谁能用通俗的话语给我解释一下 基准面 基准点 基准轴 ,也可以举个简单的例子,我知道它们是干什么的就是不明白为什么要用它们 ...我新手
基准点,是指一段直线上的参照点(出发点,起点等等),没有基准点,我们根本无法引出距离的概念.比如:数轴上的0点可以是基准点,基准点的右边是正数,基准点的左边是负数,离这个基准点越远数值的绝对值也越大.基准轴,也可以叫基准线,它是描述一个平面上两条平行线之间距离的基准线,也是描述旋转体、对称体用到的直线.比如,字母 A 绕着过它中心的垂直基准轴线旋转一周,就可以得到一个外形三角立方体.基准面,就是一个假象的、没有厚度的、位于空间的一个平面,我们可以这个平面为基准来研究山有多高?水有多深?比如,大海的水面就可以是一个基准面.啰嗦这么多,不知能否帮你解惑?
为您推荐:
其他类似问题
扫描下载二维码

我要回帖

更多关于 java rpc 框架 的文章

 

随机推荐