ShardingSphere + Database Mesh,愛奇藝的雲上數據治理實踐

今年 5 月,SphereEx 正式對外提出了 Database Mesh 2.0 理念。關於 Database Mesh,其不是靜態的定義,而是一個在不斷進化的動態概念。Database Mesh 始終關注對數據庫流量的治理,基於數據庫協議感知能力,提供數據分片、負載均衡、可觀測性、審計等能力,這些能力已經解決了數據庫治理中屬於流量治理的部分問題。此外 Database Mesh 也關注數據庫可靠性工程的建設,面向不同角色提供更易用、更極致的數據庫治理能力。

愛奇藝十分認同 Database Mesh 的理念以及願景,即『在雲端實現數據庫的高性能擴展以及解決數據治理難題』。因此,愛奇藝基於自身需要對 ShardingSphere-JDBC 進行了擴展,並結合 Database Mesh 理念的具體實現--Pisanix 進行了一系列關鍵測試,逐步向 Database Mesh 架構演進。

隨着業務擴張與用戶數量激增,所接入的各類活動(例如秒殺)也在增長,瞬間巨大流量的湧入也爲數據庫帶來了不小的壓力,進而導致企業在應用數據庫的過程中出現 slave 延遲、慢查詢以及部分操作無法滿足業務需要等問題。在微服務架構以及雲原生的加速下,雙方的結合爲業務上線發佈和治理帶來了新的可能。不過隨着業務場景越來越多元,數據應用的方案呈現煙囪狀,對數據的管控有孤島化的趨勢,擺在技術人員面前的是“選型難、成本高、管控複雜”等問題。

尤其是在雲原生日漸成熟的今天,業務應用和數據庫等基礎設施的關係正在潛移默化中改變,愛奇藝希望通過把握雲原生架構的新趨勢,採用統一化管理的方式,實現對數據庫的擴展和升級,以支撐更多應用與業務上雲。

爲了滿足業務團隊在雲上環境中對於數據庫性能、可用性等方面的高要求,愛奇藝需要將 ShardingSphere 在本地的分佈式能力遷移至雲端,並尋找一款能夠在雲原生環境下統一雲端數據庫流量入口、對雲上流量以及數據進行統一高效治理的工具。

愛奇藝在調研並配合測試反饋由 SphereEx 社區提供的 Database Mesh 解決方案--Pisanix 的同時,也基於 ShardingSphere 社區的 ShardingSphere-JDBC 進行二次開發,以滿足目前業務接入數據庫治理平臺中對於數據分片、負載均衡、配置存儲與安全等需求。

目前愛奇藝使用統一配置中心存儲數據庫連接配置,使用 KMS 相關技術加密數據庫訪問配置,使用 ShardingSphere-JDBC 滿足數據分片和負載均衡相關的需求,整體架構如下圖。

愛奇藝雲原生數據庫體系

當業務接入數據治理平臺時,通過申請相關的連接配置,在經過轉化和訪問信息通過 KMS 加密後存儲進統一配置存儲中心;當應用啓動時,通過改進過後的 ShardingSphere-JDBC 拉取配置並監聽配置變更以支持配置熱更新。

在改進之前,如果遇到修改配置、Sharding 集羣擴容、集羣版本升級、數據庫遷移和上雲等場景時,往往需要針對業務服務進行重新發版,並且業務方需針對相關場景設計如切換和回滾、選擇時間點、流量灰度以及數據校對等複雜操作流程。

改進後,對於配置中新增或修改分表配置,定製化的 ShardingSphere-JDBC能夠對 Sharding 集羣的擴縮容或改綁起到很好的支持作用。通過在配置中心白屏操作修改配置或綁定集羣,主動選擇配置重新加載時機,當 SDK 端接收到最新配置,會使用異步任務進行老連接池的關閉並替換現有連接池,做到讀寫流量的平滑遷移, 大大降低了相關數據治理能力平滑遷移至雲上環境的難度。

在愛奇藝的規劃中,未來規劃通過接入 Database Mesh 並引入 Pisanix-Proxy,進一步將數據治理能力從 SDK 下沉到 Sidecar 中。

在流量入口層,隨着雲原生應用微服務化、Serverless 化,用戶需要面對複雜路由規則可配置、支持多種應用層協議、服務訪問的安全性以及流量的可觀測性等訴求。關於這部分,愛奇藝最早是通過中間件統一管理 Redis 和 MySQL。


除此以外,爲了更好支持愛奇藝的混合雲部署方案,SmartJedis 支持了統一配置中心,在統一的配置中心中動態支持不同環境下的配置,在非網格環境中使用直連的方式,在網格環境中使用 Envoy 中的 RedisProxy 管理 Redis 協議流量並支持連接配置的熱更新,避免了 Redis 上雲後需要業務重新發版的問題。

在 MySQL 部分,愛奇藝研發團隊測試了 Database Mesh 的具體實踐--Pisanix。Pisanix 由 Go 及 Rust 編寫,適配 Kubernetes 環境,目前已支持 MySQL 協議。其主要包括 Pisa-Controller、Pisa-Proxy 和 Pisa-Daemon 三個組件,爲用戶應用提供『本地即數據庫』的訪問體驗,實現支持多協議的可插拔架構、屏蔽真實數據源狀態,爲數據運維人員提供統一的數據庫流量管控能力。

目前愛奇藝在系統仍然是基於 ShardingSphere-JDBC 來支持 Java 應用,未來 Pisanix 在愛奇藝的系統中得到進一步落地後,愛奇藝將通過 Pisanix 實現標準化的數據庫自動維護體驗,並通過支撐多語言應用來完成多種數據庫治理行爲的雲原生編排。另外借助各種 Database Mesh 的標準 CustomResourceDefinition,比如統一的數據庫接入聲明配置、可編程的數據庫訪問資源限制等,愛奇藝也將能夠快速實現雲原生數據庫的治理編排。

01 數據分片,在雲端提供接近 ShardingSphere-JDBC 的性能

數據分片是應對海量數據存儲與計算的有效手段,這也是愛奇藝在雲原生非 Java 語言場景中傾向於 Pisanix 的動機之一。在數據分片的全部環節中,主要包含了 SQL 解析、SQL 改寫、SQL 路由、結果歸併這 4 個重要模塊。

其中,爲配合將 ShardingSphere 本地強大的分片能力遷移至雲端,Pisanix 基於底層數據庫在雲端提供了數據分片的治理能力,用戶可以通過 Pisanix 實現水平擴展計算。同時開放更多自定義指標,爲 Pisa-Proxy 實現更智能、更穩定的高級自動擴容能力。

基於 Pisa-Controller 控制面,愛奇藝能夠實現對數據面組件的管控,配合 Pisa-Proxy,以 Sidecar 方式與業務應用部署在同一個 Pod 中,用以監聽 MySQL 協議獲取應用訪問數據庫的流量。在此基礎上,Pisanix 還爲愛奇藝提供了多種治理能力:
    • SQL 流量治理:通過解析 SQL,實現多種負載均衡策略、限流等;

    • 訪問控制:根據用戶和數據權限關係,實現細粒度的權限控制;

    • SQL 防火牆:阻止高危 SQL 語句執行;

    • 可觀測性:暴露各種數據庫訪問指標:如吞吐、延時等。


對於愛奇藝而言,基於 Pisanix 實現 Java 業務和非 Java 業務都能夠在雲環境下的高性能分片,將確保更多業務未來能夠在 Pisanix 的支持下順暢運轉。

2、讀寫分離,有效提升數據庫吞吐量

爲了達到提升系統吞吐量以及可用性等需求,許多系統往往會採用主從數據庫架構的配置模式,但是這種主從模式也爲業務的使用帶來了一定的複雜性。因此,在讀請求明顯高於寫請求的情況下,需要在此基礎上使用讀寫分離來突破數據庫在實際應用場景中性能瓶頸問題。

作爲業界在主從場景下提升數據庫吞吐量最常用的技術方案之一,讀寫分離能夠達到在實際場景中提高查詢性能、降低服務器負載的目的。不過讀寫分離也帶來了與數據分片同樣的問題,它同樣會使得應用開發以及運維人員對數據庫的操作變得更加複雜。

目前愛奇藝通過一主多從的配置方式,將查詢請求均勻分散到多個數據副本,進而提升系統的處理能力。這種方式不但能夠提升系統的吞吐量,還能夠有效提升系統可用性,進而達到在任何一個數據庫宕機、甚至磁盤物理損壞的情況下仍然不影響系統的正常運行的目標。

在規劃過程中,愛奇藝計劃使用 Pisanix 的動態感知讀寫分離功能來管理多主多從的數據庫集羣。在接入 Pisanix 後,愛奇藝將可以利用讀寫分離功能管理主從數據庫,實現透明化的讀寫分離功能,讓用戶像使用一個單體數據庫一樣使用主從架構的數據庫。

目前,愛奇藝內部對 ShardingSphere-JDBC 的改造已經基本完成,未來也將計劃應用 Pisanix 配合 ShardingSphere 的能力,在愛奇藝內部實現對 MySQL 的統一治理。在 ShardingSphere 社區和 Database Mesh 社區的大力推動下,Pisanix 也將結合用戶使用場景不斷打磨雲上解決方案,爲愛奇藝的業務部門提供可靠的技術支撐,加速雲上業務拓展。

不過,畢竟 Pisanix 是一個非常年輕的項目,因此在實際應用中還是存在一些不足。在愛奇藝的測試應用過程中,目前 Pisanix 對於分庫分表的表達式支持程度有限,對於 SQL 的特殊配置程度有待進一步提升。此外如 Pisanix 運行狀況的可視化、metrics、熔斷降級策略、trace 等與線上性能相關的能力將會是社區接下來的發展重點。SQL 審計、Pisa-Controller 與 Istio 合併等兼容性及性能問題,也已經被社區所注意到並提上了日程。

未來愛奇藝將基於 ShardingSphere-JDBC 以及 Database Mesh 理念正在迭代中的 Pisanix,搭建起基於 MySQL 的統一數據訪問規範和解決方案。通過統一配置中心與定製化 sidecar,愛奇藝將逐步實現數據庫訪問細節對業務開發人員完全透明,降低使用複雜度的同時增強數據庫訪問的安全性,加速構建數據庫統一配置中心,協助應用上雲。

----------
關於 Database Mesh 理念以及 Pisanix 的產品能力,大家可以點擊下方鏈接查看:
Database Mesh 2.0 如何在雲原生場景下提高數據庫治理性能?
面向 Database Mesh 的解決方案 Pisanix 已被正式開源
Pisanix GitHub: https://github.com/database-mesh/pisanix
也許你還想看
會員接口治理的探索與實踐
愛奇藝混合雲內網DNS實踐
愛奇藝播放技術——300ms背後的故事

 關注我們,更多精彩內容陪伴你!

本文分享自微信公衆號 - 愛奇藝技術產品團隊(iQIYI-TP)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章