guide-rpc-framework 是一个 一款基于 Netty+Kyro+Zookeeper 实现的自定义 RPC 框架。目前已经开源,地址:https://github.com/Snailclimb/guide-rpc-framework (觉得不错再 Star!),欢迎小伙伴们指导建议! 如果 guide-rpc-framework 有任何需要改进和完善的地方,欢迎提交 PR/ISSUE ,和我一起完善!ღ( ´・ᴗ・` )比心 前言虽说 RPC 的原理实际不难,但是,自己在实现的过程中自己也遇到了很多问题。guide-rpc-framework 目前只实现了 RPC 框架最基本的功能,一些可优化点都在下面提到了,有兴趣的小伙伴可以自行完善。 通过这个简易的轮子,你可以学到 RPC 的底层原理和原理以及各种 Java 编码实践的运用。 你甚至可以把 guide-rpc-framework 当做你的毕设/项目经验的选择,这是非常不错!对比其他求职者的项目经验都是各种系统,造轮子肯定是更加能赢得面试官的青睐。 如果你要将 guide-rpc-framework 当做你的毕设/项目经验的话,我希望你一定要搞懂,而不是直接复制粘贴我的思想。你可以 fork 我的项目,然后进行优化。如果你觉得的优化是有价值的话,你可以提交 PR 给我,我会尽快处理。 介绍guide-rpc-framework 是一款基于 Netty+Kyro+Zookeeper 实现的 RPC 框架。代码注释详细,结构清晰,并且集成了 Check Style 规范代码结构,非常适合阅读和学习。 由于 Guide哥自身精力和能力有限,如果大家觉得有需要改进和完善的地方的话,欢迎 fork 本项目,然后 clone 到本地,在本地修改后提交 PR 给我,我会在第一时间 Review 你的代码。 我们先从一个基本的 RPC 框架设计思路说起! 一个基本的 RPC 框架设计思路
一个最简单的 RPC 框架使用示意图如下图所示,这也是 guide-rpc-framework 目前的架构 : 服务提供端 Server 向注册中心注册服务,服务消费者 Client 通过注册中心拿到服务相关信息,然后再通过网络请求服务提供端 Server。 作为 RPC 框架领域的佼佼者Dubbo的架构如下图所示,和我们上面画的大体也是差不多的。 一般情况下, RPC 框架不仅要提供服务发现功能,还要提供负载均衡、容错等功能,这样的 RPC 框架才算真正合格的。 简单说一下设计一个最基本的 RPC 框架的思路:
项目基本情况和可优化点为了循序渐进,最初的是时候,我是基于传统的 BIO 的方式 Socket 进行网络传输,然后利用 JDK 自带的序列化机制 来实现这个 RPC 框架的。后面,我对原始版本进行了优化,已完成的优化点和可以完成的优化点我都列在了下面 👇。 为什么要把可优化点列出来? 主要是想给那些希望优化这个 RPC 框架的小伙伴一点思路。欢迎大家 fork 本仓库,然后自己进行优化。 项目模块概览运行项目导入项目fork 项目到自己的仓库,然后克隆项目到自己的本地: 初始化 git hooks这一步主要是为了在 commit 代码之前,跑 Check Style,保证代码格式没问题,如果有问题的话就不能提交。
执行下面这些命令: ➜ guide-rpc-framework git:(master) ✗ chmod +x ./init.sh
CheckStyle 插件下载和配置IntelliJ IDEA-> Preferences->Plugins->搜索下载 CheckStyle 插件,然后按照如下方式进行配置。 配置完成之后,按照如下方式使用这个插件! 下载运行 zookeeper这里使用 Docker 来下载安装。 下载:
运行: docker run -d --name zookeeper -p 2181:2181 zookeeper:3.5.8 使用服务提供端实现接口:
发布服务(使用 Netty 进行传输): /** 服务消费端
相关问题为什么要造这个轮子?Dubbo 不香么?写这个 RPC 框架主要是为了通过造轮子的方式来学习,检验自己对于自己所掌握的知识的运用。 实现一个简单的 RPC 框架实际是比较容易的,不过,相比于手写 AOP 和 IoC 还是要难一点点,前提是你搞懂了 RPC 的基本原理。 我之前从理论层面在我的知识星球分享过如何实现一个 RPC。不过理论层面的东西只是支撑,你看懂了理论可能只能糊弄住面试官。咱程序员这一行还是最需要动手能力,即使你是架构师级别的人物。当你动手去实践某个东西,将理论付诸实践的时候,你就会发现有很多坑等着你。 大家在实际项目上还是要尽量少造轮子,有优秀的框架之后尽量就去用,Dubbo 在各个方面做的都比较好和完善。 如果我要自己写的话,需要提前了解哪些知识Java :
Netty :
Zookeeper :
教程Guide 的星球已经更新完了《从零开始手把手教你实现一个简单的 RPC 框架》。 公众号“JavaGuide”后回复 “星球”即可获取星球专属优惠券。 另外,加不加入纯属个人意愿,而且这个教程也没讲什么,你单看我写的代码应该也可以搞懂。目前,星球已经运营大半年多了,里面也沉淀了一些内容,后面会提高入场价格。运营一个比较好的知识交流社区是我 2020 一直尝试做好的事情。目前来看,我觉得做的还算可以,不过还有很多提高的余地(回答问题、活跃度以及精华主题数都是在所有星球里面非常靠前的)。 收费主要是为了提高准入门槛,也算是对自己付出劳动的认可。说实话,知识星球的那点收益对我来说是无足轻重的(星球抽了20%,拿到手还要扣税一波,哈哈哈)。 最后文章有帮助可以点个「在看」或「分享」,都是支持,我都喜欢! 我是 Guide 哥,Java后端开发,会一点前端知识,喜欢烹饪,自由的少年。一个三观比主角还正的技术人。我们下期再见! |
|