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

相关推荐
Arvin62742 分钟前
研发环境:SSL证书快速部署
网络·网络协议·ssl
Trouvaille ~43 分钟前
【Linux】网络编程基础(三):Socket编程预备知识
linux·运维·服务器·网络·c++·socket·网络字节序
酣大智1 小时前
DHCP中继配置实验
运维·网络·网络协议·tcp/ip·华为
小义_1 小时前
【RH134知识点问答题】第6章 管理 SELinux 安全性
linux·网络·云原生·rhel
REDcker2 小时前
RTSP 直播技术详解
linux·服务器·网络·音视频·实时音视频·直播·rtsp
阿猿收手吧!2 小时前
【C++】异常处理:catch块执行后程序如何继续
服务器·网络·c++
FLGB2 小时前
Docker网段和服务器内部网段172.17 网段冲突导致网络不通
服务器·网络·docker
Grassto3 小时前
11 Go Module 缓存机制详解
开发语言·缓存·golang·go·go module
星夜落月3 小时前
Web-Check部署全攻略:打造个人网站监控与分析中心
运维·前端·网络
每次学一点3 小时前
【ZeroTier自研之路】planet的组成
服务器·网络·数据库