大家好,又见面了,我是你们的朋友全栈君。
根据网上搜索的一些资料摘抄汇总的,如果有误,欢迎斧正。
作者:肖继潮 链接:http://www.zhihu.com/question/25536695/answer/31046384 来源:知乎 著作权归作者所有,转载请联系作者获得授权。
早期单机时代,一台电脑上运行多个进程,大家各干各的,老死不相往来。假如A进程需要一个画图的功能,B进程也需要一个画图的功能,程序员就必须为两个进程都写一个画图的功能。这不是整人么?于是就出现了IPC(Inter-process communication,单机中运行的进程之间的相互通信)。OK,现在A既然有了画图的功能,B就调用A进程上的画图功能好了,程序员终于可以偷下懒了。
到了网络时代,大家的电脑都连起来了。以前程序只能调用自己电脑上的进程,能不能调用其他机器上的进程呢?于是就程序员就把IPC扩展到网络上,这就是RPC(远程过程调用)了。现在不仅单机上的进程可以相互通信,多机器中的进程也可以相互通信了。
要知道实现RPC很麻烦呀,什么多线程、什么Socket、什么I/O,都是让咱们普通程序员很头疼的事情。于是就有牛人开发出RPC框架(比如,CORBA、RMI、Web Services、RESTful Web Services等等)。
OK,现在可以定义RPC框架的概念了。简单点讲,RPC框架就是可以让程序员来调用远程进程上的代码一套工具。有了RPC框架,咱程序员就轻松很多了,终于可以逃离多线程、Socket、I/O的苦海了。 ===================================================
作者:用心阁 链接:http://www.zhihu.com/question/25536695/answer/36197244 来源:知乎 著作权归作者所有,转载请联系作者获得授权。
首先了解什么叫RPC,为什么要RPC,RPC是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。
比如说,一个方法可能是这样定义的: Employee getEmployeeByName(String fullName) 那么:
(图片来源: https://www.cs.rutgers.edu/~pxk/417/notes/03-rpc.html)
为什么RPC呢?就是无法在一个进程内,甚至一个计算机内通过本地调用的方式完成的需求,比如比如不同的系统间的通讯,甚至不同的组织间的通讯。由于计算能力需要横向扩展,需要在多台机器组成的集群上部署应用,
RPC的协议有很多,比如最早的CORBA,Java RMI,Web Service的RPC风格,Hessian,Thrift,甚至Rest API。
=============================================================================================
作者:马秉尧 链接:http://www.zhihu.com/question/25536695/answer/109977506 来源:知乎 著作权归作者所有,转载请联系作者获得授权。
RPC(远程过程调用)是什么
远程过程调用发展历程
早期的 RPC
XML-RPC,SOAP,WebService
PHPRPC
Hessian
JSON-RPC
Microsoft WCF,WebAPI
ZeroC Ice,Thrift,GRPC
Hprose
===================================================================================== 作者:iseeyou 链接:http://www.zhihu.com/question/25536695/answer/113449098 来源:知乎 著作权归作者所有,转载请联系作者获得授权。
RPC是系统间的一种通信方式,系统间常用的通信方式还有http,webservice,rpc等,一般来讲rpc比http和webservice性能高一些,常见的RPC框架有:thrift,Finagle,dubbo,grpc,json-rpc等。
一个通用的网络RPC框架,它应该包括如下功能:
1.具有服务的分层设计,借鉴Future/Service/Filter概念 2.具有网络的分层设计,区分协议层、数据层、传输层、连接层 3.独立的可适配的codec层,可以灵活增加HTTP,Memcache,Redis,MySQL/JDBC,Thrift等协议的支持。 4.将多年各种远程调用High availability的经验融入在实现中,如负载均衡,failover,多副本策略,开关降级等。 5.通用的远程调用实现,采用async方式来减少业务服务的开销,并通过future分离远程调用与数据流程的关注。 6.具有状态查看及统计功能 7.当然,最终要的是,具备以下通用的远程容错处理能力,超时、重试、负载均衡、failover……
QiuRPC是一个采用JAVA实现的小巧的RPC框架,一共3K多行代码,已在github开源出来,项目地址为: GitHub – i1see1you/QiuRPC: 一个简单的RPC框架,实现了RPC的基本功能,开发者也可以自定义扩展,可以供大家学习探讨或者在小项目中使用,目前QiuRPC具有如下特点: 1. 服务端基于注解,启动时自动扫描所有RPC实现,基本零配置 2. 客户端实现Filter机制,可以自定义Filter 3. 基于netty的Reactor IO多路复用网络模型 4. 数据层提供protobuff和hessian的实现,可以扩展ISerializer接口自定义实现其他 5. 负载均衡算法采用最少活跃调用数算法,可以扩展ILoadBlance接口自定义实现其他 6. 客户端支持服务的同步或异步调用
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/144221.html原文链接:https://javaforall.cn