深度解析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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 文本分类算法的效果[通俗易懂]

    文本分类算法的效果[通俗易懂]基于统计的分类算法是主流,主要包括以下几种分类模型:相似度模型(Rocchio、K-近邻)、概率模型(贝叶斯)、线性模型(LLSF、SVM)、非线性模型(决策树、神经网络)、组合模型。对于这些分类算法,国内外很多研究者进行了客观评测(Yang,1999;Joachims,1998;He,2000;Tsay,2000;庞剑锋,2001;王灏,2003;李保利,2003;周雪忠,

    2022年6月3日
    40
  • 架设邮件服务器-windows 2003 POP3服务,SMTP服务收发邮件「建议收藏」

    1.默认安装的系统是没有安装POP3组件,SMTP组件,搞个盘过来,或从网上下载一个i386(下载地址:http://down.spdns.com/i386.rar ).(1)从“控制面板→添加/删除程序→添加windows组件”中,进入“Windwos组件”界面,激活“应用程序服务器”一行,然后单击“详细信息”按钮,进入“应用程序服务器”页,选择“Internet信息服务(IIS)”复选

    2022年4月6日
    34
  • c#多线程之QueueUserWorkItem[通俗易懂]

    c#多线程之QueueUserWorkItem[通俗易懂]编写代码的过程中经常会遇到需要并行操作的时候,此时就需要使用到多线程操作,.net中提供了多种操作多线程的方法,这里介绍最简单的一种—-通过ThreadPool.QueueUserWorkItem。首先看实例代码ThreadPool.QueueUserWorkItem(DoSomeThing);privatevoidDoSomeThing(objectstate)

    2022年9月25日
    0
  • mask rcnn实现教程「建议收藏」

    mask rcnn实现教程「建议收藏」一,首先去github上下载mask-rcnn源码,这里提供一个百度网盘地址链接:https://pan.baidu.com/s/1htJYyNy密码:0r2b含可运行DEMO更新链接:https://pan.baidu.com/s/1HBPtIPz0xpZsCprl7rc6hw密码:bvm5二,下载对应的mask_rcnn_coco.h5模型,这里给出百度网盘下载地址链接:h……

    2022年10月4日
    0
  • 物联网流量卡骗局_纯流量卡骗局

    物联网流量卡骗局_纯流量卡骗局冰河用多线程优化了亿级流量电商业务下的海量数据校对系统,性能直接提升了200%,这次将整个优化过程分享给大家,全程干货,建议收藏!!

    2022年8月22日
    4
  • fsockopen — 打开一个网络连接或者一个Unix套接字连接

    fsockopen — 打开一个网络连接或者一个Unix套接字连接

    2021年9月23日
    69

发表回复

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

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