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