KubeBlocks 研發軼事之 addon 抽象
作者介紹
張雲楊,前阿里雲資料庫產品負責人,2016-2019 年任阿里雲資料庫產品總監,負責 RDS、PolarDB、Redis、MongoDB 等核心產品。目前作者就職於雲猿生資料,主要負責雲原生資料控制面 KubeBlocks 和 Serverless MySQL 產品。歡迎雲端計算或資料庫行業從業者加微信交流。
作者微信:realzyy
Addon 照進生命的一個上午
許多年之後,面對研發同事的口若懸河,我都將會想起,Tony 跟我解釋什麼是 addon 的那個遙遠的上午。
Tony 是一個美籍華裔 Infra 工程師,常年混跡於 KubeCon 和 HackerNews,痴迷於新的產品技術、健身以及佈道。在他的個人主頁上,Tony 是這樣描述自己的:長期主義者,喜歡仔細思考選擇最優解,喜歡學習新東西,保持客觀。如果沒有後面的故事,恐怕我永遠也無法注意到他描述自己的另外一段話:概括能力過於跳躍,handwriting disorder。
在北京出差的某個早上,Tony 的頭像意外地閃爍起來。一般來說,產品經理不太會引起 Tony 的興趣,雖然在同一個地區但是雙方的上班時間存在時差,並不支援淋漓盡致的輸出。畢竟,高階的噴子都要求極低的延遲。好奇的我沒管住該死的手,讓他關注到了飛書訊息的“已讀”狀態。在簡單寒暄兩句後,Tony 興奮地給出了一個文件連結,並要求評審。“Addon KubeBlocks 控制平面可選特性開關功能”,標題的 handwriting disorder 沒難住我,我知道他想寫的是“KubeBlocks Addon 定義以及功能提議”。但願裡面內容還行,我向產品之父蘇傑禱告。
天氣開始熱起來了,我看他打了杯冰美式,問到:“什麼是 addon?”
Tony 不客氣地問:“你是不是沒看我的文件?”
“那個文件沒寫明白”,我心裡這樣想,但是嘴上很慫:“我沒看懂。對於一個資料庫控制平面而言,可選特性的意義是變化的。比如說新的引擎版本,或者更細粒度的備份功能,或者更豐富的監控指標,對使用者而言都是特性上面的變化。如果 addon 的定義是可選特性,那哪些特性是必選的,哪些又是可選的呢?”
“比如,負載均衡、監控系統、儲存介面都是可選的,它們都是 addon。”
“如果我在阿里雲上面執行 KubeBlocks,ACK 提供的儲存介面是必選的,那它就不是 addon。而在亞馬遜上面執行 KubeBlocks,EKS 提供的儲存介面是可選的,那它又是 addon。按照定義,儲存介面到底是不是 addon?”
Tony 放下了咖啡杯。從 Motivation、Goals、Non Goals,到使用者故事、使用場景,再到開發和測試計劃,那個下午我獲得了很多,但是好像也失去了很多。
“不行,我一定要搞明白 addon 是什麼。”
這麼多聰明的人裡面,肯定有誰能解釋清楚。我不由自主地瞥了一眼巧克力。我們的 CTO,有著黝黑的皮膚和宜人的性格,就像巧克力一樣絲滑且有智慧。
“簡單來說,addon 是工作負載(Kubernetes Workload)的一種抽象”,巧克力解釋道:“本質是包含 ClusterDefinition、ClusterVersion、Script 和 ConfigMap 等資源的 Helm Chart,比如 KubeBlocks 接入的 OceanBase 就是一種 addon。”
雖然有點像抬槓,但是我脫口而出:“那什麼又是抽象呢?”
“在軟體工程領域,抽象是指從問題或系統中提取主要特徵和行為。透過抽象可以提高重用性和可擴充性,提升理解和研究問題的效率。”
“不愧是精通 ChatGPT 的男人”,我硬著頭皮繼續問道:“那 addon 作為一種抽象,它解決了什麼問題?”
“當你只開發一種資料庫服務的時候,每個功能都是獨特的;當你開發了一百種資料庫服務的時候,99% 的功能都是重複的。addon 作為一種抽象,就是找出了這 99% 的功能,以便研發團隊集中力量提高它們的質量。這樣大家都能過上幸福的生活。”
巧克力已經回到座位上了。我還在回味這個餅是甜的還是鹹的,感覺吃到了但是又有點餓。
我下定決心去打擾珊博。珊博是坡縣國立大學資料庫科班出身,獲得了學術大佬的真傳。Tony 的文件讓人形神俱滅,而珊博的文件旁徵博引,有種飽腹感。我讀了她的 Addon Tutorials 系列,4 萬字抄一遍剛好水一篇碩士畢業論文。別看我,我沒有。
“如果開發者在 KubeBlocks 上面沒有找到想要的資料庫引擎,他們可以選擇自己動手做一個 addon,part time 參與的話 10 個工作日內可以完成”,珊博推了推眼鏡:“addon 的製作分為三步。一是設計資料庫叢集的部署拓撲結構,二是設計資料庫叢集的引數模版,三是增加 addon yaml 配置檔案。具體來說,……”
我彷彿看見了大象緩緩走進冰箱,趕緊示意珊博暫停:“addon 好像是 KubeBlocks 0.5 就已經具備的功能,為什麼這兩天釋出的 0.8 裡面感覺它有點若隱若現?”
“這是個好問題”,珊博又推了推眼鏡:“KubeBlocks 0.8 把 addon 程式碼拆了出來,這樣就能支援兩邊按不同節奏來發布了。比如說,KubeBlocks 的釋出節奏是 1.5 個月一個大版本,如果使用者想要接入一個新的資料庫,他隨時都可以寫個新的 addon 併發布出來,再也不需要等 KubeBlocks 更新版本了。當然,還有其它的好處,比如說……”
吃不了抽象的苦,就要吃具象的苦,不爭氣的口水從眼角流下來。
Addon:一種高效、開放的擴充機制
上面這幾個虛擬的小故事,是真真正正發生在 KubeBlocks 的研發過程中的。過程沒有那麼魔幻現實主義,但是討論的激烈程度遠勝於文章,畢竟研發同學們的奇思妙想只有經過深入的拷問,才可能真正變成產品的特性。規劃趕不上變化的事情比比皆是,但也還是要在這不確定性中尋求確定性,正如在虛無縹緲的抽象理念中尋求具象的事實般重要。
所以,addon 到底是什麼?我們最終達成了一個共識:
addon 是一種高效的擴充機制。透過 KubeBlocks Addon,開發者可以在 10 個工作日內新增一種新的資料庫引擎到 KubeBlocks 中,並獲得該資料庫引擎特有的基礎管理功能,包括但不限於生命週期管理、資料備份恢復、指標和日誌採集等。
同時,addon 也是一種開放的擴充機制,是 KubeBlocks 與其它資料控制面軟體的重要區別。我們嘗試透過 addon 機制,定義資料控制面的接入標準,降低 Kubernetes 支援新資料庫引擎的難度,加速資料庫容器化的程式,並以此為基礎推動雲原生平臺的應用深度與廣度。這件事很難,但是做成了很有意義。
在具體實現上,addon 體現為儲存在 Git 倉庫裡面的 helm chart 安裝包,裡面包含了支援一個資料庫引擎所需要的拓撲資訊、配置資訊和操作指令碼。KubeBlocks 官方社群提供的所有 addon helm chart 原始碼都可以在 找到,安裝包則全部放在 的釋出裡面。開發者也可以根據需要,編寫新的 helm chart 或者改寫存量的 helm chart,提升 KubeBlocks 管理的資料庫引擎種類和體驗。
KubeBlocks 0.8 將存量資料庫引擎的 helm chart 從 KubeBlocks repo 分離出來,並採取了 Apache v2 的授權模式,預期可以帶來如下收益:
-
資料庫引擎種類和版本迭代,與 KubeBlocks 自身版本的迭代解綁。開發者不需要關注 KubeBlocks 的發版週期,隨時可以接入新的資料庫引擎或者版本,也方便終端使用者在存量 KubeBlocks 叢集上測試新的資料庫引擎/版本。
-
資料庫引擎的定義實現了多版本,降低了 addon 升級可能造成的故障風險。資料庫引擎的定義是一種“後設資料”,對後設資料的“更新”操作實際上會影響所有存量資料庫叢集。KubeBlocks 0.8 將後設資料的“更新”操作變成了“新增”操作,讓升級過程變得更加可控。
透過 addon 機制,KubeBlocks 社群已經支援了幾十種資料庫引擎,其中不乏一些優秀的國產資料庫,比如 OceanBase、PolarDB-X、OpenGauss。如果您是資料庫廠商,正在頭疼如何滿足客戶提出的“雲原生”訴求,可以嘗試使用 KubeBlocks 快速解決這個問題。如果發現不能滿足需求的地方,歡迎您聯絡我們提供幫助。
開源合作:
商業合作:marcom@apecloud.com
來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70035809/viewspace-3004712/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- AKM專案軼事之Cycle Test
- AKM專案軼事之GO LIVEGo
- D專案軼事之Kick-off
- AKM專案軼事之新新專案
- AKM專案軼事之Global Vs LOCAL
- BGWN專案軼事之Global Template展示
- AKM專案軼事之One GBS
- AKM專案軼事之加班何處去
- AKM專案軼事之Flyback遭遇航班取消
- AKM專案軼事之關係維繫
- 15條谷歌軼事谷歌
- A專案軼事之加入專案2個月
- PDS WH 專案軼事之Master Data LoadAST
- D專案軼事之相識何必曾相逢
- AKM專案軼事之糾結 - Bonded warehouse 流程
- AKM專案軼事之Bonded Process Track Report
- LR.Net平臺研發軼事,每一個點都很難,但我們不將就
- K專案軼事之開工第一天
- K專案軼事之被客戶通報批評
- D專案軼事之現場直播導主資料
- AKM專案軼事之與高中同學徐挺會見
- Oracle vs PostgreSQL,研發注意事項(3)- 事務回滾之UPDATE操作解析OracleSQL
- DC專案軼事之在家辦公
- AKM專案軼事之法國人印象
- 【Node】Addon C++模組開發C++
- 研發遊戲的那點事兒遊戲
- 【抽象那些事】不完整的抽象&多方面抽象&未用的抽象&重複的抽象抽象
- [BUG反饋]defined('ADDON_PATH') or define('ADDON_PATH', APP_PATH.'Addon');APP
- [絕對原創] AKM專案軼事之FLYBACK飛機晚點索賠
- 【前端軼事】Chrome 小恐龍背後的故事前端Chrome
- AKM專案軼事之上專案一個月
- 庫克的14件鮮為人知的軼事
- BGWN專案軼事之主導Global Weekly Meeting
- Oracle vs PostgreSQL,研發注意事項(6)- 事務處理OracleSQL
- bootstrap – input addonboot
- C++ addon
- Oracle vs PostgreSQL,研發注意事項(2)-DDL語句與事務OracleSQL
- nodejs addon/moduleNodeJS