vivo x TiDB ,解決云服務(wù)海量數(shù)據(jù)挑戰(zhàn)

vivo 是一家全球性的移動互聯(lián)網(wǎng)智能終端公司,品牌產(chǎn)品包括智能手機(jī)、平板電腦、智能手表等 ,截至 2022 年 8 月,已進(jìn)駐 60 多個國家和地區(qū),全球用戶覆蓋 4 億多人。

vivo 為用戶提供了在手機(jī)上備份聯(lián)系人、短信、便簽、書簽等數(shù)據(jù)的能力,底層存儲采用 MySQL 數(shù)據(jù)庫進(jìn)行數(shù)據(jù)存儲。隨著 vivo 業(yè)務(wù)發(fā)展,用戶量增長迅速,存儲在云端的數(shù)據(jù)量越來越大,海量數(shù)據(jù)給后端存儲和數(shù)據(jù)庫帶來了巨大的挑戰(zhàn)。云服務(wù)業(yè)務(wù)最大的痛點(diǎn),就是如何解決用戶海量數(shù)據(jù)的存儲問題。

vivo 數(shù)據(jù)庫與存儲體系

vivo 數(shù)據(jù)庫與存儲體系產(chǎn)品矩陣

在整個 vivo 云服務(wù)體系中,數(shù)據(jù)庫與存儲處于核心位置,從體系上可以分為兩層,最上面一層是工具產(chǎn)品層,包含數(shù)據(jù)庫存儲統(tǒng)一管控平臺、數(shù)據(jù)傳輸服務(wù)(支持?jǐn)?shù)據(jù)同步、數(shù)據(jù)訂閱、數(shù)據(jù)遷移等)、運(yùn)維白屏化工具等。下面一層是數(shù)據(jù)庫產(chǎn)品層,這一層又分為三個部分:一部分是 MySQL、 TiDB 等關(guān)系型數(shù)據(jù)庫;一部分是 Redis、ElasticSearch、MongoDB、磁盤 KV 等非關(guān)系型數(shù)據(jù)庫;還有一部分是對象存儲、文件存儲、塊存儲等存儲服務(wù)。

vivo 數(shù)據(jù)庫與存儲運(yùn)營管理

為了管理這些眾多的數(shù)據(jù)庫與存儲產(chǎn)品,vivo 打造了一個數(shù)據(jù)庫與存儲運(yùn)營管理平臺,主要分為三層架構(gòu):

·最底層是支撐、管理所有數(shù)據(jù)庫的工具產(chǎn)品,包含數(shù)據(jù)存儲服務(wù)、關(guān)系型數(shù)據(jù)庫、NoSQL 數(shù)據(jù)庫,以及生態(tài)工具;

·中間是功能層,包括基礎(chǔ)存儲服務(wù)、數(shù)據(jù)管理服務(wù),以及存儲自治服務(wù);

·最上面是運(yùn)營層,包括權(quán)限賬單、用戶管理、工單服務(wù)等基礎(chǔ)服務(wù)。同時還有一些安全相關(guān)服務(wù),如數(shù)據(jù)脫敏、數(shù)據(jù)加密、權(quán)限管控、命令通道、數(shù)據(jù)審計(jì)等一系列功能。

TiDB 在 vivo 的落地實(shí)踐

此前,vivo 已經(jīng)用了很多年關(guān)系型數(shù)據(jù)庫 MySQL?;谠?MySQL 數(shù)據(jù)庫,vivo 結(jié)合集群高可用的管理與數(shù)據(jù)庫代理的一體化架構(gòu),通過域名服務(wù)、名字服務(wù)進(jìn)行接入,提供通用的關(guān)系型數(shù)據(jù)庫服務(wù)。它主要具有三大核心能力:

·第一,兼容 MySQL 協(xié)議與 SQL 語法;

·第二, 增強(qiáng) MySQL 集群管控能力。vivo 引入 MySQL 的時間很早,在 MySQL 的一些集群管控能力上都有自研的能力;

·第三,安全增強(qiáng)能力,包括密碼管理、數(shù)據(jù)脫敏、數(shù)據(jù)加密等能力。

本質(zhì)上 MySQL 架構(gòu)還是一個主從架構(gòu),并沒有分布式技術(shù)引入。針對數(shù)據(jù)量較大、流量較大的場景,或者分析場景,給業(yè)務(wù)帶來了巨大挑戰(zhàn)。基于以上原因,vivo 在對比了主流分布式數(shù)據(jù)后后考慮引入分布式關(guān)系型數(shù)據(jù)庫TiDB,作為關(guān)系型數(shù)據(jù)庫產(chǎn)品矩陣的一環(huán),補(bǔ)充整個關(guān)系型數(shù)據(jù)庫的能力。

引入TiDB 幫助 vivo 解決了一些在 MySQL 生態(tài)中無法解決的問題:

·TiDB 可以解決數(shù)據(jù)量過大、流量過大的問題,以及海量數(shù)據(jù)分析的場景;

·TiDB 兼容MySQL語法,業(yè)務(wù)遷移比較平滑;

·TiDB 支持水平擴(kuò)展,相比傳統(tǒng)的 MySQL 復(fù)雜的分庫分表方式,TiDB 的擴(kuò)展能力大大降低了運(yùn)維壓力;

·TiDB 具備數(shù)據(jù)強(qiáng)一致性、高可用性,可以提供金融級數(shù)據(jù)安全性。

vivo 研發(fā)團(tuán)隊(duì)具有較強(qiáng)的自研能力,他們將內(nèi)部所有數(shù)據(jù)庫統(tǒng)一實(shí)現(xiàn)了平臺化管理,這是一種提供高度自助、高度智能化、高可用、低成本的數(shù)據(jù)存儲使用與管理平臺,包含從數(shù)據(jù)庫服務(wù)的申請、部署、維護(hù)、變更、優(yōu)化,以及數(shù)據(jù)恢復(fù)、服務(wù)下線等一系列數(shù)據(jù)庫全生命周期的管理。

在應(yīng)用 TiDB 后,vivo 研發(fā)團(tuán)隊(duì)同樣也將 TiDB 集成到該平臺中,實(shí)現(xiàn)諸如 TiDB 的自動化部署、服務(wù)維護(hù)、數(shù)據(jù)變更、數(shù)據(jù)恢復(fù),包括一些還在持續(xù)建設(shè)中的能力,如服務(wù)優(yōu)化、服務(wù)變更。這些能力與 vivo 的全球化業(yè)務(wù)場景息息相關(guān)。全球化業(yè)務(wù)場景要求更好滿足于本地客戶服務(wù),以及符合本地數(shù)據(jù)安全相關(guān)的一些管理規(guī)范。所以 vivo 的服務(wù)都是本地化部署,平臺化的管理方式可以幫助運(yùn)維、研發(fā)更好地支撐業(yè)務(wù)研發(fā)或者業(yè)務(wù)變更的效率。

該平臺一方面提升了 vivo 整個數(shù)據(jù)服務(wù)的安全性,如賬號密碼管控、敏感數(shù)據(jù)加密脫敏、集成的研發(fā)效能等。在業(yè)務(wù)開發(fā)團(tuán)隊(duì)需要一個 TiDB 服務(wù)的時候,幾分鐘內(nèi)就能得到一款分布式數(shù)據(jù)庫進(jìn)行代碼開發(fā),降低了運(yùn)維管理成本;運(yùn)維(DBA)再也不需要登陸服務(wù)器執(zhí)行各種涉鑰命令;最后,平臺也大大提升了數(shù)據(jù)的可用性。vivo 數(shù)據(jù)庫團(tuán)隊(duì)將一些 TiDB 的備份恢復(fù)工具及數(shù)據(jù)庫的可用性也集成在平臺里。

應(yīng)用場景

推送業(yè)務(wù)基于 TiDB 的海量數(shù)據(jù)實(shí)時 OLAP 方案

vivo 的推送業(yè)務(wù)基于 TiDB 實(shí)現(xiàn)了一套實(shí)時 OLAP 方案。該場景中具有千億級別的數(shù)據(jù)指標(biāo),vivo 希望數(shù)據(jù)在數(shù)據(jù)指標(biāo)寫入時可以實(shí)現(xiàn)秒級入庫。同時,該場景還要求以月度為范圍秒級出報表。原方案中使用了其他 OLAP 數(shù)據(jù)庫方案或 MySQL 方案,在出報表時總會給數(shù)據(jù)庫集群服務(wù)造成很大壓力,指標(biāo)的計(jì)算性、時效性也很差。尤其當(dāng)面臨海量數(shù)據(jù)時,查詢與指標(biāo)變更成本會變得很高。引入 TiDB 后,vivo 可以從實(shí)時鏈路里直接把數(shù)據(jù)秒級寫入,再通過 DM 工具,把關(guān)系型數(shù)據(jù)庫里面維度的數(shù)據(jù),以及其他相關(guān)聯(lián)的數(shù)據(jù)都同步過來,最終在 TiDB 中進(jìn)行多表關(guān)聯(lián),為最終用戶提供數(shù)據(jù)服務(wù),如 BI 報表等。在該場景中,TiDB 的高性能、低延時等特性解決了 vivo 數(shù)據(jù)量大、時效性高等難題。

云服務(wù)業(yè)務(wù)基于 TiDB 的海量元數(shù)據(jù)管理方案

vivo 云服務(wù)是 vivo 為用戶提供的在手機(jī)上進(jìn)行數(shù)據(jù)備份、數(shù)據(jù)恢復(fù)同步的一款服務(wù)。這款服務(wù)用到了對象存儲與文件存儲,同時有大量的元數(shù)據(jù)需要存儲。原方案使用了 MySQL 分庫分表的方式,但 MySQL 實(shí)際上還是一個單集群方案,分庫分表的業(yè)務(wù)邏輯需要在業(yè)務(wù)層實(shí)現(xiàn),這就需要解決復(fù)雜的業(yè)務(wù)邏輯問題。同時,分庫分表造成運(yùn)維十分困難,擴(kuò)容成本高、擴(kuò)容耗時間長?;谝陨显颍瑅ivo 基于 TiDB 實(shí)現(xiàn)了一套海量元數(shù)據(jù)管理方案,支撐了 vivo 百億級別的元數(shù)據(jù)表和日志數(shù)據(jù)表存儲,核心業(yè)務(wù)時延小于 50ms。

基于 TiKV 自研的 NoSQL 數(shù)據(jù)庫實(shí)踐

由于 TiDB 整個產(chǎn)品都采用開源的模式,vivo 并沒有滿足于只作為 TiDB 的使用者,還基于 TiDB 的底層存儲引擎 TiKV 自研了一款 NoSQL 數(shù)據(jù)庫,希望能夠?qū)崿F(xiàn)一個高性能的、高穩(wěn)定的多數(shù)據(jù)模型的分布式數(shù)據(jù)庫,用以服務(wù)內(nèi)部大數(shù)據(jù)量存儲場景,降低整體數(shù)據(jù)庫的運(yùn)營成本,同時還針對一些 AI 特殊業(yè)務(wù)場景的應(yīng)用進(jìn)行定制優(yōu)化。

在此之前,vivo 的 NoSQL 數(shù)據(jù)庫產(chǎn)品矩陣中 KV 產(chǎn)品實(shí)際上只有 Redis,但 Redis 是基于內(nèi)存的存儲,性能雖然很好,但存在數(shù)據(jù)無法持久化及成本高等問題?;诖耍瑅ivo 基于 TiKV 研發(fā)了自己的 NoSQL 數(shù)據(jù)庫。它兼容 Redis 協(xié)議,能夠以很低的成本進(jìn)行遷移,可以持久化大規(guī)模存儲 TB 級別,甚至 PB 級別數(shù)據(jù),還具備高性能、水平擴(kuò)展、高效故障切換、數(shù)據(jù)安全保證一致性等特點(diǎn)。之所以能做到這些,很大程度上是因?yàn)?TiKV 原本就具備了很好的能力,如存儲引擎水平擴(kuò)展能力、高效故障切換能力、數(shù)據(jù)安全保證能力等。目前,這款 NoSQL 數(shù)據(jù)庫已經(jīng)在 vivo 內(nèi)部的推薦平臺、內(nèi)部管理平臺、應(yīng)用中心中應(yīng)用。

通過引入 TiDB ,vivo 解決了原 MySQL 架構(gòu)無法應(yīng)對數(shù)據(jù)量大、流量大等挑戰(zhàn),優(yōu)秀的水平擴(kuò)展能力及高可用特性支撐了 vivo 百億級別的元數(shù)據(jù)表和日志數(shù)據(jù)表存儲,核心業(yè)務(wù)時延不到 50ms 。同時,TiDB 的實(shí)時 HTAP 能力還幫助 vivo 解決了報表時效性問題。未來,vivo 還將持續(xù)在內(nèi)部混合云中云化 TiDB 產(chǎn)品,將 TiDB 全生命周期的各個能力,在 vivo 內(nèi)部云上實(shí)現(xiàn)出來,支持更多的業(yè)務(wù)場景。

(免責(zé)聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請進(jìn)一步核實(shí),并對任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對有關(guān)資料所引致的錯誤、不確或遺漏,概不負(fù)任何法律責(zé)任。
任何單位或個人認(rèn)為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識產(chǎn)權(quán)或存在不實(shí)內(nèi)容時,應(yīng)及時向本網(wǎng)站提出書面權(quán)利通知或不實(shí)情況說明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。 )