當今快速發展的互聯網行業中,成本控制和效率提升是每個企業都面臨的重大挑戰。快手作為一家領先的短視頻平臺,其業務規模和用戶量級都在快速增長,這對其底層的數據庫技術提出了極高的要求。本文將深入探討快手在數據庫技術方面的降本增效實踐,以期為其他企業提供有益的參考。
一、快手的業務背景
快手的業務涵蓋了商品、社交、電商、直播、商業化等多個領域,這些業務對數據庫的性能、高可用性、穩定性和一致性等方面有著不同的需求。例如,在商品和電商領域,需要處理大量的交易數據和支付信息;在直播和社交領域,則需要保證用戶數據的實時性和互動性;而在商業化領域,廣告業務的數據量和復雜性都非常高。
面對如此多樣化的業務需求,快手的數據庫系統必須能夠靈活應對各種場景,同時保證系統的高可靠性和高性能。然而,隨著業務的快速發展,快手也面臨著一些挑戰,如機器資源利用率低、CPU利用率不到10%等問題。
二、降本技術
1. 壓縮技術降低單實例數據存儲空間
InnoDB行、列壓縮:通過壓縮表(原生)和列壓縮技術,可以顯著減少數據的存儲空間。例如,對于更新較少的數據表,使用壓縮表可以將存儲空間減少50%~60%;而對于包含大字段的數據表,列壓縮技術可以將存儲空間減少60%~70%。
LSM-Tree存儲引擎:適用于寫多讀少、延遲不敏感的場景,通過分層存儲的方式,可以將存儲空間減少約25%。但需要注意的是,LSM-Tree不支持分區表、Fulltext索引和XA事務等特性。
2. 提高讀寫性能減少集群部署分片/副本數
KSQL內核技術:通過自研的KSQL內核技術,快手能夠提高數據庫的讀寫性能。具體來說,可以通過優化內存管理、緩存策略和并發控制等方面來提升數據庫的性能。
冷熱分離技術:將業務數據劃分為熱、溫、冷三類,分別采用不同的存儲引擎和管理策略。這樣不僅可以降低數據存儲成本,還可以提高查詢效率。例如,對于產品目錄、在線交易和視頻流等高頻訪問的數據,可以采用高性能的存儲引擎;而對于舊項目、財務審計收據等低頻訪問的數據,則可以采用低成本的存儲引擎。
3. 容器化部署提升資源利用率
資源隔離與靈活調度:通過容器化部署,可以實現資源的隔離和靈活調度,從而高效利用服務器資源。例如,可以使用Kubernetes等容器編排工具來管理數據庫集群,實現自動化部署和彈性擴縮容。
自動化部署與工具集成:通過集成調度系統、巡檢系統、動態磁盤分配、DB監控度量以及DB的部署管理系統(如mysql/ksql-operator),可以進一步提升自動化水平,降低開發與運維成本。根據文檔中的數據,容器化部署可以使CPU利用率均值提升3倍,單機部署密度提升2.5倍,節省上千臺機器。
三、增效 - 自研KSQL內核
1. KSQL內核的技術特點
高壓縮存儲引擎:KSQL內核采用了高壓縮比的存儲引擎,可以有效減少數據的存儲空間。同時,通過對業務場景的精細化分類和感知負載的權重化調度,可以實現動態memory調整,進一步提升數據庫的性能。
Raft Replication:KSQL內核支持Raft Replication協議,具有單leader可寫、少數派故障不影響可用性等特點。新主一定包含最新提交的事務日志,并且自動選主,不依賴第三方組件。這樣可以保證數據的一致性和高可用性。
2. KSQL內核的優勢
RPO=0:KSQL內核通過Binlog+Raft實現全新復制機制,確保了數據的強一致性。即使在發生故障時,也能保證數據的一致性和完整性。
寫性能提升:相比半同步復制,KSQL內核的寫性能提升了2.5倍。這是因為KSQL內核采用了更高效的內存管理和并發控制算法,減少了鎖的競爭和上下文切換開銷。
自動選主:KSQL內核具備自動選主的能力,無需依賴第三方組件。這樣可以提高系統的可靠性和穩定性,減少人工干預的成本。
四、未來規劃
1. 金融數據庫與自治數據庫
資金、交易、計費:快手計劃進一步優化金融數據庫的性能和安全性,以滿足資金交易和計費等業務的需求。例如,可以引入分布式賬本技術和加密算法來保證數據的安全性和不可篡改性。
可觀測性:通過引入可觀測性平臺,快手可以實時監控數據庫的性能指標和運行狀態,及時發現和解決潛在問題。例如,可以使用Prometheus和Grafana等開源工具來構建可觀測性平臺。
2. 存算分離架構
基于日志的有算分離架構:快手計劃采用基于日志的有算分離架構,將計算層和存儲層分離開來。這樣可以提高系統的靈活性和擴展性,降低硬件成本。例如,可以使用Flink等流處理框架來處理實時數據流,而將批處理任務交給Hadoop等離線計算框架來完成。
彈性容量與自動化運維:通過引入彈性容量管理和自動化運維工具,快手可以進一步提高系統的可靠性和穩定性。例如,可以使用Kubernetes等容器編排工具來實現自動化部署和彈性擴縮容;使用Ansible等配置管理工具來實現自動化運維任務。
3. 數據可視化與智能運輸
數據可視化:快手計劃進一步優化數據可視化平臺的功能和性能,為用戶提供更加直觀和便捷的數據分析體驗。例如,可以使用ECharts等開源圖表庫來構建數據可視化界面;使用D3.js等前端框架來實現交互式數據探索功能。
智能運輸:快手計劃引入智能運輸技術來優化物流供應鏈的效率和成本控制。例如,可以使用機器學習算法來預測需求變化趨勢并制定最優的庫存策略;使用物聯網技術來實時監控貨物的位置和狀態并及時調整運輸路線。
五、總結
快手在數據庫技術方面的降本增效實踐為我們提供了許多寶貴的經驗教訓。通過采用先進的壓縮技術、提高讀寫性能、容器化部署以及自研KSQL內核等手段,快手不僅降低了成本還提高了效率。未來,隨著技術的不斷發展和業務的不斷擴展,快手將繼續優化其數據庫架構和技術棧以應對新的挑戰和機遇。希望本文的內容能夠對其他企業在數據庫技術方面的降本增效實踐提供有益的參考和啟示。