RPC的理解与使用 | 青训营
概念
RPC是一种计算机通信协议,用于在分布式系统中实现进程之间的远程调用。它允许在不同的计算机或进程之间像调用本地函数一样调用远程的函数或方法,使得分布式系统的开发更加方便。
其实说的简单点就是,我们写业务的时候将一个大的项目分成个多好多业务(为了方便维护和开发),部署到不同的服务器上面,到时候函数调用的时候可能不是调用的本地的函数而是其他服务器上面的。这就用到了RPC。
层次
RPC分为5个层次:
- 传输层: 传输层就是复制数据的传输和网络通信。TCP/UDP就是这个层的。
- 编程语言层 : 这里涉及到了接口描述语言IDL来定义远程接口,感觉就是一种约定。
- 代理层 : 负责将客服端发起的远程调用转换成实际的网络请求,并将服务器端的响应转换成对应的函数返回值。
- 通信层 : 通信层负责处理请求和响应的传输,包括数据的封装、路由、负载均衡、容错等。这个负载均衡我理解了,就是每个业务不一定有一个节点、可以有多个节点、当一个节点崩溃的时候不至于整个业务都崩溃了。
- 服务层 : 就是处理远程调用请求等等,这是是开发人实现的业务逻辑。
RPC的使用
RPC分为客户端和服务端,客户端调用服务端的函数,服务端对客户端的数据进行处理然后返回。在Go语言中,RPC(远程过程调用)是一种允许在不同的计算机或进程之间进行通信的技术,使得你可以调用远程计算机上的函数或方法,就像调用本地函数一样。Go标准库提供了一套用于实现RPC的包,可以轻松地在Go应用程序中实现远程过程调用。
- 定义接口: 首先,你需要定义一个接口,其中包含你想要在远程服务器上调用的方法。
type Arith interface {
Add(args *Args, reply *int) error
}
type Args struct {
A, B int
}
- 实现接口: 在服务器端,你需要实现这个接口的方法。
- 注册服务: 在服务器端,你需要注册实现了接口的对象,使其能够被远程调用。
- 调用远程方法: 在客户端,你可以通过调用远程方法来使用服务。
程调用的方法必须具有特定的签名,其中第一个参数是参数结构,第二个参数是指向返回值的指针,最后一个参数是一个
error类型,用于传递错误信息。参数结构和返回值首字母大写,以便在不同的包之间传递。
RPC关键指标分析
有负载均衡、熔断、限流、降级、拓展性、观测性、高性能。这里负载均衡上面已经说过了,讲讲这个熔断,熔断其实就和原来电闸的保险丝一样,当一个服务出现了问题会立马把这个线路熔断,防止造成更大的影响设置影响整个服务。限流这很简单,就是限制流量,流量突然暴增了容易把服务器弄崩了。降级现在还不是太懂,我就不在这误人子弟了。拓展性、观测性、高性能这就不用多讲了,根据字面意思看就行。课上还介绍了一个字节的开源框架Kitex,我现在还没有用过,听别人说是类似于加强版Gin,等我把Gin学明白了,就去学这个了(手动狗头)。