JavaRPC框架之思路分析和设计

      最后更新:2022-08-04 11:19:00 手机定位技术交流文章

      一、思路分析

      什么是RPC框架

      当我们写RPC框架时,让我们先考虑RPC是什么?白板只是远程通信工具,它可以让开发人员像调用本地方法一样方便地调用远程方法。

      目前市场上的RPC框架主要有:

      • dubbo

      • grpc

      • feign

      银行和传统国有企业可能更倾向于国内 dubbo 框架,它可能涉及国家安全。更多的互联网公司将使用SpringCloud家族桶。所以不管他们使用哪种,事实上,这些框架都是可能的,允许开发者实现远程方法调用以及本地方法调用.

      可以实现远程调用的呢? 答案当然就是利用socket通信了。而socket底层通信 都是基于tcp/ip协议实现的。所以以上这三款的

      1.2沟通框架的差异

      • dubbo

      • grpc

      • feign

      共同点:

      • 所有通信都基于tcp/ip协议

      • 所有的通信细节都是保护的,让开发者只关心自己的业务

      不同点:

      • grpc和feign是基于tcp协议的更高 http协议实现的

      • dubbo是基于tcp协议上自己重新实现了一套自己的规则,而这个规则就是dubbo协议。

      dubbo协议是定制的,因为它直接基于tcp协议,这样就更好了。可以实现更多的底层特性,比如说长连接。其他两个基于将 wrap 的 http 协议,由于这种特点,所以只有http客户端才能被调用,更适合跨平台,跨语言。因为不管用什么语言,它们都支持http协议。但他的表现可能相当不错,它们都具有上述的优点。现在比较清楚谁是生态的,其外围扩张更丰富.

      1.3RPC底层的实现

      前面我们说了,RPC框架是一个,可以让程序猿像调用本地方法一样实现远程方法调用的一个工具。其实这句话就说出了主要的答案。

      远程调用=计算机通信屏蔽细节=动态代理

      知道他即将完成,那是个好主意。我们的第一步是使用Java语言实现下层的通信能力建设。然后, 根据这个基础, 进行二次密封,最后,通过动态剂的形式,掩盖下文的细节.这样可以实现RPC协议。

      思路就是这个思路。

      因此,本文的第一部分是首先完成通信层的构建,实现使用Java的共同基础协议,实现通信能力。

      说着很简单,但实现沟通并不那么简单。接下来,我们面对网络通信的一系列困难.例如,Java的通信API表很难使用,在网络通信中, 还有粘性包装和解包装问题.但是没关系,这些坑被官员践踏,遵循官员的建议,并逐步完成.相信事半必能功倍。

      二、设计思路

      在你有明确的想法之前,你不能上楼去做

      2.1目标

      下面的三个方面将主要讨论,以便每个人能够在大脑中形成对这些三个方面的知识,因为下面的三个方面是建设通信层的主要指导思想。

      1. 设计我们自己的通讯协议

      2. 确定我们的通信层的架构

      3. 确定我们的工程结构

      2.为什么我们应该设计自己的通讯协议?

      上面我们也说了,RPC的实现可以基于http或tcp。他们各有各的好处,如果它基于http,那么实际上我们的挑战相对较小,因为 http 协议的实现已经在太多的地方,我们只能通过代理人进行层状密封,这就是为什么我们自己想实现通信协议的原因。作为一个Java编程猴子,你仍然对底层通信协议的具体实现有一定的了解。如果你不知道,那并不重要,你只需要知道他是二进制数据。如果我们能够通过编码转换二进制数据到我们能够理解的Java语言的数据,那将是很好的。如果你已经学会了这个过程,那么一通百通,http如何实现可能可以推测。

      2.3为什么谈论通信层架构?

      怎么理解架构?

      作为一个有经验的开发者,都会清楚,我们写代码就像我们写文字一样。好的代码必须清晰的。清晰的代码耦合必须很罕见。我们举一个例子,最近大环境不好,大厂裁员较多,很多朋友必须互相采访,问个面试问题,这个例子说明了建筑是什么。

      • 面试官说: 让同学自我介绍.

      首先我们不能懵啊,如果你不知道,你就疯了。这样就容易讲乱,代码编写的前所未有的混乱是开发过程的体现。例如,当你介绍你的家乡时,你突然插入了一个爱好。而在讲爱好的时候,他又谈起家乡.这 将 导致 这个 问题 缺乏 明确,听者会感觉会乱。因此,我们需要一个单一的责任。首先,明确定义你的讲话的结构。每个结构点都有责任。

      我们设计的面试架构如下:

      姓名 、 家乡 、 大学 、 专业 、 兴趣和单位名称.

      下面我们只执行每个点的内容(主题清晰)并最后汇编成完整的自我介绍答案;

      有没有发现单一职责的设计,会很大程度提高我们的代码利用率呢? 我们要的就是这个效果,所以我们在开始编码之前,最好提前定义清楚我们的架构是怎么样的。

      上面的例子,我不知道官员是否清楚地向大家解释了,但是当设计责任分担时,当设计责任分担时,一定要明确,尽可能分开。

      要想设计一个好的框架,首先一定要有一个好的架构设计。这一点我们可以直接参考dubbo的设计架构。

      我们不需要看上半部分,我们只需要看通信层。

      • 序列化负责将二进制数据转换为Java识别的数据类型的序列层

      • transport 传输层,负责发送和接收数据

      • 交换层、通信层和业务逻辑层交换的地方.

      • protocol 协议层,告诉serialize用什么协议来encode和decode数据的

      因此,世界代码是一个大的复制品,复制到复制得到改进,然后看看你是否会复制不会复制。我们的设计主要基于 dubbo。

      2.4工程结构设计

      当前的市场框架基本上是自定制的通信层,通信层基本上不会自行提供。但系列希望沟通层和业务可以分开.通信层可以是RPC,也可以用于实现消息队列或网页容器。所以因为这个设计,我们要求我们的项目单独发布。我们的总体项目结构由三个部分组成,如下。

      三、核心知识点

      3.1通信层协议的定义

      什么是协议呢?

      它是我们如何将二进制数据转换为Java对象的规则。

      如下图所示,我们的数据分为四个部分

      1. 第一部分占用一个字节是协议标记,用来标记是http协议还是自定义协议。

      2. 第二部分,占有一个段落,是序列标记,它被用来确定我们真正的报告用于序列和反序列。

      3. 第三部分由四个字节组成,这些字节用于显示数据的字节长度和确定实际报告的长度。

      4. 第四部分的长度不是固定的,而是真实传输数据,最后通过第二部分将这些二进制数据转换成Java对象。

      以上是我们定义的数据分析协议,通过上述规则将二进制数据转换为Java对象。

      你从这儿读到什么东西了 吗?

      有没有发现,其实协议的概念,其实很简单,就是一个规则或者说是约定。能让彼此都互相认识的一个约定。

      在此系列中,我们将定义一个与支持 http 协议的协议。 如果你感兴趣,请加入编码团队。

      3.2通信层建筑设计

      正如我前面所说的,我们站在巨人的肩膀上,根据杜博的设计思想和我们的目标,我们也将画出一幅图。

      我们的最终建筑图如上面所示。

      包作用serialize 序列化协议层,包含了多种序列化协议 codec 数据解码器和编码器的具体实现层 exchange API交换层,业务层API和通信层API交换数据的地方,负责业务数据转换为二进制数据传输,也负责将二进制数据转换成业务数据返回 model 基础数据模型 business 提供给开发者用来实现业务的api api Fluent 风格的api, 这种风格的好处是不需要记住接下来的步骤和方法

      3.3 工程结构

      为了实现我们所设定的目标,我们想有一个大项目。

      项目名称 责任 mojito-net 低级通信模块 mojito-rpc rpc 模块 mojito-spring-boot-starter springboot 自动化配置

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/31522.html

          热门文章

          文章分类