我是靠谱客的博主 尊敬汽车,最近开发中收集的这篇文章主要介绍RPC的实现原理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

一.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的实现原理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部