vivo 數(shù)據(jù)庫與存儲體系產(chǎn)品矩陣
在整個 vivo 云服務體系中,數(shù)據(jù)庫與存儲處于核心位置,從體系上可以分為兩層,最上面一層是工具產(chǎn)品層,包含數(shù)據(jù)庫存儲統(tǒng)一管控平臺、數(shù)據(jù)傳輸服務(支持數(shù)據(jù)同步、數(shù)據(jù)訂閱、數(shù)據(jù)遷移等)、運維白屏化工具等。下面一層是數(shù)據(jù)庫產(chǎn)品層,這一層又分為三個部分:一部分是 MySQL、 TiDB 等關系型數(shù)據(jù)庫;一部分是 Redis、ElasticSearch、MongoDB、磁盤 KV 等非關系型數(shù)據(jù)庫;還有一部分是對象存儲、文件存儲、塊存儲等存儲服務。
vivo 數(shù)據(jù)庫與存儲運營管理
為了管理這些眾多的數(shù)據(jù)庫與存儲產(chǎn)品,vivo 打造了一個數(shù)據(jù)庫與存儲運營管理平臺,主要分為三層架構:
· 最底層是支撐、管理所有數(shù)據(jù)庫的工具產(chǎn)品,包含數(shù)據(jù)存儲服務、關系型數(shù)據(jù)庫、NoSQL 數(shù)據(jù)庫,以及生態(tài)工具;
· 中間是功能層,包括基礎存儲服務、數(shù)據(jù)管理服務,以及存儲自治服務;
· 最上面是運營層,包括權限賬單、用戶管理、工單服務等基礎服務。同時還有一些安全相關服務,如數(shù)據(jù)脫敏、數(shù)據(jù)加密、權限管控、命令通道、數(shù)據(jù)審計等一系列功能。
TiDB 在 vivo 的落地實踐
此前,vivo 已經(jīng)用了很多年關系型數(shù)據(jù)庫 MySQL。基于原生的 MySQL 數(shù)據(jù)庫,vivo 結(jié)合集群高可用的管理與數(shù)據(jù)庫代理的一體化架構,通過域名服務、名字服務進行接入,提供通用的關系型數(shù)據(jù)庫服務。它主要具有三大核心能力:
· 第一,兼容 MySQL 協(xié)議與 SQL 語法;
· 第二, 增強 MySQL 集群管控能力。vivo 引入 MySQL 的時間很早,在 MySQL 的一些集群管控能力上都有自研的能力;
· 第三,安全增強能力,包括密碼管理、數(shù)據(jù)脫敏、數(shù)據(jù)加密等能力。
本質(zhì)上 MySQL 架構還是一個主從架構,并沒有分布式技術引入。針對數(shù)據(jù)量較大、流量較大的場景,或者分析場景,給業(yè)務帶來了巨大挑戰(zhàn)?;谝陨显?,vivo 在對比了主流分布式數(shù)據(jù)后后考慮引入分布式關系型數(shù)據(jù)庫TiDB,作為關系型數(shù)據(jù)庫產(chǎn)品矩陣的一環(huán),補充整個關系型數(shù)據(jù)庫的能力。
引入TiDB 幫助 vivo 解決了一些在 MySQL 生態(tài)中無法解決的問題:
· TiDB 可以解決數(shù)據(jù)量過大、流量過大的問題,以及海量數(shù)據(jù)分析的場景;
· TiDB 兼容MySQL語法,業(yè)務遷移比較平滑;
· TiDB 支持水平擴展,相比傳統(tǒng)的 MySQL 復雜的分庫分表方式,TiDB 的擴展能力大大降低了運維壓力;
· TiDB 具備數(shù)據(jù)強一致性、高可用性,可以提供金融級數(shù)據(jù)安全性。
vivo 研發(fā)團隊具有較強的自研能力,他們將內(nèi)部所有數(shù)據(jù)庫統(tǒng)一實現(xiàn)了平臺化管理,這是一種提供高度自助、高度智能化、高可用、低成本的數(shù)據(jù)存儲使用與管理平臺,包含從數(shù)據(jù)庫服務的申請、部署、維護、變更、優(yōu)化,以及數(shù)據(jù)恢復、服務下線等一系列數(shù)據(jù)庫全生命周期的管理。
在應用 TiDB 后,vivo 研發(fā)團隊同樣也將 TiDB 集成到該平臺中,實現(xiàn)諸如 TiDB 的自動化部署、服務維護、數(shù)據(jù)變更、數(shù)據(jù)恢復,包括一些還在持續(xù)建設中的能力,如服務優(yōu)化、服務變更。這些能力與 vivo 的全球化業(yè)務場景息息相關。全球化業(yè)務場景要求更好滿足于本地客戶服務,以及符合本地數(shù)據(jù)安全相關的一些管理規(guī)范。所以 vivo 的服務都是本地化部署,平臺化的管理方式可以幫助運維、研發(fā)更好地支撐業(yè)務研發(fā)或者業(yè)務變更的效率。
該平臺一方面提升了 vivo 整個數(shù)據(jù)服務的安全性,如賬號密碼管控、敏感數(shù)據(jù)加密脫敏、集成的研發(fā)效能等。在業(yè)務開發(fā)團隊需要一個 TiDB 服務的時候,幾分鐘內(nèi)就能得到一款分布式數(shù)據(jù)庫進行代碼開發(fā),降低了運維管理成本;運維(DBA)再也不需要登陸服務器執(zhí)行各種涉鑰命令;最后,平臺也大大提升了數(shù)據(jù)的可用性。vivo 數(shù)據(jù)庫團隊將一些 TiDB 的備份恢復工具及數(shù)據(jù)庫的可用性也集成在平臺里。
應用場景
推送業(yè)務基于 TiDB 的海量數(shù)據(jù)實時 OLAP 方案
vivo 的推送業(yè)務基于 TiDB 實現(xiàn)了一套實時 OLAP 方案。該場景中具有千億級別的數(shù)據(jù)指標,vivo 希望數(shù)據(jù)在數(shù)據(jù)指標寫入時可以實現(xiàn)秒級入庫。同時,該場景還要求以月度為范圍秒級出報表。原方案中使用了其他 OLAP 數(shù)據(jù)庫方案或 MySQL 方案,在出報表時總會給數(shù)據(jù)庫集群服務造成很大壓力,指標的計算性、時效性也很差。尤其當面臨海量數(shù)據(jù)時,查詢與指標變更成本會變得很高。引入 TiDB 后,vivo 可以從實時鏈路里直接把數(shù)據(jù)秒級寫入,再通過 DM 工具,把關系型數(shù)據(jù)庫里面維度的數(shù)據(jù),以及其他相關聯(lián)的數(shù)據(jù)都同步過來,最終在 TiDB 中進行多表關聯(lián),為最終用戶提供數(shù)據(jù)服務,如 BI 報表等。在該場景中,TiDB 的高性能、低延時等特性解決了 vivo 數(shù)據(jù)量大、時效性高等難題。
云服務業(yè)務基于 TiDB 的海量元數(shù)據(jù)管理方案
vivo 云服務是 vivo 為用戶提供的在手機上進行數(shù)據(jù)備份、數(shù)據(jù)恢復同步的一款服務。這款服務用到了對象存儲與文件存儲,同時有大量的元數(shù)據(jù)需要存儲。原方案使用了 MySQL 分庫分表的方式,但 MySQL 實際上還是一個單集群方案,分庫分表的業(yè)務邏輯需要在業(yè)務層實現(xiàn),這就需要解決復雜的業(yè)務邏輯問題。同時,分庫分表造成運維十分困難,擴容成本高、擴容耗時間長?;谝陨显?,vivo 基于 TiDB 實現(xiàn)了一套海量元數(shù)據(jù)管理方案,支撐了 vivo 百億級別的元數(shù)據(jù)表和日志數(shù)據(jù)表存儲,核心業(yè)務時延小于 50ms。
基于 TiKV 自研的 NoSQL 數(shù)據(jù)庫實踐
由于 TiDB 整個產(chǎn)品都采用開源的模式,vivo 并沒有滿足于只作為 TiDB 的使用者,還基于 TiDB 的底層存儲引擎 TiKV 自研了一款 NoSQL 數(shù)據(jù)庫,希望能夠?qū)崿F(xiàn)一個高性能的、高穩(wěn)定的多數(shù)據(jù)模型的分布式數(shù)據(jù)庫,用以服務內(nèi)部大數(shù)據(jù)量存儲場景,降低整體數(shù)據(jù)庫的運營成本,同時還針對一些 AI 特殊業(yè)務場景的應用進行定制優(yōu)化。
在此之前,vivo 的 NoSQL 數(shù)據(jù)庫產(chǎn)品矩陣中 KV 產(chǎn)品實際上只有 Redis,但 Redis 是基于內(nèi)存的存儲,性能雖然很好,但存在數(shù)據(jù)無法持久化及成本高等問題?;诖耍瑅ivo 基于 TiKV 研發(fā)了自己的 NoSQL 數(shù)據(jù)庫。它兼容 Redis 協(xié)議,能夠以很低的成本進行遷移,可以持久化大規(guī)模存儲 TB 級別,甚至 PB 級別數(shù)據(jù),還具備高性能、水平擴展、高效故障切換、數(shù)據(jù)安全保證一致性等特點。之所以能做到這些,很大程度上是因為 TiKV 原本就具備了很好的能力,如存儲引擎水平擴展能力、高效故障切換能力、數(shù)據(jù)安全保證能力等。目前,這款 NoSQL 數(shù)據(jù)庫已經(jīng)在 vivo 內(nèi)部的推薦平臺、內(nèi)部管理平臺、應用中心中應用。
通過引入 TiDB ,vivo 解決了原 MySQL 架構無法應對數(shù)據(jù)量大、流量大等挑戰(zhàn),優(yōu)秀的水平擴展能力及高可用特性支撐了 vivo 百億級別的元數(shù)據(jù)表和日志數(shù)據(jù)表存儲,核心業(yè)務時延不到 50ms 。同時,TiDB 的實時 HTAP 能力還幫助 vivo 解決了報表時效性問題。未來,vivo 還將持續(xù)在內(nèi)部混合云中云化 TiDB 產(chǎn)品,將 TiDB 全生命周期的各個能力,在 vivo 內(nèi)部云上實現(xiàn)出來,支持更多的業(yè)務場景。