聊聊rpc原理二

huangqingshi huangqingshi     2023-01-23     106

关键词:

  之前写了一篇关于RPC的文章,浏览量十分感人:),但是感觉文章写得有些粗,觉得很多细节没有讲出来,这次把里边的细节再次补充和说明。

  这次主要说的内容分为:

  1. RPC的主要结构图。

  2.分析结构图的中的细节和步骤。

  关于RPC,大家都不陌生,其简写和介绍什么的我就不过多介绍了,可以从我上篇文章中看到,下面直接上我画的图,简单粗暴:

  技术分享图片

  RPC的主要目的是将一个庞大的系统分离成不同的子系统,按照不同的功能,比如读库功能,记录日志等可以单独出来的功能单独出来,这样的好处是,不会像以前那样庞大的系统部署的时候每次都要整个系统进行重启,可以修改单独的模块,并且自己独立部署,这样大大提升效率。但是如果拆分的过细的话,可能需要维护很多的小项目,代码工程由一个大工程,拆分成很多小工程,而且启动功能并且进行测试的话一般至少启动两个服务,一个server和一个client,同时相应的zookeeper也要启动。

  下面来说一下上图中每个模块的功能。

  先来说一下zookeeper, 可能有些同学已经很熟悉zookeeper使用了,当然我也在博客中写过zookeepr实现的锁文章,它非常强大,但是这里不过多解释它强大之处,这次说它的作用。在RPC中zookeeper承担着服务的注册,心跳检测,记录client的相关信息,最关键的是要记录server的IP和端口号以及它提供service信息,版本号等信息。每个client在调用之前都要从zookeeper那里获取存活server的相关信息及提供服务的版本。这样client拿到这些信息后可以直接和server进行通信了。

  里边有一个细节就是client和server在zookeeper中注册的znode是临时的ephemral的,这样的目的是在心跳检测的时候发现client或者server已经down了,需要从zk中剔除,这样client连接server失败的情况下重新从zookeeper中获取有效的server及service信息。

  接下来就是server,在一些大型系统中,其实server是由很多台机器构成的,这里我为了简化就画了一台机器,当server和其中部署的service启动之后需要到zookeeper中进行注册,这样client就可以发现新部署的service了,通过zookeeper实现了动态的service上线和下线,是不是很厉害。在server中,由service声明和implementation实现,同时还有在使用过程中对应的bean对象。当然在server中还部署着netty服务,这个一会儿咱们就说。

  继续看client,client在这里边充当着的是consumer,就是消费service所produce的服务。client应该也是多台的。client其实就相对比较简单,因为是调用方,所以只需要声明对应的service接口和相应的bean对象就行了。

  然后就是netty服务了,这次咱们不说netty的详细内容,大家知道它是用来进行通信的,拥有高吞吐量,高并发,多协议实现,并且支持NIO,AIO的工具。有兴趣的同学可以读一些关于netty的文章。netty在这里扮演的角色就是通信,将调用的service以及相关的bean对象和参数进行序列化,找到从zookeeper获取的service所在的主机、IP、端口号、服务及版本等信息后进行TCP连接,发送给server后,在server中也有一个netty在对应的端口进行接口,接收后进行反序列化,然后通过动态代理实现接口调用,关于动态代理的实现可以参考我之前写过的文章。调用之后获取到执行结果后再以相反的顺序返回去。这就是netty实现的功能了。

  这块基本就是RPC的主要核心实现细节,当然里边可能还会有一些细节我没有提到,因为RPC的功能也在不断完善中,所以还有一些新增的一些功能没有提及,比如server机器的比重等,这些在用到的工程中一看应该就会明白。

  好了,希望你们能从这篇文章中获得收获。

  欢迎转载,但转载请署名黄青石,谢谢。

  

 

  

flink内核原理学习组件通信rpc(代码片段)

Flink内核原理学习之RPC文章目录Flink内核原理学习之RPC一、Akka与Actor模型二、RPC消息类型三、Flink通信组件3.1RpcGateway3.2RpcEndpoint3.3RpcService与RpcServer3.4AkkaRpcActor四、PRC交互过程Java、大数据开发学习要点(持续更新中…)一、... 查看详情

聊聊分布式开发springcloud

概述本文章只是简单介绍了微服务开发的一些关键词,如果需要知道具体实现和可以评论留言我会及时的增加连接写出具体实现(感觉没人看就没写具体实现)。持续更新中。。。。。。SpringCloud和Dubbo的区别Dubbo的定位始终是一款... 查看详情

rpc(二)

参考技术A上篇文章简单的介绍了RPC的原理和传输协议采用HTTP协议与TCP协议的区别。其中说到HTTP协议有连接的建立和断开的开销。那TCP就不用建立和断开了吗?HTTP有长连接为什么还要连接池?HTTP1.1队首阻塞怎么解决?回归RPC,... 查看详情

设计一个分布式rpc框架(代码片段)

0前言提前先祝大家春节快乐!好了,先简单聊聊。我从事的是大数据开发相关的工作,主要负责的是大数据计算这块的内容。最近Hive集群跑任务总是会出现Thrift连接HS2相关问题,研究了解了下内部原理,突然来了兴趣,就想着... 查看详情

rpc实现原理

RPC实现原理 查看详情

rpc实现原理

RPC实现原理 查看详情

聊聊jdk动态代理原理

什么是代理为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。——来自百度百科通俗地讲,就是我们生... 查看详情

rabbitmq学习:利用rabbitmq实现远程rpc调用(代码片段)

一、rabbitmq实现rpc调用的原理·rabbitmq实现rpc的原理是:客户端向一个队列中发送消息,并注册一个回调的队列用于接收服务端返回的消息,该消息需要声明一个叫做correaltionId的属性,该属性将是该次请求的唯一标识。服务端在... 查看详情

基于框架的rpc通信技术原理解析

...务。以下我将分别从如下四个方面详解RPC。一:RPC的实现原理二:PRC架构组件三:RPC调用过程四:RPC主流框架一:RPC的实现原理也就是说两台服务器A,B,一个应用部署在A服务器上, 查看详情

rpc原理及实现

一、什么是RPCRPC的全称是RemoteProcedureCall是一种进程间通信方式。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。即无论是调用本地接口/服务的还... 查看详情

rpc----rpc入门了解&最简单的rpc的实现(代码片段)

...、历史背景二、理论知识1、概念2、为什么要用RPC3、工作原理4、RPC解决了什么问题?5、RPCvsHTTP远程调用方式6、常用RPC框架三、实现1、对象序列化1.1序列化的原因1.2概念1.3解决方案(RPC序列化框架)1.4代码实现2、网络通讯协议2.1基... 查看详情

聊聊reentrantlock实现原理(代码片段)

ReentrantLock是常用的锁,相对于Synchronized,lock锁更人性化,阅读性更强从LOCK切入     考虑下面的场景如果有A,B线程,同时去执行lock.lock(Locklock=newReentrantLock为全局属性),当A线程抢到锁以后,此时B线程做了哪些事... 查看详情

rpc----基于zookeeper为注册中心实现的rpc(代码片段)

基于ZooKeeper为注册中心实现的RPC一、原理二、统一配置管理1、服务的注册2、服务的发现3、测试代码服务的注册测试服务的发现测试测试截图三、负载均衡1、接口2、随机、轮询代码3、客户端服务发现代码三、动态感知服务器状... 查看详情

rpc原理解析

1.RPC原理解析1.1什么是RPCRPC(RemoteProcedureCallProtocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP/IP或UDP,为通信程序之间携... 查看详情

网络编程--rpc实现原理--rpc--迭代版本v1--本地方法调用

 网络编程--RPC实现原理--目录  啦啦啦V2——RPC--本地方法调用:不通过网络入门  1. RPCObjectProxyrpcObjectProxy=newRPCObjectProxy(newLocalRPCClient());:绑定目标对象  2. IUserServiceuserService=(IUserService)rpcObjectProxy.create 查看详情

聊聊feign的实现原理(代码片段)

WhatisFeign?Feign是⼀个HTTP请求的轻量级客户端框架。通过接口+注解的方式发起HTTP请求调用,面向接口编程,而不是像Java中通过封装HTTP请求报文的方式直接调用。服务消费方拿到服务提供方的接⼝,然后像调⽤本地接⼝⽅法⼀样... 查看详情

rpc原理及rpc实例分析

1、什么是RPC由于各服务部署在不同的机器,服务间的调用免不了网络通信过程,服务消费方没调用一个服务都要写一坨网络通信相关的代码,不仅负责而且容易出错RPC(RemoteProcedureCall)远程过程调用能让我们像调用本地服务一样... 查看详情

rpc原理

今天开始聊一些微服务的实践,第一块,RPC框架的原理及实践,为什么说要搞定微服务架构,先搞定RPC框架呢?一、需求缘起服务化的一个好处就是,不限定服务的提供方使用什么技术选型,能够实现大公司跨团队的技术解耦,... 查看详情