rpc框架在互联网公司中有着广泛的应用,在美团实习的时候,项目使用rpc框架来进行服务间的相互调用,这也正迎合了微服务架构的思想,把一个大的服务拆分为几个微服务,每个微服务履行特定的职责,如果服务之间需要通信,或者要使用其他服务提供的功能,则需要远程服务调用。一个典型的rpc框架如下图所示:
客户端:使用服务的一方,调用的格式可能是(服务名,参数,服务端ip地址)。
服务端:提供服务的一方,其职责是要处理客户端发来的请求,然后返回结果。
注册中心:探查服务端的信息,比如说有多少存活的服务端可供客户端调用,一般功能有服务发现和服务注册。服务注册:服务端把自己信息注册到注册中心。服务发现:客户端向注册中心查询有哪些可用的服务端。典型的注册中心有Java实现的nacos,golang实现的etcd,注册中心底层算法一般使用的是一致性算法,paxos或者raft,其功能是做冗余,raft提供了在半数以下机器瘫痪的情况下,注册中心还能运行的功能。raft算法见paper:《In search of an Understandable Consensus Algorithm (Extended Version)》.同时,服务端需要在间隔时间内向注册中心,发送心跳包,表明自己仍然存活。
以上,可以大致看出要实现一个建议的rpc框架需要的组件是:
1网络库框架,用于通信。这里可以使用java中的netty。
2注册中心,工程上实现的raft算法并不简单,最好使用现成的注册中心。