RPC(远过程调用)在分布式系统中是很常用的基础通讯方式,核心思想是将不同进程之间的通讯抽象为函数调用。
基本的过程是:
1、调用端将参数序列化到流中并发送给服务端
2、服务端从流中反序列化出参数并完成实际的处理
3、将结果序列化后返回给调用端。
通常的RPC由接口形式来定义,接口定义服务的名字,接口方法定义每个请求的输入参数和返回结果,并且RPC内部的序列化、网络通讯等实现细节则由框架来完成,对开发人员来说是完全透明的。
RPC结构的一个轻量级框架结构图:
根据上图的结构,描述一下rpc的详细过程:
一、启动过程
1、Rpc-server 负责启动rpc服务,服务启动时开始监听制定的端口号;
2、启动时将绑定服务处理的Handler(Rpc-Handler),以及Encoder类与Decoder类
3、启动后调用RpcRegister类的egister方法,将发现的Rpc服务注册到服务调度中心
二、 客户端同步调用过程
1、用户通过Proxy 类创建一个Rpc服务客户端;
2、再用胡调用Rpc服务时,Proxy调用Rpc-Client的send方法(在send方法中调用Encoder类进行序列化),将服务请求发送到Rpc-Server;
3、Rpc监听端口的服务收到请求后将服务转给Rpc-Handler来处理;
4、Rpc-Handler收到通知后先调用Decoder类进行反序列化,然后开启一个新的线程来处理客户端请求,请求处理完成之后,Handler直接相应给客户端;
5、客户端收到回应之后调用Decoder类进行反序列化,如果有异常就抛出,否则返回服务端的返回值
三、客户端异步调用过程
1、用户通过Proxy 类创建一个Rpc服务客户端;
2、再用胡调用Rpc服务时,Proxy调用Rpc-Client的call方法(在send方法中调用Encoder类进行序列化),将服务请求发送到Rpc-Server,请求发送完成后,客户端继续执行剩余业务逻辑;
3、Rpc监听端口的服务收到请求后将服务转给Rpc-Handler来处理;
4、Rpc-Handler收到通知后先调用Decoder类进行反序列化,然后开启一个新的线程来处理客户端请求,请求处理完成之后,Handler直接相应给客户端;
5、如果用户注册了回调函数,则客户端收到回应之后调用Decoder类进行反序列化,然后执行回调逻辑;如果没有注册回调函数,那么客户端发送完请求后就结束了
注:感谢各位网友贡献的源码,大部分源码都是使用别人的,本人只是在这基础上进行的部优化。
相关推荐
轻量级RPC框架是指在不引入过多复杂性的情况下,设计用于快速开发和部署分布式应用的框架。在这个场景中,我们将讨论如何利用Zookeeper、Socket和Java动态代理来构建这样一个框架。 Zookeeper是Apache Hadoop的一个...
标题中的“一款基于Netty+Zookeeper+Spring实现的轻量级Java RPC框架”揭示了这个项目的核心技术栈,它整合了三个在分布式系统中广泛使用的开源库:Netty、Zookeeper和Spring。让我们逐一深入探讨这三个技术以及它们...
- **高性能**:Doge利用Python的异步IO能力,如asyncio库,实现了高并发处理,有效提高了系统吞吐量。 - **轻量级**:Doge框架设计简洁,易于理解和集成到现有项目中。 - **服务治理**:支持服务注册与发现,动态...
2. **轻量级**:由于JSON-RPC的轻量级特性,它在网络传输中占用的带宽较少,这使得它在处理大量小规模请求时具有更高的性能。 3. **双向通信**:JSON-RPC支持客户端和服务器之间的双向通信,即可以由客户端发起调用...
在“rpc-Group.zip”这个压缩包中,"Group-master"可能是一个项目源码仓库的主分支,表明这个轻量级框架可能包含了与远程过程调用(RPC)相关的组件或服务。RPC使得在分布式系统中,程序可以像调用本地方法一样调用...
森林(forest)是一个基于Netty构建的轻量级、高性能的分布式RPC服务框架。这个框架的设计目标是简化RPC调用,提高服务之间的通信效率,并且提供了丰富的功能来应对分布式环境中的各种挑战。让我们深入探讨一下forest...
falcon作为轻量级框架,意味着它的设计和实现都是为了最小化资源消耗和提高性能。这通常体现在以下几个方面: 1. **简单API**:falcon提供简洁的API接口,使开发者能够快速理解和集成到项目中。 2. **小体积**:...
1. **casock框架**:casock是一个轻量级的RPC框架,旨在简化C++应用程序之间的通信。它的设计目标是提供高效、灵活且易于使用的接口,让开发者能够快速构建分布式系统。 2. **google protobuf**:protobuf是Google...
zerorpc是一个Python实现的轻量级RPC库,它基于msgpack作为序列化协议,而gevent是一个强大的事件驱动库,通过协程实现高效的并发。 首先,zerorpc是这个框架的核心组件,它提供了一种灵活且易于使用的接口来定义和...
我也算得上是在很多个互联网企业厮杀过,见过很多很多的内部RPC框架,有些优秀的设计让我非常赞赏,有一天我突然想着,为什么不对这些设计原型进行聚合归类,自己搞一套【轻量级】RPC框架呢,碍于工作原因,一直...
SOFA Bolt 是阿里巴巴开源的一款基于 Netty 实现的轻量级、易用且高性能的远程处理框架。这款框架的设计目标是为分布式系统提供简单、高效的通信能力,适用于微服务架构中的服务间通信。在深入理解 SOFA Bolt 之前,...
JSON-RPC是一种轻量级的RPC协议,使用JSON作为数据交换格式,易于理解和实现。 3. **JSON协议**:JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在...
谷歌开源的leveldb是一款轻量级、高性能的键值存储库,常用于构建数据库、日志记录和缓存系统。它基于Log-Structured Merge Tree(LSMT)数据结构,提供顺序写入、随机读取的优秀性能。leveldb的引入可能与百度RPC...
Dubbo协议是默认且推荐的,它基于TCP,实现了高性能、轻量级的二进制协议。其他协议各有优缺点,适用于不同的场景。 **四、负载均衡** Dubbo内置了多种负载均衡策略,如Random、RoundRobin、LeastActive等。这些...
SOFARPC,全称为Simplified Open For阿里的Remote Procedure Call,是阿里巴巴开源的一款高性能、轻量级的RPC框架,广泛应用于分布式系统中。SOFARPC v5.12.0作为其重要的版本迭代,带来了诸多改进和新特性,对于...
`Simple-RPC`是一个专为Java开发者设计的轻量级RPC(远程过程调用)框架,它利用了高性能的网络库`Netty`来实现实时、高效的远程通信。RPC框架在分布式系统中起到了关键作用,它允许不同的应用程序组件之间通过网络...
Dubbo,作为阿里巴巴开源的一款高性能、轻量级的Java RPC框架,已经成为了企业级应用的首选之一。本篇文章将深入探讨基于Dubbo实现的RPC框架,以及其在JAVA开发中的应用。 首先,我们了解RPC的基本原理。RPC框架的...
1. **dubbo**:Dubbo是一个高性能、轻量级的Java RPC框架,它提供了服务注册、服务发现、负载均衡、调用链跟踪等功能,是构建分布式系统的关键工具。 2. **springboot**:SpringBoot简化了Spring应用的初始搭建以及...