@@ -5,7 +5,7 @@ category: 知识星球
5
5
6
6
## 介绍
7
7
8
- ** 《手写 RPC 框架》** 是我的[ 知识星球] ( https://www.yuque.com/docs/share/8a30ffb5-83f3-40f9-baf9-38de68b906dc ) 的一个内部小册,我写了 12 篇文章来讲解如何从零开始基于 Netty+Kyro+Zookeeper 实现一个简易的 RPC 框架。
8
+ ** 《手写 RPC 框架》** 是我的[ 知识星球] ( ../about-the-author/zhishixingqiu-two-years.md ) 的一个内部小册,我写了 12 篇文章来讲解如何从零开始基于 Netty+Kyro+Zookeeper 实现一个简易的 RPC 框架。
9
9
10
10
麻雀虽小五脏俱全,项目代码注释详细,结构清晰,并且集成了 Check Style 规范代码结构,非常适合阅读和学习。
11
11
@@ -18,41 +18,36 @@ category: 知识星球
18
18
- Github 地址:[ https://github.com/Snailclimb/guide-rpc-framework ] ( https://github.com/Snailclimb/guide-rpc-framework ) 。
19
19
- Gitee 地址:[ https://gitee.com/SnailClimb/guide-rpc-framework ] ( https://gitee.com/SnailClimb/guide-rpc-framework ) 。
20
20
21
- ## 项目基本情况和可优化点
22
-
23
- 为了循序渐进,最初的是时候,我是基于传统的 ** BIO** 的方式 ** Socket** 进行网络传输,然后利用 ** JDK 自带的序列化机制** 来实现这个 RPC 框架的。后面,我对原始版本进行了优化,已完成的优化点和可以完成的优化点我都列在了下面 👇。
24
-
25
- ** 为什么要把可优化点列出来?** 主要是想给哪些希望优化这个 RPC 框架的小伙伴一点思路。欢迎大家 fork 本仓库,然后自己进行优化。
26
-
27
- - [x] ** 使用 Netty(基于 NIO)替代 BIO 实现网络传输;**
28
- - [x] ** 使用开源的序列化机制 Kyro(也可以用其它的)替代 JDK 自带的序列化机制;**
29
- - [x] ** 使用 Zookeeper 管理相关服务地址信息;**
30
- - [x] ** Netty 重用 Channel 避免重复连接服务端;**
31
- - [x] ** 使用 ` CompletableFuture ` 包装接受客户端返回结果** (之前的实现是通过 ` AttributeMap ` 绑定到 Channel 上实现的);
32
- - [x] ** 增加 Netty 心跳机制** : 保证客户端和服务端的连接不被断掉,避免重连。
33
- - [x] ** 客户端调用远程服务的时候进行负载均衡** :调用服务的时候,从很多服务地址中根据相应的负载均衡算法选取一个服务地址。ps:目前实现了随机负载均衡算法与一致性哈希算法。
34
- - [x] ** 处理一个接口有多个类实现的情况** :对服务分组,发布服务的时候增加一个 group 参数即可。
35
- - [x] ** 集成 Spring 通过注解注册服务;**
36
- - [x] ** 集成 Spring 通过注解进行服务消费;**
37
- - [x] ** 增加服务版本号** :建议使用两位数字版本,如:1.0,通常在接口不兼容时版本号才需要升级。为什么要增加服务版本号?为后续不兼容升级提供可能,比如服务接口增加方法,或服务模型增加字段,可向后兼容,删除方法或删除字段,将不兼容,枚举类型新增字段也不兼容,需通过变更版本号升级。
38
- - [x] ** 对 SPI 机制的运用;**
39
- - [ ] ** 增加可配置比如序列化方式、注册中心的实现方式,避免硬编码** :通过 API 配置,后续集成 Spring 的话建议使用配置文件的方式进行配置
40
- - [x] ** 客户端与服务端通信协议(数据包结构)重新设计** ,可以将原有的 ` RpcRequest ` 和 ` RpcReuqest ` 对象作为消息体,然后增加如下字段(可以参考:《Netty 入门实战小册》和 Dubbo 框架对这块的设计):
41
- - ** 魔数** : 通常是 4 个字节。这个魔数主要是为了筛选来到服务端的数据包,有了这个魔数之后,服务端首先取出前面四个字节进行比对,能够在第一时间识别出这个数据包并非是遵循自定义协议的,也就是无效数据包,为了安全考虑可以直接关闭连接以节省资源。
42
- - ** 序列化器编号** :标识序列化的方式,比如是使用 Java 自带的序列化,还是 json,kyro 等序列化方式。
43
- - ** 消息体长度** : 运行时计算出来。
44
- - ......
45
- - [ ] ** 编写测试为重构代码提供信心**
46
- - [ ] ** 服务监控中心(类似 dubbo admin)**
47
- - [x] ** 设置 gzip 压缩**
48
-
49
- ## 知识星球
50
-
51
- 欢迎准备 Java 面试以及学习 Java 的同学加入我的[ 知识星球] ( https://www.yuque.com/docs/share/8a30ffb5-83f3-40f9-baf9-38de68b906dc ) ,干货非常多,学习氛围非常好!收费虽然是白菜价,但星球里的内容或许比你参加上万的培训班质量还要高。
52
-
53
- 我有自己的原则,不割韭菜,用心做内容,真心希望帮助到你!
54
-
55
- 如果你感兴趣的话,不妨花 3 分钟左右看看星球的详细介绍: [ JavaGuide 知识星球详细介绍] ( https://www.yuque.com/docs/share/8a30ffb5-83f3-40f9-baf9-38de68b906dc ) (文末有优惠券)。
21
+ ## 星球其他资源
22
+ 除了 ** 《手写 RPC 框架》** 之外,星球还有 ** 《Java 必读源码系列》** (目前已经整理了 Dubbo 2.6.x 、Netty 4.x、SpringBoot2.1 的源码)、 ** 《Java 面试指北》** 、** 《Kafka 常见面试题/知识点总结》** 等多个专属小册。
23
+
24
+ ![ ] ( https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/xingqiu/image-20220316200015412.png )
25
+ 另外,星球还会有读书活动、学习打卡、简历修改、免费提问、海量 Java 优质面试资源以及各种不定时的福利。
26
+ ![ ] ( https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/xingqiu/image-20220304124333119.png )
27
+
28
+ ## 星球限时优惠
29
+
30
+ 欢迎准备 Java 面试以及学习 Java 的同学加入我的[ 知识星球] ( ../about-the-author/zhishixingqiu-two-years.md ) ,干货非常多,学习非常好!收费虽然是白菜价,但星球里的内容或许比你参加上万的培训班质量还要高。
31
+
32
+ 两年前,星球的定价是 ** 50/年** ,这是星球的最低定价,我还附送了 33 元优惠券。扣除了星球手续费,发了各种福利之后,几乎就是纯粹做公益。感兴趣的小伙伴可以看看我在 2020-01-03 发的头条:[ 做了一个很久没敢做的事情] ( https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247486049&idx=1&sn=e0161b409e8f164251bdaa0c83a476bc&chksm=cea245aaf9d5ccbcafdb95a546d959508814085620aabdbb4385c4b8cea6e50bf157c3697041&token=1614894361&lang=zh_CN#rd ) ,去考古一下。
33
+
34
+ 随着时间推移,星球积累的干货资源越来越多,我花在星球上的时间也越来越多。于是,星球的定价慢慢被调整为了 ** 159/年** !
35
+
36
+ 目前已经有 ** 1.3w+** 人加入星球,随着加入的人数增加,这个定价还会继续调整。
37
+
38
+ 这里再送出一张新人优惠券,使用优惠券 ** 139/年** 加入(即将调整为 ** 199/年** )。
39
+
40
+ ![ ] ( https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/xingqiu/xingqiuyouhuijuan-20.png )
41
+
42
+ 如果你在犹豫要不要加入的话,我建议你进来体验一下,三天之内知识星球 APP 右上角可以申请全额退款,秒到账!绝对不会坑大家!
43
+
44
+ 进入星球之后,你可以为自己制定一个目标,比如自己想要进入某某还不错的公司或者达成什么成就(一定要是还算有点挑战的目标)。
45
+
46
+ 待你完成目标在星球分享之后,我会将星球的门票费退还给你。
47
+
48
+ ** 真诚欢迎准备面试的小伙伴加入星球一起交流!真心希望能够帮助到更多小伙伴!**
49
+
50
+ ** 加入星球之后记得看[ 置顶主题] ( https://t.zsxq.com/04iiiAqf6 ) ,你会发现物超所值!**
56
51
57
52
58
53
0 commit comments