Provider: 暴露服务的服务提供方。
Consumer: 调用远程服务的服务消费方。Registry: 服务注册与发现的注册中心。
Monitor: 统计服务的调用次数和调用时间的监控中心。
调用流程
0.服务容器负责启动,加载,运行服务提供者。
1.服务提供者在启动时,向注册中心注册自己提供的服务。
2.服务消费者在启动时,向注册中心订阅自己所需的服务。
3.注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
4.服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
5.服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心
RPC是一种概念,用以让远程连接的多台服务器可以像调用本地方法一样互相调用。 RPC 的全称是 Remote Procedure Call 是一种进程间通信方式。 它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。 即程序员无论是调用本地的还是远程的,本质上编写的调用代码基本相同。由于计算能力需要横向扩展,需要在多台机器组成的集群上部署应用,而RPC的概念就是让不同机器间方法调用变得简单。
1 优势
简单:RPC 概念的语义十分清晰和简单,这样建立分布式计算就更容易。
高效:过程调用看起来十分简单而且高效。
调用:用RPC概念能够解决不同机器上信息交互的问题。
2 流程
一台客户端服务器需要调用另外一台服务端服务器上的方法,客户端将需要调用的方法的信息序列化,通过网络流传输至另外一台服务器上,反序列化,执行操作并得到返回结果,再次通过网络将此返回对象序列化传输回到客户端服务器。
RPC的思路流程:
程序中需要远程调用的方法调用客户端句柄,传输所需参数
调用本地系统网络部分,发送信息
消息传输
服务器端接收到信息,将信息传给处理此操作的服务器端句柄
句柄调用相应方法,操作数据(可以采用监视器模式)
得到结果,返回结果给句柄
句柄调用服务器的本地网络,返回信息
信息返回
客户端本地网络将信息发送给客户端句柄
句柄将结果返回给方法
3 为什么需要RPC概念?
一旦踏入公司尤其是大型互联网公司就会发现,公司的系统都由成千上万大大小小的服务组成,各服务部署在不同的机器上,由不同的团队负责。这时就会遇到两个问题:怎么实现多个服务间的通信?RPC框架就是为了解决多服务间调用的复杂情况,尽量让远程的调用变得简洁透明,让团队能够专注于业务开发。
4 实现RPC的三个关键点
4.1. 信息传递
通俗地说RPC是两台计算机上不同进程间的通信,如何进行不同计算机不同进程的交流沟通,识别对方的IP,端口,方法名,参数等都是要经过处理的。 I/O调度模型:同步阻塞I/O(BIO)还是非阻塞I/O(NIO)。IO调度现在主流的就是netty。
4.2 数据序列化
通过网络流传输数据,数据必须要进行序列化和反序列化,这两种操作的具体实现很重要。序列化框架的选择:文本协议、二进制协议或压缩二进制协议。 高性能序列化目前性能最好的是ice,google 的 pb协议,FB的thrift协议等。
4.3 网络通信
google的gRPC直接使用http2作为网络通信的方法。一般来讲,各种RPC的实现框架都使用TCP协议作为网络通信的基本方法。
5 常见的RPC框架
dubbo、dubbox、motan、thrift、grpc
6 RPC与REST的区别
RPC是以动词为中心的, REST是以名词为中心的。此处动词指的是一些方法, 名词是指资源.这两种方法没有孰优孰劣。以动词为中心意味着,当你要需要加入新功能时,你必须要添加更多的动词, 这时候服务器端需要实现 相应的动词(方法), 客户端需要知道这个新的动词并进行调用. 而以名词为中心, 假使我请求的是 hostname/friends/, 无论这个URI对应的服务怎么变化,客户端是无需关注和更新的,而这种变化对客户端也是透明的. 至于其它的区别,如对实现语言的依赖, 耦合性等,这些都是上面提到的这个根本区别所衍生的。