目录
目录README.md

一、RPC(Remote Procedure Call Protocol 远程过程调用协议): RPC是指通过网络从远程计算机程序上请求服务,不需要了解底层网络技术的协议,使得不同的服务间方法调用就像本地调用一样便捷。 常见的RPC技术框架有应用级的服务框架:阿里的 Dubbo/Dubbox、Google gRPC、Spring Boot/Spring Cloud;远程通信协议:RMI、Socket、SOAP(HTTP XML)、REST(HTTP JSON);通信框架:MINA 和 Netty 二、RPC核心功能: RPC的核心功能实现主要分为三个部分,分别是服务寻址、序列化反序列化和网络传输。 (一) 服务寻址: 在本地方法调用中,函数体是直接通过函数指针来指定的,但是在远程调用中,由于两个进程的地址空间完全不一样,函数指针不起作用。想要进行远程调用,必须要让服务器知道客户端想要调用的函数,因此RPC中所有函数或方法都有自己的一个ID,在所有进程中都唯一。客户端在做远程过程调用时,必须附上这个ID,即客户端会查一下表,找出相应的Call ID,然后传给服务端,服务端也会查表,来确定客户端需要调用的函数,然后执行相应函数的代码并返回结果给客户端,也就实现了基本的RPC。 (二)序列化反序列化: 序列化与反序列化是一组相反的功能,主要实现消息对象与二进制流之间的转化。 在本地调用中,只需要将数据压入栈中,然后让函数去栈中读取即可。 但远程调用需要进行数据传输,由于客户端和服务端不在同一个服务器上,涉及不同的进程,不能通过内存传递参数,此时就需要客户端先将请求参数转成字节流(编码),传递给服务端,服务端再将字节流转为自己可读取格式(解码),这就是序列化和反序列化的过程。反之,服务端返回值也逆向经历序列化和反序列化到客户端。将消息对象转为二进制字节流后,方便进行网络传输,并能实现跨平台、跨语言等功能。 (三)网络传输: 网络传输主要实现客户端和服务器的通信,客户端将Call ID和序列化字节流传给服务器,服务器将结果序列化后回传给客户端。基于TCP协议的网络传输实现,需要客户端和服务端建立Socket连接。客户端通过Socket将需要调用的接口名称、方法名称及参数序列化后传递给服务端。服务端反序列化后再利用反射调用对应的方法,将结果返回给客户端。

本组最终实现的简单RPC架构如图所示,通过本次课程大作业,本组深入理解了 RPC 的核心概念和实现原理,掌握了使用 Java、Netty 和 ZooKeeper 构建简单 RPC 系统的方法。综上所述,RPC 能够有效实现不同服务间的远程调用,提高系统的可扩展性和服务重用性。同时,Netty 的高性能和 ZooKeeper 的分布式协调能力为系统的性能和可靠性提供了有力保障。
关于

《分布式计算环境》2025课程大作业

134.0 KB
邀请码