深度解析xxl-rpc之RPC原理

深度解析xxl-rpc之RPC原理一.什么是RPC?RPC(remoteprocesscall),中文是远程过程调用的意思。怎么理解这个远程过程调用呢?可以这样理解,可以与本地的过程调用对比下,本地过程调用,也就是调用函数或者是调用方法,比如说,在单体架构中,我们要根据用户的id获取订单信息,我们就需要找到订单service,调用getOrderInfoById(Stringid)这个方法,这个调用动作这就是本地过程调…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

一.什么是RPC?

RPC(remote process  call),中文是远程过程调用的意思。怎么理解这个远程过程调用呢?可以这样理解,可以与本地的过程调用对比下,本地过程调用,也就是调用函数或者是调用方法,比如说,在单体架构中,我们要根据用户的id获取订单信息,我们就需要找到订单service,调用getOrderInfoById(String id)这个方法,这个调用动作这就是本地过程调用,就是调函数,调方法,让某个函数或方法为你服务。但是随着业务的增长以及用户量数据量的增加,这个单体架构就扛不住了,我们就需要对系统进行拆分,把订单模块当作一个服务拆分出去(就是再搞一个项目专门维护用户这块的业务),这时候我们就再获取用的订单信息就不是这么容易了,现在是跨项目了,跨网络了,不能跟以前那样愉快的调用了,但是不要慌,这时候RPC 这个远程过程调用就起到大作用了,它可以做到像调用本地方法或者函数一样调用远程的服务,程序员无需关注它内部是怎么实现的,只需要关注业务就可以了。

二.应用场景

在解释RPC是啥的时候咱们也说了,RPC是随着项目细粒度划分出现的,所以它主要是用在解决SOA架构或者微服务架构各个服务之间数据交互或者通信,还拿上面的例子来说,当我把用户模块,与订单模块分成不同的服务的时候,我该用什么通信这两个服务,现在市面上有三种,一种是webservice,第二是restful,第三就是今天的主角RPC了。这个webservice一些老项目中还在用着,属于老古董了,restful风格现在用的挺多的。比如说在java生态中微服务架构的各个服务之间的调用spring官方提供的是基于http协议的restfull风格的工具fegin,再一个就是RPC了,也是现在的主流。其实我们可以发现,RPC主要就是用在垂直架构下各个服务通信的,然后你的单体架构根本用不到,业务全部代码全部堆在一个项目中,想调用谁就调用谁,根本用不到这东西。

三.Restful与RPC

垂直架构下到底是选择RPC还是Restful?

我只想说,各有优缺点。。。。

1.速度

RPC:基于tcp协议,速度是非常快的。互联网项目中应用比较多

Restful:基于http协议,是在tcp的基础上又封装了一层。速度较RPC要慢,在传统项目中使用的比较多

2.跨语言

RPC:要实现跨语言,就要序列化方式相同,而且需要开发不同的客户端与服务端,不是说不能做到,只是成本还是比较高的

Restful:restful是一种风格,跨语言很方便

3.成熟度

RPC:RPC落地框架是非常多的,也是非常成熟的,比如说ali的dubbo,grpc等等

Restful:是个restful风格的接口就可以啦

四.RPC原理

先说一下官方的话术:

一个完整的RPC架构里面包含了四个核心的组件,分别是Client,Client Stub,Server以及Server Stub,这个Stub可以理解为存根。

客户端(Client),服务的调用方。

客户端存根(Client Stub),存放服务端的地址消息,再将客户端的请求参数打包成网络消息,然后通过网络远程发送给服务方。

服务端(Server),真正的服务提供者。

服务端存根(Server Stub),接收客户端发送过来的消息,将消息解包,并调用本地的方法。

借用网络上的一张图,它这边还更加细化了(这个图片上加上了网络传输)。

深度解析xxl-rpc之RPC原理

用java来实现上面的RPC:
客户端:java中的客户端就是你的方法调用方,你在哪个服务调用的那个服务就是客户端 ,比如说我在用户服务调用订单服务查询用户的订单(当然这里你得有订单服务的api接口),我可以这样写 OrderService.getOrderListByUid(String id);这样毛病吧。

客户端存根:我们在客户端层面使用的真的是OrderService 吗?no,它只是个公共的接口,而它的实际对象是啥呢,在java中我们可以使用动态代理技术(Proxy,字节码技术也行),来生成代理对象,我们实际的对象就是这个。那我们这个代理对象都干了些啥,一是,获取请求方法名字,参数等信息,封装起来。二是,找到真正提供这个服务的ip与端口,三是,拿着封装的信息,序列化一下,发送网络请求到提供服务的服务器上去

服务器存根:项目服务器一启动,就启动这个RPC服务,监听协定好的端口, 这时候收到了一个请求,就是客户端存根发过来那个,这边需要干什么事情呢,一是反序列化成能看懂的信息 ,二是,使用java 反射技术,对某个类的某个方法进行反射执行。三 是封装执行结果进行返回去。

服务器:这边就很简单了,只需要提供具体的服务提供实现类就行了,供服务器存根使用反射调用,并返回执行结果。

五.为啥要选择xxl-rpc?

我只能说两个字 简单 ,非常简单

适合RPC的初学者,你上来搞搞dubbo源码试试,根本啃不动,dubbo加上单元测试啥的小10w行代码,这你怎么搞,里面弯弯绕绕的,直接搞晕了,不适合初学者。

但是xxl-rpc与dubbo的代码量比起来就是大巫见小巫了,框架虽小,但是五脏俱全,这种代码量的框架看起来会更舒服一些,能够瞬间搞懂RPC的实际落地,让你瞬间柳暗花明又一村。

在xxl-rpc 中你能学到什么?

1.服务调用者是怎么实现的

2.服务提供者是怎么提供服务的

3.不同的调用方式 

4.不同的序列化方式

5.不同的底层通信方案

6.zk作为注册中心是怎样服务注册与发现的

7.模块化开发

8.优秀的代码设计

….

官方网站:http://www.xuxueli.com/xxl-rpc/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/230737.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 宏基因组注释和可视化神器MEGAN入门

    宏基因组注释和可视化神器MEGAN入门文章目录 MEGAN 宏基因组功能和物种分类 MEGAN 功能简介原理简要示意图 MEGAN 特有文件格式 RMAMEGAN 下载 MEGAN 使用 MEGAN linux 版本安装 MEGAN 使用指南 Linux 提取注释内容 物种和功能 提取物种注释数据 提取功能 Win 版安装和使用 MEGAN 安装 Win 版使用指南 MEGAN 主界面介绍 MEGAN 输入介绍 MEGAN 分析进阶双样本比对 MEGAN 界面可视化 两样本 r

    2025年10月6日
    5
  • 请画出下面流程图对应的N-S图以及PAD图_N E S W分别代表什么方向

    请画出下面流程图对应的N-S图以及PAD图_N E S W分别代表什么方向E-R图:E-R图也称实体-联系图(EntityRelationshipDiagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。矩形框:表示实体,在框中记入实体名。菱形框:表示联系,在框中记入联系名。椭圆形框:表示实体或联系的属性,将属性名记入框中。对于主属性名,则在其名称下划一下划线。连线:实体与属性之间;实体与联系之间;联系与属性之间用直线相连,并在直…

    2022年8月13日
    9
  • iscsiadm命令详解_adm激活成功教程版

    iscsiadm命令详解_adm激活成功教程版iscsiadm是open-iscsi包中的一个工具,用来发现和登陆iSCSItar

    2022年8月23日
    8
  • quartus波形仿真破解MODELSIM「建议收藏」

    quartus波形仿真破解MODELSIM「建议收藏」(1)对于Quartus14.0安装时自动安装了modelsim的ae和ase两个版本,分别位于D:\ProgramFiles\altera\14.0\modelsim_ase和D:\ProgramFiles\altera\14.0\modelsim_ae目录下(根据自己的安装路径而定)。其中ae是免费的,包含有altera的FPGA芯片,而ase除了altera的外,还有xilinx的,库更…

    2022年5月24日
    59
  • vue学习笔记-day03

    vue学习笔记-day03

    2021年7月12日
    86
  • ES6读书笔记(三)

    ES6读书笔记(三)

    2021年6月30日
    94

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号