最近分析的这个系统,逻辑架构中有一层是RPC interface。之前对RPC不熟悉,就上网搜索了一下资料,在此总结一下
RPC是Remote Procedure Calling,远程过程调用的缩写。并不是“远程进程调用”——Remote Process Calling哦
RPC总的来说是一个Client/Server的结构,提供服务的一方称为Server,消费服务的一方称为Client
哎,笔记本上什么画图软件都没装,只好用WINDOWS的画图随便画点示意的草图了
下图是本地过程调用,所有的过程都在本地服务器上,依次调用即可
下图则是所谓的远程过程调用,需要在Client和Server中交互
因此,两种调用方式,会产生什么区别呢?
1、网络传输的开销,和编程的额外复杂性
2、本地过程调用中,过程在同一块物理内存中,因此就可以传递指针了。而远程过程调用则不能,因为远程过程与调用者运行在完全不同的地址空间中
3、远程过程不能共享调用者的环境,所以它就无法直接访问调用者的I/O和操作系统API
简单来说,就是远程过程调用会比本地过程调用复杂。除了性能的额外开销之外,编程也复杂得多
至少可以想到,交互双方需要能够封装数据结构,理解协议,处理连接等等,确实是很麻烦的。可能一个很简单的调用,却需要做很多的编程工作。所以,为了简化RPC调用的编程,就提出了一个RPC的标准模型
下面是RPC的原理草图
可以看到,该模型中多了一个stub的组件,这个是约定的接口,也就是server提供的服务。注意这里的“接口”,不是指JAVA中的interface,因为RPC是跨平台跨语言的,用JAVA写的客户端,应该能够调用用C语言提供的过程
对客户端来说,有了这个stub,RPC调用过程对client code来说就变成透明的了,客户端代码不需要关心沟通的协议是什么,网络连接是怎么建立的。对客户端来说,它甚至不知道自己调用的是一个远程过程,还是一个本地过程
然后,前面说的理解协议,处理连接的工作,总是要有人做的,这个工作就是在下面的RPC Interface里完成的
最近几年,遇到这种场景(需要调用远程机器上的服务),往往会考虑用web service来完成,其实我认为web service和RPC是非常相像的,下面是web service的原理草图
对比一下RPC草图,就会发现非常的接近。在组件层次,和交互时序上完全没有差别,只是方框内的字不一样,但是实际上承担的职责却是完全对应的
web service接口就是RPC中的stub组件,规定了server能够提供的服务(web service),这在server和client上是一致的,但是也是跨语言跨平台的。同时,由于web service规范中的WSDL文件的存在,现在各平台的web service框架,都可以基于WSDL文件,自动生成web service接口
下面的web service框架,根据所选的平台有所不同,比如在JAVA平台中,现在最流行的是apache的cxf框架。它做的事情也和RPC Interface是一样的,负责解析协议(SOAP协议),负责处理连接(建立HTTP连接)
因此,我认为RPC和web service非常得接近,只是RPC的传输层协议,以及应用层协议,可以自行实现,所以选择的余地更大一点。可能会在性能和传输效率上,有更大的优势(不一定)
和web service有很多成熟框架可供选择一样,RPC也有很多现成的框架可供选择,比如在JAVA平台上有nfs-rpc等
总结来说,要实现远程过程调用,需要有3要素:
1、server必须发布服务
2、在client和server两端都需要有模块来处理协议和连接
3、server发布的服务,需要将接口给到client
当然,应用协议是什么样的,怎么连接,服务接口怎么给到client,是可以自行实现的,选择余地很大。但是RPC协议提供了一种标准的建议,如果没有特别的理由,我认为没有必要自行实现,但是清楚这个原理,总是好的
最后回到我最近正在分析的系统上来说。本文一开始就提到,它的架构中有一个RPC Interface
由于这不是一个开源系统,所以我并不清楚它的RPC Interface的实现,也就是说,我并不清楚它的应用协议和传输协议是什么。姑且假设它是用的标准RPC协议的
但是它将server服务发布给client的方式,是向client提供了API,对JAVA平台的程序员来说,就是一个xxx.jar
这个jar包里,有2部分内容:
1、client stub,包括接口和封装过的数据结构。即ServerService,和XXXForm、XXXFilter等。那对于client程序员来说,就只需要调用ServerService.xxxx()的方法,并组装XXXForm对象作为参数即可,类似
- public interface ServerService{
- public XXXFilter giveMeTheFilter(XXXForm form);
- }
程序员只需要关心怎么封装合适的XXXForm,以及什么时候调用giveMeTheFilter()方法即可,底层的协议,server端的实现,对client程序员来说都是透明的
2、RPC Interface层的实现。这部分就做了协议解析、连接处理、异常处理等,但这部分类,是不对client程序员开放的
这种通过API(SDK),向client发布服务的方式,我认为是有可取之处的
相关推荐
#### 技术对比与选择 - **统一性**:WCF通过提供一个统一的通信框架,整合了多种通信技术和标准,使得开发者可以在不改变代码的情况下,轻松地切换不同的通信协议和传输方式。 - **跨平台能力**:Web Service由于其...
SOAP Web服务和RESTful Web服务是两种常见的Web服务交互方式,它们在设计理念、协议复杂度、数据格式和操作方式等方面存在显著的区别。 首先,SOAP(简单对象访问协议)是一种基于XML的协议,它允许不同系统之间的...
#### 五、其他GoRPC框架对比 **Thrift**是Facebook开发的另一个著名的跨语言RPC框架,支持广泛的编程语言。它提供了编译器和库来构建跨语言服务,具有很强的灵活性。 **RPCX**是一个高性能、全功能的分布式RPC框架...
4. RESTful WebServices:对比REST与SOAP,介绍如何使用JAX-RS(Java API for RESTful Web Services)创建RESTful服务。 5. 与其他技术的集成:如JPA(Java Persistence API)和EJB(Enterprise JavaBeans)与Web...
在这个名为“myRpc”的项目中,我们看到作者提供了一个非常基础的RPC实现,它可能是为了帮助学习者理解RPC的基本原理和工作流程,以及对比更成熟的框架如Hessian。 首先,我们要了解RPC的基本概念。RPC框架的核心...
Web服务(Web Service)是一种基于互联网的、采用标准XML(Extensible Markup Language)进行通信的软件组件,允许不同系统间的应用程序进行交互。本压缩包文件提供了关于Web服务开发的详细指南,特别关注了三个主流...
### REST Service 的最佳实践 #### 引言 自2000年Roy Fielding提出REST架构风格以来,这一设计理念在软件开发领域产生了深远的影响。REST(Representational State Transfer)服务以其简洁、轻量且易于理解和使用...
- **配置终结点**:在服务配置文件(如`web.config`或`app.config`)中设置服务的地址、绑定和契约,指定所使用的消息交换模式。 - **服务实例化**:对于请求/响应和单向模式,可以选择瞬态或会话实例化策略;对于...
如果你正在学习或准备使用Web服务,了解这些框架的特性与差异将有助于做出明智的选择。提供的《Web_Service开发指南_2.3.1.pdf》可能会详细介绍这些框架的使用方法和最佳实践,而"173软件下载.txt"和"173绿色软件....
JCA(Java Connector Architecture)适配器技术则用于非Java系统的连接,还有JDO(Java Data Objects)规范简化了数据库访问,以及JAX-RPC(Java API for XML-based RPC)为WebServices提供了全面支持。然而,J2EE的...
**与Web Server对比** 与传统的Web Server相比,PSF的优势在于: - **daemon vs. request**: 无需处理每个请求的生命周期,而是持续监听和服务。 - **无需负载均衡层**: 客户端直接与服务实例通信,减少了中间环节...
复杂:数据相对复杂,没有json那样的美观,一句话简陋得不能再简陋(需要靠读rpcservice.js和dump结果分析)。 3、我下次会专门抽时间,把协议简单理一下,并画出w.qq.com中的js简单逻辑流程图 【备注】 1、源码...
**对比SOAP与REST** SOAP和REST(Representational State Transfer)是两种主要的Web服务风格。SOAP更注重消息的完整性和安全性,适合企业级的、需要强类型和事务处理的场景。而REST则更轻量,基于HTTP协议,易于...
Dubbo 并不需要 Web 容器,但可以与之配合使用,如果强行使用 Web 容器,可能会增加复杂性和资源消耗。 6. Dubbo 内置了哪些服务容器?包括 Spring Container、Jetty Container 和 Log4j Container。 7. Dubbo 中...
另外,Feign 是一个声明式 Web Service 客户端,它简化了 Ribbon 的使用。 3. **断路器(Circuit Breaker)**:Hystrix 是一个断路器实现,用于隔离远程系统、服务和第三方库的访问点,当出现故障时停止并控制异常...
#### 七、REST与Big Web Services的对比 - **资源导向与过程导向**:REST倾向于资源导向,而Big Web Services则更多地关注过程调用。 - **轻量级与重量级**:REST通常被认为是轻量级的,因为它使用简单的HTTP方法和...
- **Web Services 1.1**:包括JAX-RPC、JAXM、SAAJ等。 2. **J2EE 1.4**: - 在J2EE 1.3的基础上,更新了EJB到2.1版,Servlets到2.4版,JSP到2.0版,并引入了JCA、Web Services 1.1等新特性。 3. **Java EE 5.0*...
在IT行业中,分布式服务框架是实现大规模系统的关键技术之一,而Dubbo作为阿里巴巴开源的一款高性能、轻量级的Java RPC框架,广泛应用于企业级开发。本压缩包“DuBBo(rmi+Hessian).zip”提供了关于Dubbo如何与RMI...