年紀輕輕,為什麼要搞中間件開發?「路怎麼走,讓你們自己挑」


作者:小傅哥
部落格://bugstack.cn

沉澱、分享、成長,讓自己和他人都能有所收穫!😄

一、前言

年紀輕輕,為什麼要搞中間件開發?

五年前,香河大廠村,開張大吉。我和弟兄們雄心壯志,坐公交車去面試,誰知道求職不到半個月,每天平均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 的技術需求

六、📚資料學習

  1. 《SpringBoot 中間件設計和開發》 專欄小冊完整閱讀許可權
  2. 獲得 csdncode 程式碼庫,//codechina.csdn.net/,30組對應的程式碼庫一套,可以隨時交流討論提交 issues
  3. 可以加入中間件交流群,添加我的微信:fustack 備註:中間件加群

好嘛,就是在大家的幫助、支援、認可、鼓勵中,你希望看到的中間件設計和開發小冊和大家見面了!這是一個程式設計師成長階段突破技術瓶頸和提升技術認知,都應該了解和學習的內容,加油!記住在專欄學習過程中遇到任何問題,請聯繫這個優秀的男人:小傅哥,微信:fustack