天天看點

基于 TiDB 場景式技術架構過程 - 理論篇

背景

從事資料架構多年,一直被問到一些問題,例如:what、why。

  • what:産品的資料架構是怎樣的
  • why:為什麼是怎樣的,選型依據是怎麼樣的

我一直回答不好這個問題,一是因為從研發轉向資料架構規劃,自己一直處在學習中,二是解決的問題,在問題發生時都沒有可參考的大廠經驗,也是處在摸索階段。最近資料架構逐漸穩定,從 TiDB 社群活動中也受益頗多,做了很多資料架構的思考,借着 6.0 的釋出,談一下自己總結的資料技術架構方法,通過一個案例,場景式展現整個設計過程。通過本文的一些描述,希望能夠給初步踏上架構選型之路上的同學們一些幫助。

聲明

資料架構的選型需要參考的因素很多,因能力有限,本文所述隻是基于作者視角做的一些總結、分享,如有常識性錯誤,請及時通知作者修改。 本文是從整體架構過程中,抽取資料架構有關的過程做分析,作為企業級架構過程參考可能有所不足。 本文是一個架構理論總結,其 POC 過程盡量還原真實情況,可能存在疏漏,僅供參考。

資料架構的一般過程

總結我司多年的經驗,資料架構的一般過程如下:

  1. 架構需求分析
  2. 技術産品選型
  3. POC 設計與測試
  4. 整體架構設計

各階段輸入 / 輸出如下:

階段 輸入 輸出
架構需求分析 系統需求說明書 技術需求矩陣、架構權衡點
技術産品選型 權衡點矩陣 備選産品清單
POC 設計與測試 備選産品清單 POC 場景設計、POC 驗證結果
整體架構設計 POC 驗證結果 資料架構設計說明書

本文遵從上述資料架構設計的一般過程,從實際項目抽象一個典型的項目作為模闆,叙述上述過程的具體實踐。

架構需求分析

架構需求分析一般從系統需求說明書入手,本節抽取系統需求說明書中的一分部内容說明,最後形成技術需求矩陣、架構權衡點。

企業組織架構

基于 TiDB 場景式技術架構過程 - 理論篇

組織說明:

  • 總公司:管理主體,對系統的主要訴求是浏覽器端的各層級管理報表,實時大屏需求。
  • 分公司:實際的經營主體,對系統的主要訴求是浏覽器端的實時管理報表,實時大屏,模型分析需求、标簽。通過模型分析評價專賣店的運作情況,發現風險,通過标簽分析本省或者本地區消費者的消費偏好,管理本省或者本地區營銷活動。
  • 零售:分為店長端和店員端應用,店長端主要通過微信小程式浏覽本店實時交易報表、管理庫存、管理活動 / 折扣,店員端主要通過桌面端完成商品銷售。
  • 消費者:消費者通過微信小程式完成附件店鋪尋找、商品預覽、活動預覽等功能。

元件規劃與特性分析

抽象上述各組織産品需求,設計子產品如下:

基于 TiDB 場景式技術架構過程 - 理論篇

應用子產品技術需求分析:

  • 交易型應用:管理、交易、活動;強事務、高并發,活動開展時存在熱點商品問題,此類功能相對固定,需求變更不多,但穩定性要求極高
  • 分析型應用:報表、大屏、标簽、模型分析;低延遲、實時線上分析、海量離線計算,此類功能需求多,需求變更多,工作量占比在 80%,要求極度靈活的報表組織能力和資料分析能力
  • 接口型應用:應對第三方交易對接,接受或者輸出實時、批量銷售庫存資訊,此類功能遵循一個穩定的接口規範,變更較少,但要考慮流量消峰、資料審計、傳輸補償等安全問題,技術比較複雜

根據咨詢公司資料回報,專賣店日均銷售筆數為 60 筆,專賣店中的旗艦店,日均交易超過 1200 筆。單日估計最大訂單數量 1000 萬,即訂單表單日存儲資料量約 1000 萬,一年的訂單表資料 36 億,按照以前的項目經驗,僅估算交易資料,項目整體資料量一年約 72 億。

非功能性限制:

  • 交易功能響應時間小于 1 秒,針對網絡短暫不穩定的情況,需提供解決方案。管理應用響應時間小于 3 秒,分析型應用小于 3 秒
  • 需符合目前主流安全标準(非本文描述範圍,也較為敏感,簡單處理)
  • 實時分析需能查詢三年以内的交易明細資料,3 年之外的交易資料可以做歸檔處理。歸檔資料需能夠再次讀取
  • 相容目前主流雲平台部署,可以實作基于雲的彈性伸縮

硬體采購限制:

  • 硬體部署在自建機房
  • 硬體裝置需按需投入,分階段投入
  • 本次建設暫不考慮多中心設計
  • 基于成本原因,優先采用開源産品

技術需求矩陣

根據組織需求和産品子產品設計,轉化為對技術元件的需求:

組織級别 報表 大屏 模型分析 标簽 管理 銷售 活動
總公司 OLAP T+1 OLAP T+1
分公司 OLAP 實時 OLAP 實時 離線計算、OLAP T+1 離線計算、全文搜尋 OLTP
專賣店 OLTP OLTP、高速緩存 OLTP
消費者 LBS OLTP、高速緩存

客戶背景分析

客戶方屬于成本敏感性一般的企業,對高端硬體的投入以實際需求為主,年初預算、年中采購、年末審計。客戶方有獨立的資訊部門,但技術能力較弱,沒有技術儲備,資訊部門的負責人思路較為超前,對新技術有較多了解,願意采用較為先進的技術解決問題。

研發團隊背景分析

研發團隊有前端研發、後端研發、資料研發、運維四組人組成,前端研發與資料架構關系較小,不做介紹,其他三組人背景如下:

  • 後端研發:java 語言背景,以 28 歲以下年輕人為主,占比 80%,具有基本 java 研發能力與基本的 SQL 基礎,剩餘 20% 為 java 技術專家,負責封裝基礎元件,與中間件的互動,平台級元件
  • 資料研發:python 語言背景,spark 實踐經驗,SQL 較為熟練,以固化離線彙總需求、利用 python 模組化、客戶實時資料查詢需求為主要工作内容
  • 運維:人數很少,多年 mysql 資料庫運維經驗,多團隊共享一個運維團隊,兼職 DBA 工作

研發團隊最嚴重的問題是 DBA 與研發配置不合理,SQL 稽核工作可能不到位,有線上 SQL 性能風險;運維為多個研發團隊共享,運維工作需要高度工具化,減少、減輕運維工作量,才能保證項目正常開展。

權衡點矩陣

結合技術需求矩陣、客戶背景分析、研發團隊背景分析,跟相關技術架構決策者溝通後,總結架構權衡點如下:

權衡點 需求來源
OLTP MySql 協定 技術需求矩陣、研發團隊背景分析
OLAP MySql 協定 技術需求矩陣、研發團隊背景分析
TP、AP 統一入口 架構決策
具備冷熱資料分離能力 架構決策、硬體采購限制
具備 CDC 能力 架構決策、硬體采購限制
本地部署,非雲産品 硬體采購限制
可友善的進行硬體擴容 硬體采購限制
具有 java 用戶端、python 用戶端 研發團隊背景分析
具有良好的可觀測性、具有自診斷、自修複,或者部分實作了自診斷、自修複特性 研發團隊背景分析
社群活躍,支援良好,有較多案例 架構決策
能夠适配 Spark,實作并行讀寫 研發團隊背景分析

設計此表格的目的是在架構選型時做評估用,類似于招标檔案中的技術要求,各個資料庫産品需要應标。表中的架構決策是指架構師和相關決策者根據經驗增加的要求。

資料庫架構選型

先畫個圖表看看我們到底需要哪種類型的資料庫:

| | 分布式 | 叢集 | 單機 | 雲部署 | 本地部署 | | ---- | --- | -- | :- | :-- | :--- | | OLTP | ✅ | ✅ | | | ✅ | | OLAP | ✅ | ✅ | | | ✅ | | HTAP | ✅ | ✅ | | | ✅ | | KV | | | | | | | 文檔 | | | | | | | 圖資料庫 | | | | | | | 列簇 | | | | | | | 時序 | | | | | | | 空間 | | | | | | | 記憶體 | ✅ | ✅ | | | ✅ | | 搜尋引擎 | ✅ | ✅ | | | ✅ |

記憶體資料庫、搜尋引擎因我司技術平台技術內建的原因,沒有什麼可選擇性,采用 Redis、Elasticsearch,其他類型在這次規劃中,可以重新選擇。

OLTP 架構選型

目前 OLTP 類型的資料庫,分為單體資料庫和分布式資料庫,基于本項目的資料量估算和成本原因,不采用開源單體資料庫,采用開源分布式資料庫,目前開源分布式資料庫有三種架構方式:

  • 分庫分表 + 中間件
  • 基于 TiDB 場景式技術架構過程 - 理論篇

說明:此種架構,在成熟的單體資料庫與應用之間加資料代理層,在資料代理層中配置放置規則,實作資料分庫分表、讀寫分離。 優勢:底層資料庫較為成熟,成本低,穩定性好 劣勢:随着資料量的增大,分片規則、擴縮容等方面的工作面對較多挑戰;如果做了讀寫分離,強一緻性讀很難保障,都需要加注解;叢集可觀測性不友好。

  • 去中心化的分布式資料庫
  • 基于 TiDB 場景式技術架構過程 - 理論篇

說明:此種架構目前作為分布式的架構最為常見,也就是大家經常說的 Shared-nothing 架構。此架構節點之間不共享資料,可以平滑的擴縮容,通過共識算法保證多副本的可用性。 優勢:高内聚、低耦合;有較為廣泛的應用;可以動态水準擴充;可保證強一緻性。

  • 共享存儲分布式資料庫
  • 基于 TiDB 場景式技術架構過程 - 理論篇

說明:此架構多個計算節點共享一個存儲叢集,多個節點之間無需日志複制,用實體檔案複制代替。 優勢:此種架構依賴于底層硬體的創新,例如非易失存儲、遠端直接資料存取等技術,我認為是未來分布式資料庫發現的方向之一,由于減少了主從之間日志複制的環節,系統的穩定性有了更可靠的保障。 劣勢:目前類似技術被大廠綁定,正常采購很難低成本獲得類似硬體,而且此類技術也不算成熟。

ETL 與 OLAP 架構選型

OLAP 的資料一般來源于 OLTP,可能會有第三方資料補充,ETL 一般伴随着 TP 和 AP 選型的不同而改變從 OLTP 同步資料到 OLAP,存在四種方式:

  • 定時抽取
  • 基于 TiDB 場景式技術架構過程 - 理論篇

說明:此架構通過設定每日定時任務,根據 timestamp 等字段,抽取每日增量到分析庫,基于分析庫做離線計算與線上分析。 優勢:實作簡單,工具成熟 劣勢:實時性不足;抽取過程容易幹擾 TP 正常業務;抽取一般在淩晨,一旦抽取失敗,工作時間發現并修複,會嚴重幹擾 TP 業務。

  • 實時同步
  • 基于 TiDB 場景式技術架構過程 - 理論篇

說明:此架構通過 TP 資料庫的 CDC 技術同步資料到流處理平台,AP 資料庫主動或者被動從流處理平台擷取增量資料,批量回放到庫表中。 優勢:資料相對實時;對 TP 幹擾小;随時進行資料回放修複同步錯誤。 劣勢:無法保證強一緻性;一般需要在應用端建立兩個資料源,應用開發人員需要厘清楚 TP 和 AP 業務。

  • 日志同步
  • 基于 TiDB 場景式技術架構過程 - 理論篇

說明:此架構常見于 HTAP 資料庫,資料庫内建 TP 和 AP 兩個存儲模型,TP 和 AP 之間通過日志同步,應用通過一個統一入口通路,通路入口根據 SQL 代價或者其他評估方案自動采用不同引擎提供服務,不必感覺底層實作。 優勢:TP 和 AP 之間可以保證強一緻性;應用無需過多關心底層實作,通過一個入口通路。 劣勢:對硬體有較高要求

  • 共享存儲
  • 基于 TiDB 場景式技術架構過程 - 理論篇

說明:此架構的 TP 和 AP 引擎公用一個共享存儲,資料不存在複制過程。 優勢:沒有日志的邏輯複制過程,用實體檔案複制代替(共享存儲特性),實時性好,系統負擔小。 劣勢:技術不太成熟,依賴于新的硬體,例如非易失存儲、遠端直接資料存取等技術。

模型、标簽架構選型

受研發團隊背景和子產品複用要求的限制,模型、标簽複用 python(Jupyter Notebook)、spark(SparkSQL) 等已經實作的元件,不再過多考慮其他方案。

備選産品圈定

首先參考一下,墨天倫的排名,篩選開源、關系型資料庫,選取 TOP5 如下:

基于 TiDB 場景式技術架構過程 - 理論篇

根據架構權衡點的要求,所標明資料庫要求本地部署、相容 MySQL 協定,排除 PolarDB、GaussDB、openGauss,隻剩下 TiDB、OceanBase,根據權衡點,繪制對元件情況如下:

權衡點 TiDB OceanBase
OLTP MySql 協定 支援 支援
OLAP MySql 協定 支援 支援
TP、AP 統一入口 支援 支援
具備冷熱資料分離能力 支援放置政策 支援放置政策
具備 CDC 能力 支援 支援
本地部署,非雲産品 支援 支援
可友善的進行硬體擴容 支援 支援
具有 java 用戶端、python 用戶端 相容 MySQL 用戶端 相容 MySQL 用戶端
具有良好的可觀測性,具有自診斷、自修複,或者部分實作了自診斷、自修複特性 流量可視化、SQL 語句分析、慢查詢分析、叢集診斷、Clinic OCP、SQL Diagnoser
社群活躍,支援良好,有較多案例 另行分析 另行分析
能夠适配 Spark,實作并行讀寫 支援 TiKV 直讀、直寫,支援直讀 TiFlash 支援 JDBC 讀寫

在社群方面的表現見下表(資料截止到 20220601):

開源項目 發版模式 已解決 Issues(github) Star/Fork 社群版本使用者數量
TiDB 基于同一個版本庫,開源版本與商業版本同步發版 9K+ 31.5K/5.1K 2K+
OceanBase 基于不同的版本庫,開源版本落後于商業版本,同步頻率未知 400+ 4.3K/972 400+

OceanBase 盛名已久,但因為開源時間晚于 TiDB,資料上并不好看,但 OceanBase 的發版方式,讓開源版本與商業版本的核心特性有較大差距,TiDB 的開源版本與商業版本是同一套代碼,開源使用者完全可以跟随版本釋出使用到最新的特性和 BUG 修複,在這一點上 TiDB 比 OceanBase 更具有優勢。 可觀測性對資料庫的運維十分重要,TiDB 的流量可視化可以更直覺的觀測到讀寫熱點,Clinic 可以一鍵打通本地環境與社群專家的溝通管道,這兩方面也具有一定優勢。 根據以上分析,本次架構設計中 TiDB 列為 POC 測試産品,OceanBase 列為備選産品。

POC 設計與測試

POC 設計一般考慮幾個方面的功能:

  1. 核心業務場景:核心業務場景是指資料庫上線之後需要解決的關鍵場景,核心業務場景支援不好,可以一票否決資料庫選型。
  2. 典型性能場景:典型性能場景是指系統可能會遇到的高并發、熱點讀寫場景,是資料庫選型在本項目中的能力上線,通常類似場景也會涉及到記憶體資料庫與關系型資料庫的配合,需要根據場景,提出合了解決方案,并嘗試靠近設計目标。
  3. 價值導向場景:價值導向場景一般指項目甲方的關鍵人員所使用的功能場景,如果保障此類場景的穩定,需要通過架構設、資源隔離等多種手段達到目标。 根據前文功能設計,選取 POC 場景如下:
  4. 壓力測試 - 登入:測試登入性能瓶頸
  5. 壓力測試 - 訂單送出:測試訂單送出性能瓶頸
  6. 壓力測試 - 商品資訊查詢:測試商品資訊查詢瓶頸,由于存在多級緩存,最終測試結果并不能表達關系型資料庫的能力。
  7. 壓力測試 - 三表關聯性能測試:選取典型的報表查詢 SQL,至少是三表關聯的查詢
  8. 穩定性測試 - 登入:由于客戶場景存在持續性壓力高峰,對登入做超過 6 小時的穩壓測試
  9. 穩定性測試 - 熱點混合場景:由于客戶場景存在持續性壓力高峰,對 1、2、3 三個場景做混合負載穩壓測試
  10. 穩定性測試 -HTAP 混合場景:由于客戶場景存在持續性壓力高峰,2、4 兩個場景做混合負載穩壓測試

我們一般使用 ​​metesphere​​​ 或者 ​​jmeter​​ 測試。metesphere 一般用于正式環境壓力測試,有很多優秀的特性,部署時需要有一定的資源保障,jmeter 即開即用,相容多種測試場景,本文截取 jmeter 的部分截圖做一些展示和說明。 jmeter 截圖:

基于 TiDB 場景式技術架構過程 - 理論篇

grafana 截圖:

基于 TiDB 場景式技術架構過程 - 理論篇

其實簡言之,就是在 average 合理的範圍區間裡(一般是非功能性需求,訂單送出 1 秒之内,查詢 3 秒之内),當 cpu、記憶體、磁盤 IO 達到 100% 時,Throughput 穩定在哪個值,這個值就是并發。經過多輪參數調整和回歸測試,最後得到的最大值就是最優并發。

總體資料架構設計

總結