概述
目录
一.rpc的由来
二.RPC的实现原理
三.RPC架构组件
四.RPC调用过程
一.rpc的由来
分布式架构、流动计算架构的出现,需要一个治理系统确保架构有条不紊的演进。
分布式服务架构:随着垂直应用越来越多,应用之间交互不可避免,需要将核心业务抽取出来,作为独立额服务,此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。各个服务提供方不需要各自实现一套序列化,反序列化、网络框架、连接池、收发线程、超时处理、状态机等业务之外的重复技术劳动。统一RPC框架来解决统一的服务。
二.RPC的实现原理
整个调用过程,主要经历以下几个步骤:
1.建立通信。客户端和服务器之间建立TCP连接,远程调用过程所有交换的数据都在这个连接里传输,连接可以按需连接,调用结束之后就断掉;也可以是长连接,多个远程过程调用共享同一个连接。(那么问题来了,什么时候是短连接,什么时候是长连接)
2.服务寻址。A服务器上的应用怎么告诉底层的RPC框架,如何连接到B服务器以及的特定的端口、方法名等。可靠的寻址方式是RPC的基石,可以采用Redis或者Zookeeper来注册服务等。
从服务提供者的角度看:
- 当提供者服务启动时,需要自动想注册中心注册服务;
- 服务停止时,需要想注册中心注销服务;
- 提供者需要定时向注册中心发送心跳,一段时间未收到来自提供者的心跳后,认为提供者已经停止服务,从注册中心摘取掉对应的服务(这件事是有dubbo来做吗?dubbo是怎么做到的);
从调用者的角度看:
- 调用者启动时订阅注册中心的消息并从注册中心获取提供者的地址;
- 当有提供者上线或者下线时,注册中心会告知调用者
- 调用者下线是,取消订阅。
3.网络传输
3.1 序列化
将调用方法以及参数等信息通过序列化或编码成二进制,然后通过寻址操作和网络传输将二进制数据发送给B机器。(为什么要序列化呢?因为网络协议如TCP是基于二进制的)
3.2 反序列化
对二进制进行恢复为内存中的表达方式,在找到对应的方法进行本地调用代理Proxy去调用。
4.服务调用
三.RPC架构组件
客户端(服务消费者)、客户端存根(存放服务器地址信息,将客户端的请求参数数据打包成网络消息,在通过网络传输发送给服务端)、服务端存根(接收客户端发送过来的请求信息并进行解包,然后调用本地服务处理)、服务端(服务的真正提供者)
四.RPC调用过程
1、服务消费者(client客户端)通过本地调用的方式调用服务;
2、客户端存根(client stub)接收到调用请求后负责将方法、入参等信息序列化(组装)成能够进行网络传输的消息体;
3、客户端存根(client stub)找到远程的服务地址,并且将消息通过网络发送给服务端;
4、服务端存根(server stub)收到消息后进行解码(反序列化操作);
5、服务端存根(server stub)根据解码结果调用本地的服务进行相关处理;
6、本地服务执行具体业务逻辑并将处理结果返回给服务端存根(server stub);
7、服务端存根(server stub)将返回结果重新打包成消息(序列化)并通过网络发送至消费方;
8、客户端存根(client stub)接收到消息,并进行解码(反序列化);
9、服务消费方得到最终结果;
最后
以上就是尊敬汽车为你收集整理的RPC的实现原理的全部内容,希望文章能够帮你解决RPC的实现原理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复