TiDB in 2023, 一次簡單的回顧丨PingCAP 唐劉
2023 年已經過去,TiDB 經過了一年的迭代,又往前進步了一點點,我們非常自豪的看到,TiDB 正在不斷地幫助我們的客戶成功,包括但不限於:
○ 首 個雲原生、分散式、全棧國產化銀行核心業務系統投產上線丨TiDB × 杭州銀行
○ 國產資料庫的珠穆朗瑪峰,到底在哪裡?
○ Scaling TiDB To 1 Million QPS ( https:// blog.flipkart.tech/scal ing-tidb-to-1-million-qps-d556aa6a16ef )
○ ……
要取得上面的成績並不容易,在 2023 年我們也經歷了很多,下面,我會簡單的梳理回顧下,我們在 2023 年一些有意思的事情。
TiDB 6.5
在 2022 年的年底,我們釋出 了 TiDB 6.5 LTS 版本, 這個版本我是非常期待的。實際結果來看,到 2023 年截止,TiDB 6.5 已經逐漸成為客戶最重度的使用版本。
在 TiDB 6.5 之前,使用者高頻吐槽我們的一個問題就是 - 有時候來了一個大查詢,直接把 TiDB Server 給弄 OOM 了,這樣影響了一批其他的請求。所以我們在 TiDB 6.5 重點解決了 OOM 問題,結果也是很令人滿意的,下圖是我們實際在 TiDB Cloud 上面客戶叢集的報警情況,可以看到,TiDB OOM 的問題下降的非常明顯。
不光在 TiDB Cloud 上面,我自己也從客戶那邊得到了非常多的直接反饋。 除了 OOM 問題的緩解,在 TiDB 6.5 裡面,我們還重點的最佳化了 DDL 的速度,增強了最佳化器的能力等等。 所以在 2023 年一開始,我是信心滿滿的,覺得 TiDB 6.5 版本已經很不錯。 現在想想,我那時候真的太天真了。
『不錯』這個 flag 立了之後,立刻被打臉。TiDB 6.5 解決了不少之前客戶遺留的問題,不過當客戶開始更大規模使用 TiDB, 把 TiDB 用到更 critical 或者更復雜的場景的時候,新的問題又來了。
TiDB 7.1
在 2023 年有一段時間,我一般見到做資料庫的朋友,都會問他們一個看起來比較好玩的問題,『你的客戶有試過一次性匯入一張 50TB 大小的單表嗎?』如果是做 TP 資料庫的朋友,通常會來一句『哪有這樣的場景?』
嗯,我本來也以為,『哪有這樣的場景?』,直到我們一個北美的客戶真的進行了這樣的操作。他們在 4 月份的時候開啟了一次單表 50TB 的匯入操作,開始的結果是悲催的 - 無論客戶怎麼操作,匯入都遇到各種各樣的問題,包括但不限於資料傾斜打滿了一臺 TiKV 的磁碟,PD 在 scatter region 的時候太慢導致的匯入 timeout 等。本來我們希望幫助客戶去操作匯入,這樣我們遇到問題之後能直接修復,然後繼續,不過這個提議被客戶直接拒絕,因為他們就是要自己親自驗證,能一次性的匯入成功。
隨著客戶多次匯入失敗,客戶生氣的放下狠話,如果一週後還搞不定,那麼就不用 TiDB 了。壓力到了我們這邊,我們開始了幾乎連軸轉的匯入增強工作,終於在一週後,客戶直接一次性的單表 50TB 資料匯入成功。
這一次的匯入最佳化經歷,讓我們學習到了很多,如果有機會後面可以再開文章詳細說明。當然也有很大的收穫,在北美這個客戶匯入成功一週以後,我們日本的一個客戶進行了單表 100TB 的資料匯入,結果當然是非常振奮人心的。
挑戰還不僅僅限於此,又是北美的一個重要客戶,他們將他們自己非常核心的一個元資訊管理的業務放到了 TiDB 上面,然後這個業務大部分時候都只是涉及到 meta 的簡單操作,屬於 TP workload,不過也有不少的時候,他們需要直接進行一些輕量級的複雜查詢,而且明確要求了當這樣的複雜查詢過來的時候,幾乎完全不能影響他們的 TP workload。這個在 TiDB 6.5 還是比較有挑戰的。而不光是這個客戶,我們也發現,越來越多的客戶將多個負載跑在一個 TiDB 叢集,負載之間的隔離就變得尤其重要。於是我們跟這個客戶一起開始了 resource control 的開發,也取得了非常不錯的效果。
上面只是分 享了 TiDB 7.1 LTS 兩個功 能的開發經歷,我們也非常欣喜的看到,這些功能都得到了客戶非常積極正向的反饋。也堅定了我們 - 聚焦樣板客戶的業務場景,不斷打磨 TiDB,支援好這些業務場景,複製到其他客戶,助力客戶成功。
TiDB 7.5
隨著越來越多的客戶將 TiDB 用在非常核心的系統上面,在釋出 TiDB 7.1 之後,我們決定,在 TiDB 7.5 LTS 版本,我們將專注於產品質量的提升。產品質量是一個很大的話題,這裡僅僅列一些我們做的一點工作。
我們認為,要控制版本質量,一個非常樸素的邏輯就是少做 feature,當然我們不可能不做 feature,所以這一定是基於我們當前團隊頻寬的一個平衡和折中。下面是我們大概統計的不同 LTS 版本開發的 feature 個數,可以明顯的看到,趨勢是明顯減少的。因為做的 feature 少,多出來的頻寬我們就用到更多的質量加固的工作上面,所以我非常有理由相信,我們的 TiDB 的質量會越來越好。
減少 feature 個數對於研發工程師來說是一個極大的挑戰,因為在很多研發的腦子裡面,還是固有的認為我要透過做更多的 feature 來拿到更好的績效,以及晉升。所以在 2023,我們花了大量的時間來解釋為啥我們要控制 feature 個數,加固質量等,而且也會在績效上面對相關工作的同學進行了傾斜。
這裡大家可能會有另一個疑惑,就是我們 feature 做的少,產品的競爭力是不是就不行了?之前我也是這樣的認為,不過後來我發現,我自己做為程式設計師也一樣,我們太容易低估業務的複雜度,而高估自己的技術能力,所以總認為自己能開發很多 feature。不過後來我認識到,與其開發 10 個半吊子的 feature,真的還不如好好的開發 5 個或者更少的開箱即用的 feature,這樣給客戶的感受會更好。這也是我們後面會持續努力的目標。
譬如在 7.5 裡面,我們花了大量的經歷仍然去完善和最佳化 resource control,譬如我們引入了 runaway query 機制,給使用者提供了對於 heavy query 的控制機制,更好的防止了一些突發 heavy query 引起的 TP 業務抖動問題,效果如下:
除了控制 feature 的個數,我們還致力於提升我們自己的測試效率,2023 年一個非常大的工作就是將很多寫在 unit test 檔案裡面的 integration tests 挪出去,讓 UT 真的變成 UT,詳細見這個 issue - Split integration tests(IT) and unit tests(UT) in TiDB repo ( https:// github.com/pingcap/tidb /issues/45961 )。這個工作非常的重要,在沒開始之前,如果我們在本地單純的跑 TiDB 的 UT 測試,不出意外,大機率會跑掛,即使透過,耗時也接近 50 分鐘,而這個工作開始一段時間之後,我們當前跑完 UT 只需要 15 分鐘(後面還會繼續最佳化),這個對於我們自身的測試效率是一個極大的提升,當效率提升之後,我們就能有更多的時間寫程式碼,加測試了。
這裡僅僅只是簡單的列了一些我們在質量上面做的事情,如果後面有機會,我可以專門寫一篇文章講講 2023 年 TiDB 在質量上面做的工作。坦白的說,直到現在,我也沒找到一系列很好的指標來評估我們發出去的一個版本質量到底好不好,無論我們做了多少的測試,我總認為是不夠的。
小結
上面就是 TiDB 2023 的一個簡單的回顧了,我們在 2023 年真的取得了許多非常不錯的成績。總結來說,就是我們釋出了一個不錯的產品,以及明確了以穩定性為基礎的研發策略。回顧 2023,我們也有不少做錯的地方,也走了一些彎路,這個有機會,後面再重新開一個新坑,講講『那些年我們開發 TiDB 所踩過的坑 :-) 』。
對於 2024 年,在 TiDB 上面,我們也會非常聚焦,首先仍然會以穩定性為基礎,在這個基礎上面,我們會投入頻寬來改進 TiDB 的可觀測性以及提升一些場景下面的效能,具體的大家可以關注我們 TiDB 的 roadmap,我們會定期的重新整理。
在 2023 年,我們在 cloud 上面也取得了不錯的進展,在後面一篇文章中,我就會來講講 “TiDB Cloud in 2023”。
來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/69994146/viewspace-3006642/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PingCAP 唐劉:一個諮詢顧問對 TiDB Chat2Query Demo 提出的腦洞PingCAPTiDB
- 【指標】-簡單回顧指標
- 設計模式簡單回顧設計模式
- Hello from PingCAP/TiDBPingCAPTiDB
- PingCAP創始人劉奇:TiDB設計理念進化與大規模實踐PingCAPTiDB
- PingCAP馬曉宇:TiDB的HTAP之路PingCAPTiDB
- 簡單回顧下過去這一年的工作
- C 語言簡單演算法回顧總結演算法
- 記一次簡單的Oracle離線資料遷移至TiDB過程OracleTiDB
- 活動回顧丨飛天技術沙龍 Serverless + AI 專場(上海站)回顧 & PPT 下載ServerAI
- 獨立遊戲《遠足與露營》開發歷程簡單回顧遊戲
- 回憶一次時鐘問題的解決(簡單粗暴)
- 評委拍案叫絕、專案驚喜不斷,這是一屆怎樣的 Hackathon ?丨TiDB Hackathon 2021 回顧TiDB
- 簡單瞭解 TiDB 架構TiDB架構
- 當 dbt 遇見 TiDB丨高效的資料轉換工具讓資料分析更簡單TiDB
- 備份的 “運算元下推”:BR 簡介丨TiDB 工具分享TiDB
- 活動精彩實錄 | 阿里雲劉軍民(米諾):Cassandra中文社群年度回顧阿里
- LiveMe x TiDB丨單表資料量 39 億條,簡化架構新體驗TiDB架構
- PingCAP x 亞馬遜雲科技,為 TiDB 雲端體驗“加冕”PingCAP亞馬遜TiDB
- 簡單理解回撥
- 設計模式回顧——單例模式(C++)設計模式單例C++
- PingCAP上榜工信微報年度回顧三大具有國際影響力的開源社群之一PingCAP
- 遊戲論·文化的邏輯丨回顧街機“現代史”,從PUMP開始遊戲
- 一次簡單的脫殼
- 兩年的工作回顧
- Google I/O 2023 大會精彩影片回顧合集Go
- 嘔血回顧一次提高介面併發的經歷,很實用
- TiDB Online DDL 在 TiCDC 中的應用丨TiDB 工具分享TiDB
- 基礎回顧
- Git指令回顧Git
- 一次面試回顧——探討表現與資料分離面試
- 【譯】Visual Studio 中的 GitHub Copilot:2023年回顧Github
- 簡單粗暴的去重promise的回撥Promise
- 自學javase的回顧(2/10)Java
- 串知識的重新回顧
- [譯]回顧ESLint的成功EsLint
- JSP_EL的回顧JS
- javascript中陣列的回顧JavaScript陣列