首頁|必讀|視頻|專訪|運(yùn)營|制造|監(jiān)管|大數(shù)據(jù)|物聯(lián)網(wǎng)|量子|元宇宙|博客|特約記者
手機(jī)|互聯(lián)網(wǎng)|IT|5G|光通信|人工智能|云計(jì)算|芯片報告|智慧城市|移動互聯(lián)網(wǎng)|會展
首頁 >> 移動互聯(lián)網(wǎng)舊 >> 正文

TiDB 在小米的落地及云原生探索

2021年8月11日 09:39  CCTIME飛象網(wǎng)  

現(xiàn)狀

小米從創(chuàng)立到今天已經(jīng)過去了 10 年,2020 年 8 月 16 日雷總在線上直播,宣布小米正式開啟新十年的創(chuàng)業(yè)者計(jì)劃。第二個月,云平臺部門的數(shù)據(jù)庫與存儲團(tuán)隊(duì)啟動了 TiDB 項(xiàng)目,作為團(tuán)隊(duì)在小米新十年中的第一個三年規(guī)劃。2021 年 1 月,TiDB 產(chǎn)品正式在小米的內(nèi)部私有云上線,落地各項(xiàng)業(yè)務(wù)。

先介紹一下小米與 TiDB 的現(xiàn)狀。經(jīng)過近一年的發(fā)展,TiDB 在小米已經(jīng)部署了 20 多個集群,TiKV 節(jié)點(diǎn)也達(dá)到了三位數(shù),覆蓋的業(yè)務(wù)場景包括電商、供應(yīng)鏈、大數(shù)據(jù)等等。右邊這個米字 logo 的詞云是由我們的一部分業(yè)務(wù)線組成的,包括了零售中臺、小米有品、智能制造、代工廠、還有門店等。

小米經(jīng)過十年的發(fā)展,在傳統(tǒng)數(shù)據(jù)庫上的使用中,確實(shí)遇到了相當(dāng)多的痛點(diǎn)。因?yàn)闀r間有限,這只列舉其中四個。

第一,容量瓶頸。我們內(nèi)部的單機(jī)只有 2.6 T,經(jīng)過十年的發(fā)展,很多業(yè)務(wù)線單機(jī)的存儲都已經(jīng)達(dá)到了 2 T 以上,甚至只有幾百 G 的空間剩余,馬上就要滿了。為了解決容量問題,之前一般采用傳統(tǒng)的分庫分表解決方案,如果你對業(yè)務(wù)邏輯沒有很深的了解,是成本非常高的事情,然而業(yè)務(wù)線的建設(shè)時間往往已經(jīng)過去很久,以至于代碼都不知道從何下手去重構(gòu)。通過引入 TiDB 就能夠比較輕松地解決這個問題。

第二,高可用。MySQL 的主從架構(gòu)下,我們嘗試使用很多方法來做高可用實(shí)現(xiàn),比如通過 LB + Orchestrator + 中間件的方案來解決。但是,如果半夜主庫掛了,可能仍然睡不好覺。

第三,高寫入。TiDB 作為一個分布式數(shù)據(jù)庫,很好地解決了多點(diǎn)寫入的問題。傳統(tǒng)的 MySQL 主從架構(gòu),只能寫到主庫上,很容易達(dá)到瓶頸,達(dá)到瓶頸之后就會帶來非常強(qiáng)的主從延遲。主從延遲就會帶來一致性問題,一致性問題對很多業(yè)務(wù)來說是一個災(zāi)難。

最后,我們還有一些歷史包袱。小米十年發(fā)展以來,我們內(nèi)部有各種各樣的解決方案去適應(yīng)業(yè)務(wù)規(guī)模的增長,但都各有優(yōu)劣。小米曾開源過一個叫 Gaea 的中間件,也是支持分庫分表的,我們內(nèi)部還有其他的中間件,方案非常多,而且都分散在各個業(yè)務(wù)線。一旦相關(guān)人員有一些變動,就會變得非常難以維護(hù)。但是 TiDB 實(shí)現(xiàn)了這些方案的打包,我不再需要考慮是用這個中間件還是那個中間件,他們分別適應(yīng)什么樣的場景。

發(fā)展

我們發(fā)展的非常快,從我們剛剛了解 TiDB,到去年 9 月份接入了第一個業(yè)務(wù),然后我們開始正式立項(xiàng),建立團(tuán)隊(duì)。在今年 1 月份,我們就完成了包括部署、監(jiān)控、告警、工單等基礎(chǔ)能力的建設(shè),開始類似于一個 DBaaS 平臺,去對業(yè)務(wù)提供服務(wù)。

到今年 4 月,我們開始做質(zhì)量提升工程,完成了小時級的備份恢復(fù),還有巡檢系統(tǒng)、兩地三中心等方案的落地,大大提升了業(yè)務(wù)質(zhì)量。到今年 7 月份,業(yè)務(wù)規(guī)模開始快速增長,TiKV 節(jié)點(diǎn)很快就過百了。我們現(xiàn)在看到的節(jié)點(diǎn)數(shù)過百,完成業(yè)務(wù)規(guī)模翻倍,其實(shí)僅僅就兩三個月的時間。因?yàn)楹芏鄻I(yè)務(wù)確實(shí)看到了 TiDB 很大的一個可擴(kuò)展性,在遇到存儲瓶頸時,他們也很愿意去做這個遷移接入。后面,我們也會持續(xù)的去做 TiDB、TiKV 的穩(wěn)定性、性能還有成本等方面的工作,并且會重倉云原生的方向。

我們正式成立 TiDB 團(tuán)隊(duì)投入到 TiDB 產(chǎn)品的落地中還不到一年,和很多廠商相比算是后輩,我們也充分利用了后發(fā)優(yōu)勢,直接引入了大量生態(tài)產(chǎn)品如 BR、TiCDC、TiUP、DM 等等這些生態(tài)產(chǎn)品極大地減小了我們的運(yùn)維成本,方便我們構(gòu)建 TiDB 服務(wù)平臺,促進(jìn)了產(chǎn)品的快速發(fā)展。

挑戰(zhàn)

其實(shí)接入 TiDB 也不是那么一帆風(fēng)順。

第一是從分庫分表到 TiDB 的遷移過程。歷史問題造成的上游數(shù)據(jù)質(zhì)量堪憂(如業(yè)務(wù)自行分庫分表的設(shè)計(jì),主鍵ID重復(fù),甚至觸發(fā)器、存儲過程等),需要業(yè)務(wù)端做改造,從而導(dǎo)致遷移周期漫長。

第二是復(fù)雜的業(yè)務(wù) SQL 導(dǎo)致查詢計(jì)劃不準(zhǔn)。我們的老業(yè)務(wù)遷到 TiDB 之后,某一個 SQL 突然比以前執(zhí)行時間大大增長。SPM 無法完全解決,一是 SQL 變化多、數(shù)量大。二是根據(jù) cost,執(zhí)行計(jì)劃也會變化。而很多老業(yè)務(wù)的復(fù)雜 SQL 非常多,我們需要一一去調(diào)整查詢計(jì)劃,去幫業(yè)務(wù)做調(diào)優(yōu)。

第三是部分內(nèi)部工具對接,比如為了對接內(nèi)部消息隊(duì)列,我們建了一個 TiCDC 的內(nèi)部分支版本、Drainer 的內(nèi)部分支版本,當(dāng)然后續(xù)比較根源的解決辦法是內(nèi)部工具去迎合外部開源工具,支持相應(yīng)開源工具的接口。

最后,硬件、軟件多方面的性能調(diào)教。比如一些反直覺的情況:我們之前使用的一款NVMe 硬盤表面上磁盤性能比 SSD 要高,但實(shí)測 sysbench 的 workload 和業(yè)務(wù)的 workload 都有不小性能差距,有的情況下甚至 NVMe 的并發(fā)性能比 SSD 還要差一倍。硬件的適配和兼容也是后期我們調(diào)優(yōu)的一個方向。

點(diǎn)贊

第一個是社區(qū)支持非常友好,文檔非常完善,因此我們的接入非?焖。我之前也講了,其實(shí)僅僅一個季度的時間,我們就把整個以前看來各種高大上的平臺做好,可以對業(yè)務(wù)提供服務(wù)了。

第二個是完善的數(shù)據(jù)庫周邊生態(tài),降低了運(yùn)維的成本。我們知道一個數(shù)據(jù)庫產(chǎn)品的落地需要有自動化部署、監(jiān)控告警、運(yùn)維管理平臺等一系列基建,得益于 TiDB 社區(qū)良好的可觀測性和豐富的生態(tài)組件如 TiUP / BR / Dashboard 等等,我們很輕松的完成了相關(guān)建設(shè),極大降低了運(yùn)維成本,減輕了運(yùn)維壓力。

第三個,跨機(jī)房,多機(jī)房容災(zāi),異地多活這個話題也是一個很深的話題。我們真正實(shí)踐起來發(fā)現(xiàn) TiDB 在跨機(jī)房上表現(xiàn)得非常優(yōu)秀,很容易落地三中心的計(jì)劃。對于一些需要異地容災(zāi)的業(yè)務(wù)來說,TiDB是一個很好的選擇。

第四個,加密存儲及傳輸?shù)墓δ?/STRONG>。透明數(shù)據(jù)加密 (Transparent Data Encryption),簡稱 TDE,是 TiDB 推出的一個新特性,應(yīng)用在風(fēng)控隱私集群上,極大簡化了業(yè)務(wù)邏輯。

最后是說下 HTAP 的內(nèi)容。我們內(nèi)部也有一些 HTAP 的實(shí)踐,右邊這個指標(biāo)是我們的一個核心業(yè)務(wù)做的 HTAP 的實(shí)踐,我們之前通過 TiSpark 打在 TiKV 上的任務(wù)時間是在左邊,我們換了 TiFlash 之后,我們可以看到,無論是從任務(wù)執(zhí)行時間,還是 P99 延時、負(fù)載上,我們都提高了不只三倍。如果我們自己去優(yōu)化這三倍的性能,需要投入的精力有多少,大家做過性能優(yōu)化的應(yīng)該都知道。TiFlash 的引入大大簡化了我們的工作。

連接

前面我們提到,TiDB 豐富的生態(tài),極大降低了我們的運(yùn)維成本。取之社區(qū),回饋社區(qū)。包括 TiDB 產(chǎn)品在內(nèi),很多生態(tài)產(chǎn)品我們都有提 patch,F(xiàn)在,小米團(tuán)隊(duì)是多個產(chǎn)品的 contributor,包括 dumpling、br、ticdc、tiup 等,TiDB 產(chǎn)品目前是 active contributor。

畫虛線的產(chǎn)品 TiKV、TiDB Operator,雖然目前還不是 contributor,但是我們和 PingCAP 已經(jīng)達(dá)成合作,后續(xù)將持續(xù)貢獻(xiàn) TiDB、TiKV、TiDB Operator 產(chǎn)品,同時也是符合我們持續(xù)性優(yōu)化穩(wěn)定性、性能及成本目標(biāo)。

我們不僅僅是 DBA,還是研發(fā)工程師,都有代碼層面了解產(chǎn)品的執(zhí)拗,當(dāng)然對生態(tài)產(chǎn)品的代碼了解也有助于我們落地到業(yè)務(wù)中,同時反哺社區(qū),幫助完善生態(tài),也是開源社區(qū)所倡導(dǎo)的良性循環(huán)。

探索

玩過云的,大家可能都知道,云發(fā)展歷程中經(jīng)歷過很多基礎(chǔ)設(shè)施的不同潮流,包括選擇私有云還是公有云,以及底層的一些框架如何使用。

因?yàn)樾∶椎膰H化業(yè)務(wù)現(xiàn)在越來越發(fā)達(dá),我們對海外的公有云的需求也會越來越大。所以我們制訂了一個全球混合多云的戰(zhàn)略。我們同時使用 IDC 機(jī)房和多種公有云,并且對外封裝,把他變成一個屏蔽細(xì)節(jié)的、全球化的混合多云。

這個混合多云的具體有哪些好處呢?

首先是安全性。在國際化業(yè)務(wù)中,我們可以根據(jù)需求把數(shù)據(jù)存儲在不同的位置。這個是可以通過我們的存儲來做,業(yè)務(wù)無需關(guān)心。第二個靈活性。我們可以對業(yè)務(wù)屏蔽掉底層這個復(fù)雜的多云環(huán)境,從而提供一個通用的環(huán)境。這樣我們在切換供應(yīng)商,或者是做一些底層操作的時候,業(yè)務(wù)就不會有感知。第三個成本。云原生的好處之一,就是優(yōu)化調(diào)度,資源共享。第四個質(zhì)量。云的另一個好處就是高彈, 我們可以快速完成擴(kuò)縮容。而我們?nèi)绾卧诨旌显葡伦龈邚,又是一個非常大的挑戰(zhàn)。

我這里畫了一個非常粗粒度的規(guī)劃。

用戶層我們不展開講。服務(wù)是我們給用戶提供的服務(wù),包括運(yùn)維管控、用戶平臺、數(shù)據(jù)流以及一些調(diào)優(yōu)服務(wù)。然后是管理:由于 TiDB Operator 部署在單個 K8s 集群中,控制范圍僅能在單個 K8s 集群,而我們的需求可能包含跨機(jī)房,跨云,甚至 IDC 和 K8s 混合(比如 TiCDC 部署在云中,而 TiDB 集群在 IDC 物理機(jī)上),所以我們需要在 TiDB Operator 上另外增加一些自定義調(diào)度。所以我們可以看到除了 TiDB Operator、傳統(tǒng)的 CMDB,我們增加了一個自定義的 Operator。

底層的資源剛剛已經(jīng)介紹了大部分,需要提的一項(xiàng)是底層的存儲資源。從本地磁盤到云盤到 Ceph,再到其他分布式存儲。開發(fā)者嘉年華的吐槽大會環(huán)節(jié),美團(tuán)的黃瀟老師對 TiDB 對演進(jìn)方向有一個靈魂拷問:我們未來 TiKV 到底是繼續(xù)提高調(diào)度呢,還是說去往 PolarDB 這邊靠,做一些共享存儲的方案?東旭的回答是:我們?yōu)槭裁床欢甲瞿兀?/P>

其實(shí)我們也在研究這個問題。在支持本地磁盤和云盤的過程中,我們也在調(diào)研云原生的分布存儲。StarFS 是我們數(shù)據(jù)庫與存儲團(tuán)隊(duì)目前正在自研的分布式云原生文件系統(tǒng),與普通分布式存儲如 HDFS、Ceph 等有區(qū)別,主打高性能、低延遲。分布式存儲有一個天然弱勢就是 latency 不穩(wěn)定,所以很難作為線上數(shù)據(jù)庫的存儲后端,目前沒有能滿足數(shù)據(jù)庫需求的開源分布式存儲。StarFS計(jì)劃采用基于高性能存儲介質(zhì) SSD、NVMe,采用 SPDK、RDMA 等技術(shù)實(shí)現(xiàn)適合數(shù)據(jù)庫的分布式存儲后端。

當(dāng)然,這只是初步規(guī)劃,并在有條不紊推進(jìn)過程中,也期待引進(jìn)越來越多的新技術(shù),來迭代優(yōu)化混合云的架構(gòu)設(shè)計(jì)。

云原生探索踩過一些小坑,這里技術(shù)細(xì)節(jié)比較多了?梢院唵谓榻B一下,假如 PD-pod 假死,Operator 的控制邏輯就會失效。表面上是在 Running 的狀態(tài),但其實(shí)這個 pod 已經(jīng)無法提供服務(wù)了,這個坑也很難受。還有一些分布式存儲的調(diào)度問題、故障切換問題造成服務(wù)不可用的問題等。另外 Controller 的串行化設(shè)計(jì)也需要注意。我們知道 Controller 是把你的集群控制在一個期望的狀態(tài),但是這個串行化的控制邏輯會讓你在擴(kuò)容 TiDB 的時候,假如 TiDB 擴(kuò)容不成功,TiKV 也無法擴(kuò)容成功,這樣的話就導(dǎo)致阻塞,導(dǎo)致你整個運(yùn)維操作的失敗。

預(yù)見

最后表達(dá)一下期望,我們已經(jīng)和 TiDB 社區(qū)建立了深度的合作,我們會共同推進(jìn)混合多云戰(zhàn)略,推進(jìn)核心業(yè)務(wù)的 MySQL 遷移,以及做一些 Committer 的培養(yǎng)。在內(nèi)部也會繼續(xù)推進(jìn) TiDB 落地到小米金融、小米 AI、小米 IoT 等多個業(yè)務(wù)場景。

編 輯:T01
聲明:刊載本文目的在于傳播更多行業(yè)信息,本站只提供參考并不構(gòu)成任何投資及應(yīng)用建議。如網(wǎng)站內(nèi)容涉及作品版權(quán)和其它問題,請?jiān)?0日內(nèi)與本網(wǎng)聯(lián)系,我們將在第一時間刪除內(nèi)容。本站聯(lián)系電話為86-010-87765777,郵件后綴為#cctime.com,冒充本站員工以任何其他聯(lián)系方式,進(jìn)行的“內(nèi)容核實(shí)”、“商務(wù)聯(lián)系”等行為,均不能代表本站。本站擁有對此聲明的最終解釋權(quán)。
相關(guān)新聞              
 
人物
工信部張?jiān)泼鳎捍蟛糠謬倚聞澐至酥蓄l段6G頻譜資源
精彩專題
專題丨“汛”速出動 共筑信息保障堤壩
2023MWC上海世界移動通信大會
中國5G商用四周年
2023年中國國際信息通信展覽會
CCTIME推薦
關(guān)于我們 | 廣告報價 | 聯(lián)系我們 | 隱私聲明 | 本站地圖
CCTIME飛象網(wǎng) CopyRight © 2007-2024 By CCTIME.COM
京ICP備08004280號-1  電信與信息服務(wù)業(yè)務(wù)經(jīng)營許可證080234號 京公網(wǎng)安備110105000771號
公司名稱: 北京飛象互動文化傳媒有限公司
未經(jīng)書面許可,禁止轉(zhuǎn)載、摘編、復(fù)制、鏡像