Go七天实现RPC

0.前言

本文是学习自7天用Go从零实现RPC框架GeeRPC | 极客兔兔

在此基础上,加入自己的学习过程与理解。

1.RPC 框架

RPC(Remote Procedure Call,远程过程调用)是一种计算机通信协议,允许调用不同进程空间的程序。RPC 的客户端和服务器可以在一台机器上,也可以在不同的机器上。程序员使用时,就像调用本地程序一样,无需关注内部的实现细节。

简单点说,是两个 不同的进程 之间进行信息的交换, 而这两个进程有可能分布在 不同的机器 上。 那就需要进行网络通信,那常用的就有HTTP协议。

2.为什么需要RPC

怎么理解rpc,既然有http请求了为啥还要用rpc? - 知乎

怎么理解rpc,既然有http请求了为啥还要用rpc? - 知乎

知乎上的两个回答。

大多数人疑惑既然有HTTP请求可以解决系统间调用的问题了,为什么还会有人使用RPC调用?

而RPC是先于HTTP出现的。

这两个都有各自的用途。RPC更合适用在分布式中。一般来说,RPC的性能比HTTP会更强,大多数RPC框架也提供了很多功能,

在发起下游调用的时候,有时需要做一些功能。比如我们想统计一下下游每个接口调用的耗时、超时、异常情况,这个时候就使用rpc框架非常方便了,因为大多数的rpc框架都会提供一个事件或者钩子给我们,我们就能很方便的做这些事情。除此之外,很多rpc框架还提供了强大而精准的限流、熔断等能力。

而HTTP协议在1990年才开始作为主流协议出现,而且HTTP发明的场景是用于web架构。而现在大部分的系统都是给浏览器使用的,因此HTTP协议必不可少,一些小公司用HTTP也容易搭建自己的架构,成本也低,也好维护。

3.实现RPC

Go 语言广泛地应用于云计算和微服务,成熟的 RPC 框架和微服务框架汗牛充栋。grpcrpcx等都是非常成熟的框架。一般而言,RPC 是微服务框架的一个子集,微服务框架可以自己实现 RPC 部分,当然,也可以选择不同的 RPC 框架作为通信基座。

考虑性能和功能,上述成熟的框架代码量都比较庞大,而且通常和第三方库,例如 protobufetcd等有比较深的耦合,难以直观地窥视框架的本质。该RPC 的目的是以最少的代码,实现 RPC 框架中最为重要的部分,帮助大家理解 RPC 框架在设计时需要考虑什么。代码简洁是第一位的,功能是第二位的。

因此,我们选择从零实现 Go 语言官方的标准库 net/rpc ,并在此基础上,新增了协议交换(protocol exchange)注册中心(registry)服务发现(service discovery)负载均衡(load balance) 、**超时处理(timeout processing)**等特性。

每个版本的讲解

PRC教程 1.服务端与消息编码

RPC教程 2.支持并发与异步的客户端

RPC教程 3.服务注册

RPC教程 4.超时处理机制

完整代码: https://github.com/liwook/Go-projects/tree/main/geerpc

相关推荐
XiaoLeisj15 分钟前
Android 文件存储实战:从应用私有目录读写到网络文件落盘与公共存储接入
android·java·网络·文件操作
2501_9419820520 分钟前
Go 语言实现企业微信外部群消息主动推送方案
开发语言·golang·企业微信
小王不爱笑13220 分钟前
TCP/IP 协议族
网络·网络协议·tcp/ip
夜猫子ing21 分钟前
《UNIX高级环境编程》 第十四章 高级I/O(一文读懂UNIX下高级I/O)
运维·服务器·网络
yv_3024 分钟前
wireshark用法及流量分析知识点
网络·测试工具·wireshark
志栋智能44 分钟前
AI超自动化运维,让IT运维自动化门槛更低
运维·网络·人工智能·安全·自动化
无心水1 小时前
【时间利器】5、多语言时间处理实战:Go/C#/Rust/Ruby统一规范
golang·rust·c#·时间·分布式架构·openclaw·openclaw变现
攻城狮在此1 小时前
华为交换机ACL配置(基本ACL、高级ACL)
网络·安全·华为
攻城狮在此1 小时前
企业网二层交换机与出口路由器互联配置案例
网络·华为
缘来是黎1 小时前
腾讯高防域名
网络·安全