# SpringBoot 中间件设计和开发

作者:小傅哥
博客:https://bugstack.cn (opens new window)
星球:https://t.zsxq.com/0d7qkNTdA (opens new window) - 课程入口

沉淀、分享、成长,让自己和他人都能有所收获!😄

# 一、前言

年纪轻轻,为什么要搞中间件开发?

五年前,香河大厂村,开张大吉。我和弟兄们雄心壮志,坐公交车去面试,谁知道求职不到半个月,每天平均1.3个人挂在八股文造火箭,一年内6个兄弟去了外包。

佛祖保佑!算命的说我是“CRUD搬砖996”,不过我不同意。我认为出来混的,是20K40K,要由自已决定。

你们跟着我的日子最短,底子最薄,路怎么走,让你们自已挑。

好了,祝你们,在大厂,一帆风顺! 干杯各位架构师!


说到底,为什么要扒开CRUD的表面,深入到核心源码实践学一些中间件开发技能,还不是希望自己对技术栈学习有一定的深度,免得面试时被人忽悠压薪资。就像人家问你:

  • 类的代理、反射调用是在什么场景用到的?
  • 自定义注解是怎么和切面一起获取到信息使用的?
  • 你需要的yml配置信息是如何被SpringBoot加载并初始化的?
  • Bean 是如何被注入到 Spring 容器,提供服务的?
  • ORM 框架是怎么解决不需要写接口的实现类就能执行CRUD操作的?
  • 扰动函数和数据库路由实现中的数据散列有什么关系?
  • 分布式任务调度与zookeeper配置中心是怎么联动的?
  • 字节码插桩对方法增强怎么拦截程序方法运行时信息?

综上,等等这些技术点可能很多时候你所学到的只能称作为背答案记结果,因为没有实操所以过后就忘而且也扛不住面试官的接连发问。

那么,为了让所有对需要对自己技术栈知识加深,拓展相关技能的实战经验,同时也让感兴趣于薪资高的中间件开发的小伙伴,有一个能入门并上手的教程。特此准备了专栏小册《SpringBoot 中间件设计和开发》,欢迎大家加入!

全小册19个章节,包括16个中间件的设计和开发,包括测试案例共30个代码库提供给读者学习使用。小册实现的中间件场景涵盖:技术框架、数据服务、数据组件、分布式技术、服务治理、字节码、IDEA插件七个方面,贯穿整个互联网系统架构中常用的核心内容。非常值得了解、学习、实践到掌握。

💋鉴于作者水平有限,如果书中含有不易理解的内容,一定是作者在编写的过程中缺少必要的描述和严格的校准,感谢把你的意见或者疑问提交给我,也欢迎与我多一些交互,互相进步共同成长。

# 二、中间件开发技术

如果平常只是更多的做一些业务代码的开发,那么接触的技术一般是在各类组件的 API 使用上,以及对不同接口的包装。而中间件开发会涉及到各类框架的源码和原理,以及相应的技术迁移和复用。那么在我们这次中间件的设计和实现中,会学到框架、数据、治理、分布式以及字节码的相关技术栈知识,整体包括如下:

图 2-1

  • 技术框架:包括 Spring、SpringBoot 配置加载、自定义注解、扫描注册Bean等,以及 ORM 框架设计原理和实现。这部分技术主要是把开发的中间件与框架结合,开发相应的组件或者包装为各类 SpringBoot Starter 的能力学习。
  • 数据服务:Mysql、Redis、Elasticsearch,都是数据服务,通常需要开发各类组件对数据服务的使用进行封装,Mysql 我们知道有 JDBC,Redis 我们知道有 Jedis,但 Elasticsearch 有 x-pack 你是否了解。
  • 数据组件:这类组件的开发就是为了简化对数据服务的使用,Mysql+JDBC+ORM,可以非常方便的使用数据库服务,那么 Elasticsearch 是否也可以做相应的组件研发,让它的查询也能像使用 MyBatis 一样呢?二折页的技术能力就需要对 MyBatis 等 ORM 框架的实现原理熟悉,同时需要了解 JDBC 的概念。
  • 分布式技术:RPC 框架、注册中心、分布式任务,都是现有互联网分布式架构中非常重要的技术,而对于如何实现一个 RPC 框架,也技术是研发人员要掌握的重点,同时如何使用注册中心、怎么下发分布式调度任务,等等,这些技术的学习能让对现有的框架使用有更深入的认识。
  • 服务治理:熔断、降级、限流、切量、黑白名单以及对现有方法的非入侵式扩展增强等,都可以成为是服务治理类组件,原本这类技术在早期是与业务逻辑代码融合的,后来逐步被拆解出来,开发成对应的组件。所以我们可以学习到,关于这类组件的包装、集成是如何做的。
  • 字节码&插件:在互联网的系统应用运维过程中,你一定会接触到各类的监控系统,而很多监控系统是非入侵的全链路监控,那么这些是如何实现的呢?其实它们是基于字节码插桩,对系统方法的增强,采集相应的运行时信息,进行监控的。再到扩展 JVMTI、IDEA 插件开发,都是为了整个研发过程的可持续交付和上线提高交付质量和降低人效的。

综上,这些贯穿整个互联网系统架构中的各类典型中间件,都会在后续章节中陆续讲解出来,它们是如何设计和实现的,一点点带你解开中间件的神秘面纱,让你的技术栈知识也增加一些有深度的并且是可以亲自操作的内容。

# 三、中间件设计和实现列表

序号 图标 名称 描述
1 服务治理,统一白名单控制 解决上线验证风险,白名单特定用户开量验证
2 服务治理,超时熔断 包装超时调用熔断,降低业务系统接入成本
3 服务治理,调用限流 包装接口调用限流,降低业务系统接入成本
4 服务治理,自定义拦截方法 不破坏现有方法,增强方法服务能力
5 ORM 框架实现 学习 ORM 框架核心设计,实现简单版 MyBatis
6 ORM 框架与 Spring 集合 熟悉 Bean 扫描、代理、注册、管理等,以及对 ORM 的包装
7 结合 SpringBoot 开发 ORM Starter ORM、Spring 与 SpringBoot 结合,自动化记载初始配置,开发 Starter
8 ES-JDBC 查询引擎 了解 Elasticsearch JDBC 组件的源码实现,x-pack-jdbc
9 ES SpringBoot Starter 服务框架 运用 ORM 技术迁移,开发 ES 类的 ORM 框架,解决查询映射复杂性,做面向对象开发包装
10 RPC 框架实现 学习 RPC 框架的设计和开发,了解通信原理和实现
11 数据库路由组件 把散列算法、切面处理、数据源切换、自定义配置结合在一起实践,开发路由组件
12 Redis 简化使用封装 处理 Redis 的二次包装,简化为接口代理方式使用,降低应用成本,以及增加升级容易度
13 分布式任务调度 在注册中、任务、控制台,多方内容组合下开发分布式任务调度
14 非入侵监控设计,ASM 字节码插桩 了解字节码插桩技术,学习 Javaagent 处理的非入侵监控方式
15 非入侵监控设计,JVMTI 定位代码 了解 JVMTI 的技术能力,开发 C++ dll 组件,增强监控能力
16 IDEA插件与字节码插桩结合 结合 IDEA 插件开发与字节码增强技术,采集代码研发运行过程中的执行信息,分析和提升交付质量

小册16个中间件实现,包括测试工程等共计30个代码库,每一章节都会对应有一个中间件的设计和实现,为了便于读者快速有效的学习小册中的技术内容,这里介绍下小册中章节的内容结构,涵盖以下5方面内容:

  1. 开篇引导,在技术、经验、成长等各方面汇总的内容,帮助大家扩宽知识面和增加成长经验。
  2. 需求背景,讲述此中间件会因为什么场景、什么需求下用于解决什么痛点而提出的。
  3. 方案设计,针对需求背景的痛点问题,做中间件架构方案设计,包括设计图稿和实现描述。
  4. 技术实现,主要是对方案设计的具体实现落地,这个过程会包括完整的实现源码以及所有核心代码的讲解。保证大家在学习的过程中也能完成中间件的设计和开发。
  5. 测试验证,每一个中间件的实现都有一个对应的测试工程,例如:whitelist-spring-boot-starterwhitelist-spring-boot-starter-test。通过测试工程对中间件实现预期的验证,可以让大家更加容易的理解一个需求的背景、设计、实现到交付验证的过程。
  6. 文末总结,是对每一篇文章的概要汇总,也是给读者在文末针对此篇文章的学习的一个帮助提醒,也希望你学到的信息要远比站在作者视角总结的内容还要完善。

# 四、你会学到什么?

  • Spring 对配置文件的加载、Bean 扫描、定义、注册等
  • Spring Boot 关于 Starter 开发的常用技术手段和技巧
  • ORM、RPC、数据库路由、服务治理、系统监控、IDEA插件等各类场景下的中间件设计
  • 类的代理、反射调用、切面处理、字节码插桩、扰动函数增强散列以及JVMTI等核心技术的实际运用
  • 30个代码库让你对中间件的设计、实现、验证,有清晰的认识

# 五、适宜人群

  • 具备 Java 编程基础的研发人员,略懂部分框架源码,经常使用各类技术组件
  • 需要提升个人的核心技术能力
  • 对中间件开发感兴趣,但不知道从哪入手
  • 有在 SpringBoot 开发 Starter 的技术需求

# 六、项目课程📚

# 七、🎉收尾感谢

谢谢掘金平台和运营优弧对小册校对审核到上架的帮助,谢谢粉丝伙伴对小傅哥技术内容的认可和期待,也谢谢家人在过年和周末期间给我提供的时间只干饭不洗完😄哈哈哈哈,专心码文章

好嘛,就是在大家的帮助、支持、认可、鼓励中,你希望看到的中间件设计和开发小册和大家见面了!这是一个程序员成长阶段突破技术瓶颈和提升技术认知,都应该了解和学习的内容,加油!记住在专栏学习过程中遇到任何问题,请联系这个优秀的男人:小傅哥,微信:fustack