java学习---快速掌握rpc原理及实现

小a玖拾柒      2022-04-10     205

关键词:

【原文】https://www.toutiao.com/i6592365493435236872/

技术分享图片

?RPC概述

RPC(Remote Procedure Call)即远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。

RPC框架原理

在RPC框架中主要有三个角色:Provider、Consumer和Registry。如下图所示:

技术分享图片

节点角色说明:

* Server: 暴露服务的服务提供方。

* Client: 调用远程服务的服务消费方。

* Registry: 服务注册与发现的注册中心。

RPC调用流程

技术分享图片

1.调用客户端句柄;执行传送参数

2.调用本地系统内核发送网络消息

3.消息传送到远程主机

4.服务器句柄得到消息并取得参数

5.执行远程过程

6.执行的过程将结果返回服务器句柄

7.服务器句柄返回结果,调用远程系统内核

8.消息传回本地主机

9.客户句柄由内核接收消息

10.客户接收句柄返回的数据

服务注册&发现

技术分享图片

服务提供者启动后主动向注册中心注册机器ip、port以及提供的服务列表;

服务消费者启动时向注册中心获取服务提供方地址列表,可实现软负载均衡和Failover;

使用到的技术

1、动态代理

生成 client stub和server stub需要用到 Java 动态代理技术 ,我们可以使用JDK原生的动态代理机制,可以使用一些开源字节码工具框架 如:CgLib、Javassist等。

2、序列化

为了能在网络上传输和接收 Java对象,我们需要对它进行 序列化和反序列化操作。

* 序列化:将Java对象转换成byte[]的过程,也就是编码的过程;

* 反序列化:将byte[]转换成Java对象的过程;

可以使用Java原生的序列化机制,但是效率非常低,推荐使用一些开源的、成熟的序列化技术,例如:protobuf、Thrift、hessian、Kryo、Msgpack

关于序列化工具性能比较可以参考:jvm-serializers

3、NIO

当前很多RPC框架都直接基于netty这一IO通信框架,比如阿里巴巴的HSF、dubbo,Hadoop Avro,推荐使用Netty 作为底层通信框架。

4、服务注册中心

可选技术:

* Redis

* Zookeeper

* Consul

* Etcd

JAVA中几种常用的RPC框架介绍

Java中的RPC框架比较多,各有特色,广泛使用的有RMI、Hessian、Dubbo等。

RPC还有一个特点就是能够跨语言,本文只以JAVA语言里的RPC为例。

RMI(远程方法调用)

JAVA自带的远程方法调用工具,不过有一定的局限性,毕竟是JAVA语言最开始时的设计,后来很多框架的原理都基于RMI,RMI的使用如下:

对外接口

技术分享图片

服务实现

技术分享图片

RMI客户端

技术分享图片

技术分享图片

开源的优秀RPC框架

  • 阿里巴巴 Dubbo:https://github.com/alibaba/dubbo
  • 新浪微博 Motan:https://github.com/weibocom/motan
  • gRPC:https://github.com/grpc/grpc
  • rpcx :https://github.com/smallnest/rpcx
  • Apache Thrift :https://thrift.apache.org/

详解图像滤波原理及实现!

 Datawhale干货 作者:姚童,Datawhale优秀学习者图像的实质是一种二维信号,滤波是信号处理中的一个重要概念。在图像处理中,滤波是一常见的技术,它们的原理非常简单,但是其思想却十分值得借鉴,滤波是很多图像算... 查看详情

rpc原理及实现

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

rpc原理及实现

1简介RPC的主要功能目标是让构建分布式计算(应用)更容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性。为实现该目标,RPC框架需提供一种透明调用机制让使用者不必显式的区分本地调用和远程调用。2调用分... 查看详情

mybatisspringspringmvc最详细学习路线❤️

... 参考黑马教程总结了Mybatis、Spring及SpringMVC三大框架的学习笔记,供读者参考,也用于日后框架的复习。需要掌握程度是通过个人总结的,读者还需根据个人需求来学习。Mybatis从入门到精通系列目录结构序号账目名... 查看详情

rpc原理

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

php学习笔记day1--基本概念,及原理

... 作为一个php新手,我一直在寻找着一种快速而有效的学习方法,最后发现,快速掌握知识最快的方法就是输出,把自己学过的知识从新整理,拿出来给大家看,同时也要学会总结归纳,同一些高手交流,才能最快把知识融入... 查看详情

java入门学习之路

java是面向对象的编程,个人觉得记忆比较重要。第一阶段java基础部分unix开发环境熟练掌握开发中常用的操作系统linux的安装及使用:掌握文件系统、网络、用户管理方法:能熟练使用vi和vim进行文件编辑;能在unix环境下进行文... 查看详情

rpc框架dubbo学习入门及环境搭建(springboot+kotlin)

学习之前,确保有以下知识基础:Java网络编程Socket传输数据IO流rpc简介及实现rpc是remoteprocedurecall的简写,意思为远程过程调用。rpc应用较多的情景是分布式开发,那什么是分布式开发呢?原本我也是想自己解释的,奈何网上大... 查看详情

mybatisspringspringmvc最详细学习路线❤️

... 参考黑马教程总结了Mybatis、Spring及SpringMVC三大框架的学习笔记,供读者参考,也用于日后框架的复习。需要掌握程度是通过个人总结的,读者还需根据个人需求来学习。Mybatis从入门到精通系列目录结构序号账目名... 查看详情

mybatisspringspringmvc最详细学习路线❤️

... 参考黑马教程总结了Mybatis、Spring及SpringMVC三大框架的学习笔记,供读者参考,也用于日后框架的复习。需要掌握程度是通过个人总结的,读者还需根据个人需求来学习。Mybatis从入门到精通系列目录结构序号账目名... 查看详情

五.hashtable原理及实现学习总结

有两个类都提供了一个多种用途的hashTable机制,他们都可以将可以key和value结合起来构成键值对通过put(key,value)方法保存起来,然后通过get(key)方法获取相对应的value值。一个是前面提到的HashMap,还有一个就是马上要讲解的HashTable... 查看详情

2019动力节点学习路线

java学习基础针对Java零基础入门学习者,比较详细的知识点总结和学习路线数据库数据库是程序员必须要掌握中知识点,详细的学习思路和面试题,适用/适合人群:拥有Java语言并可以实现网站爬取数据并分析目标:掌握mysql,Oracl... 查看详情

一致性hash算法原理,java实现,及用途

学习记录:一致性Hash算法原理及java实现:https://blog.csdn.net/suifeng629/article/details/81567777一致性Hash算法介绍,原理,及使用场景:https://blog.csdn.net/cbmljs/article/details/88021598纯转载,侵删 查看详情

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

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

如何完整地掌握一个机器学习模型

如何完整地掌握一个机器学习模型要全面地学习、掌握一个机器学习模型,可以遵循以下步骤:基础理论学习:了解该模型的背后数学原理和推导过程,包括假设、损失函数、优化方法等。学习算法实现:通过查阅论文、教程或... 查看详情

实现tcpudp相互通信及应用

...;1、理解进程通信的原理及通信过程    2、掌握基于TCP和UDP的工作原理    3、掌握基本的Socket网络编程原理及方法二、实验内容  1、掌握 查看详情

hdfs(二)底层通信原理——rpc及动态代理

一、RPC(RemoteProcedureCall ):远程过程调用    1、RPC是远程过程调用协议,实现调用者和被调用者二地之间的连接和通信。其基本通信模型是基于client/server进程间相互通信模型,如图1所示。      &n... 查看详情

thrift快速入门

...单感受一下Thrift(RPC)服务端与客户端之间的通信......RPC学习----Thrift快速入门和Java简单示例Thrift入门及Java实例演示Thrift是什么?Thrift源于大名鼎鼎的facebook之手,在2007年facebook提交Apache基金会将Thrift作为一个开源项目,对于当时... 查看详情