rpc框架实现(持续更新)

takemyjavalisfe takemyjavalisfe     2023-01-31     800

关键词:

网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,rpc基于长连接的远程过程调用应用而生。

一:A服务调用B服务,整个调用过程,主要经历如下几个步骤:(摘自优知学院:http://youzhixueyuan.com/implementation-principle-of-rpc-framework.html)

1、建立通信

首先要解决通讯的问题:即A机器想要调用B机器,首先得建立起通信连接。

主要是通过在客户端和服务器之间建立TCP连接,远程过程调用的所有交换的数据都在这个连接里传输。连接可以是按需连接,调用结束后就断掉,也可以是长连接,多个远程过程调用共享同一个连接。

2、服务寻址

要解决寻址的问题,也就是说,A服务器上的应用怎么告诉底层的RPC框架,如何连接到B服务器(如主机或IP地址)以及特定的端口,方法的名称名称是什么。

通常情况下我们需要提供B机器(主机名或IP地址)以及特定的端口,然后指定调用的方法或者函数的名称以及入参出参等信息,这样才能完成服务的一个调用。

可靠的寻址方式(主要是提供服务的发现)是RPC的实现基石,比如可以采用redis或者zookeeper来注册服务等等。

技术分享图片
  1.  从服务提供者的角度看:当提供者服务启动时,需要自动向注册中心注册服务;
  2.  当提供者服务停止时,需要向注册中心注销服务;
  3.  提供者需要定时向注册中心发送心跳,一段时间未收到来自提供者的心跳后,认为提供者已经停止服务,从注册中心上摘取掉对应的服务。
  4.  从调用者的角度看:调用者启动时订阅注册中心的消息并从注册中心获取提供者的地址;
  5.  当有提供者上线或者下线时,注册中心会告知到调用者;
  6.  调用者下线时,取消订阅。

3、网络传输

3.1、序列化

当A机器上的应用发起一个RPC调用时,调用方法和其入参等信息需要通过底层的网络协议如TCP传输到B机器,由于网络协议是基于二进制的,所有我们传输的参数数据都需要先进行序列化(Serialize)或者编组(marshal)成二进制的形式才能在网络中进行传输。然后通过寻址操作和网络传输将序列化或者编组之后的二进制数据发送给B机器。

3.2、反序列化

当B机器接收到A机器的应用发来的请求之后,又需要对接收到的参数等信息进行反序列化操作(序列化的逆操作),即将二进制信息恢复为内存中的表达方式,然后再找到对应的方法(寻址的一部分)进行本地调用(一般是通过生成代理Proxy去调用,
通常会有JDK动态代理、CGLIB动态代理、Javassist生成字节码技术等),之后得到调用的返回值。

4、服务调用

B机器进行本地调用(通过代理Proxy)之后得到了返回值,此时还需要再把返回值发送回A机器,同样也需要经过序列化操作,然后再经过网络传输将二进制数据发送回A机器,而当A机器接收到这些返回值之后,则再次进行反序列化操作,恢复为内存中的表达方式,最后再交给A机器上的应用进行相关处理(一般是业务逻辑处理操作)。

通常,经过以上四个步骤之后,一次完整的RPC调用算是完成了。


java进阶学习-dubbo框架(持续更新中~~)(代码片段)

Java进阶学习-Dubbo框架1.简介Dobbo是一个高性能的RPC框架,解决了分布式钟的调用问题优点:解决了分布式系统中互相调用问题缺点:缺少统一管理的调度中心2.为什么Dubbo说自己性能高?要从底层原理说起,一... 查看详情

优秀的android开源框架(持续更新)

...些开源项目的成果。本文会持续更新涌现出来的优秀开源框架。UIBottomNavigation实现类似微信底部导航栏效果:项目地址:https://github.com/Ashok-Varma/B 查看详情

聊聊分布式开发springcloud

...oud和Dubbo的区别Dubbo的定位始终是一款基于传输层(TCP)的RPC框架,RPC(RemoteProcedureCall)通信过程在传输层中完成(HTTP通信在应用层完成),所以RPC调用方式需要服务端与客户端 查看详情

java常见面试题问题简述(持续更新中)

...dubbo相对来说如果碰到没有解决的问题,就不得不去维护框架源码。  ②架构完整度来说,dubbo只是解决了服务治理,需要其他的组件,需要自己去适配。springcloud就拥有很完善的一些列解决方案,如服务网关,断路器,分布式... 查看详情

利用ue4蓝图实现一个平衡球闯关游戏(持续更新)

...概念基础A.GamePlay基础1.游戏模式及状态GameMode:这是游戏框架的基础,是为了设置游戏的规则,比如胜利的条件,同时也是处理players的生成游戏状态(GameState):对于一场游戏,需要一个State来保存当前游戏的状态数据,比如任... 查看详情

利用ue4蓝图实现一个平衡球闯关游戏(持续更新)

...概念基础A.GamePlay基础1.游戏模式及状态GameMode:这是游戏框架的基础,是为了设置游戏的规则,比如胜利的条件,同时也是处理players的生成游戏状态(GameState):对于一场游戏,需要一个State来保存当前游戏的状态数据,比如任... 查看详情

原创自己动手实现rpc服务调用框架(代码片段)

自己动手实现rpc服务调用框架本文利用java自带的socket编程实现了一个简单的rpc调用框架,由两个工程组成分别名为battercake-provider(服务提供者)、battercake-consumer(服务调用者)。服务提供者本部分的工程为battercake-provider,项... 查看详情

java实现简单rpc框架

RPC简介RPC,全称为RemoteProcedureCall,即远程过程调用,它是一个计算机通信协议。它允许像调用本地服务一样调用远程服务。它可以有不同的实现方式。如RMI(远程方法调用)、Hessian、Httpinvoker等。另外,RPC是与语言... 查看详情

分布式架构的基石,简单的rpc框架实现(java)

...。允许像调用本地服务一样调用远程服务。   1.RPC框架原理  RPC框架的目标就是让远程过程(服务)调用更加简单、透明,RPC框架负责屏蔽底层的传输方式(TCP或者UDP)、序列化方式(XML、JSON、二进制)和通信细节。 ... 查看详情

自己实现一个rpc框架(代码片段)

RPC框架称为远程调用框架,其实现的核心原理就是消费者端使用动态代理来代理一个接口的方法(基于JDK的动态代理,当然如果使用CGLib可以直接使用无接口类的方法),通过加入网络传输编程,传输调用接口方法名称,方法参数... 查看详情

springcloudalibaba实战(12:引入dubbo实现rpc调用)(代码片段)

...f0c;在更加注重性能的互联网公司中,一般都会使用RPC框架,如Dubbo等,来实现远程调用。这一节,我们就来把我们的服务间调用从Feign改造成Dubbo。1.Dubbo简介ApacheDubbo是一款微服务开发框架,它提供了RPC通信与... 查看详情

springcloudalibaba实战(12:引入dubbo实现rpc调用)(代码片段)

...f0c;在更加注重性能的互联网公司中,一般都会使用RPC框架,如Dubbo等,来实现远程调用。这一节,我们就来把我们的服务间调用从Feign改造成Dubbo。1.Dubbo简介ApacheDubbo是一款微服务开发框架,它提供了RPC通信与... 查看详情

实现一个简易的点对点rpc框架

...RPC?    RemoteProcedureCall,即远程过程调用,RPC框架可以帮助我们屏蔽网络通讯细节。就使用方而言,让远程调用和本地调用一样简单。本地调用?远程调用?    那么本地调用和远程调用有什么区别呢?... 查看详情

自研发rpc调用框架

自主研发设计RPC远程调用框架,实现服务自动注册,服务发现,远程RPC调用,后续实现服务负载均衡主要包括:客户端服务,服务端,服务发现,服务注册    github地址:https://github.com/btshoutn/rpc_project  查看详情

基于netty和springboot实现一个轻量级rpc框架-client篇(代码片段)

前提前置文章:《基于Netty和SpringBoot实现一个轻量级RPC框架-协议篇》《基于Netty和SpringBoot实现一个轻量级RPC框架-Server篇》前一篇文章相对简略地介绍了RPC服务端的编写,而这篇博文最要介绍服务端(Client)的实现。RPC调用一般... 查看详情

java实现简单的rpc框架(代码片段)

0引言  RPC,全称为RemoteProcedureCall,即远程过程调用,它是一个计算机通信协议。它允许像调用本地服务一样调用远程服务。它可以有不同的实现方式。如RMI(远程方法调用)、Hessian、Httpinvoker等。另外,RPC是与语言无关的。 ... 查看详情

3weekend110的hadoop中的rpc框架实现机制+hadoop中的rpc应用实例demo

  hadoop中的RPC框架实现机制   RPC是RemotrProcessCall,  进程间的远程过程调用,不是在一个jvm里。  即,Controller拿不到Service的实例对象。  hadoop中的RPC应用实例demo 在windows是调用端,在linux里是服务端。&nbs... 查看详情

apachethrift-使用,内部实现及构建一个可扩展的rpc框架

...现原理,最后给出一个基于Thrift的可扩展的分布式RPC调用框架,在中小型项目中是一个常见的SOA实践。Thrift介绍ApacheThrift是Facebook开发的远程服务调用框架,它采用接口描述语言(IDL)定义并创建服务,支 查看详情