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