RPC协议 简单了解了微服务定义和优缺点之后,在我们正式学习微服务框架之前,需要首先了解一下RPC协议。为什么要了解RPC协议?RPC协议具体是什么呢? 1.1 RPC的概念 RPC(Remote Procedure Call Protocol) ,是远程过程调用的缩写,通俗的说就是调用远处的一个函数。与之相对应的是本地函数调用,我们先来看一下本地函数调用。当我们写下如下代码的时候: 规则 result := Add( 1 , 2 ) 我们知道,我们传入了1,2两个参数,调用了本地代码中的一个Add函数,得到result这个返回值。这时参数,返回值,代码段都在一个进程空间内,这是本地函数调用。 那有没有办法,我们能够调用一个跨进程(所以叫"远程",典型的事例,这个进程部署在另一台服务器上)的函数呢? 这也是RPC主要实现的功能。 1.2 为什么微服务需要RPC 我们使用微服务化的一个好处就是,不限定服务的提供方使用什么技术选型,能够实现公司跨团队的技术解耦,如下图: 这样的话, 如果没有统一的服务框架,RPC框架 ,各个团队的服务提供方就需要各自实现一套序列化、反序列化、网络框架、连接池、收发线程、超时处理、状态机等“业务之外”的重复技术劳动,造成整体的低效。所以, 统一RPC框架 把上述“业务之外”的技术劳动统一处理,是服务化首要解决的问题。 1.3 RPC入门 protobuf 在互联网时代,RPC已经和IPC(进程间通信)一样成为一个不可或缺的基础构件。因此Go语言的标准库也提供了一个简单的RPC实现,我们将以此为入口学习RPC的常见用法。 1.3.1 RPC版的"hello world" Go语言的RPC包的路径为net/rpc,也就是放在了net包目录下面。因此我们可以猜测该RPC包是建立在net包基础之上的。接着我们尝试基于rpc实现一个类似的例子。我们先构造一个HelloService类型,其中的Hello方法用于实现打印功能: type HelloService struct {} func (p *HelloService) Hello (request string ,reply * string ) error { *reply = "hello:" + request retur...
Comments
Post a Comment