大數(shù)據(jù)服務(wù)化架構(gòu)


關(guān)鍵技術(shù)一:配置即開發(fā)
平臺用戶分為兩類角色:其一是數(shù)據(jù)服務(wù)生產(chǎn)方,其二是數(shù)據(jù)服務(wù)調(diào)用方。數(shù)據(jù)服務(wù)生產(chǎn)方只需要配置,做到“配置即開發(fā)”,配置包括:1)數(shù)據(jù)源;2)數(shù)據(jù)加速到何處;3)接口形態(tài),訪問方式;4)配置獨立的測試環(huán)境,訪問隔離的測試數(shù)據(jù)。當配置完畢后,數(shù)據(jù)服務(wù)平臺便會根據(jù)配置清單,完成接口的自動化生產(chǎn)和部署。生產(chǎn)和部署完畢后,調(diào)用方在平臺申請服務(wù)權(quán)限調(diào)用。通過自動化生產(chǎn),達到配置即開發(fā)的目的,從而極大的提升效率。
關(guān)鍵技術(shù)二:多模式服務(wù)形態(tài)
數(shù)據(jù)服務(wù)有多種服務(wù)形態(tài),包括:
KV API:簡單點查,可以支撐百萬QPS、毫秒延遲。這類API是通過模板自動化創(chuàng)建出來,支持單查、批量查詢等接口,返回的結(jié)果是 Protobuf (PB) 結(jié)構(gòu)體,從而將結(jié)果自動做了 ORM,對于主調(diào)方更加友好。典型場景包括:根據(jù)IP查詢geo位置信息、根據(jù)用戶Id查詢用戶標簽畫像信息等。
SQL API:復(fù)雜靈活查詢,底層基于 OLAP/OLTP 存儲引擎。通過 Fluent API 接口,用戶可自由組合搭配一種或若干種嵌套查詢條件,可查詢?nèi)舾珊唵巫侄位蛘呔酆献侄?,可分頁或者全量取回?shù)據(jù)。典型場景包括:用戶圈選(組合若干用戶標簽篩選出一批用戶)。
Union API:融合API,可自由組合多個原子API,組合方式包括串行和并行方式。調(diào)用方不再需要調(diào)用多個原子API,而是調(diào)用融合API,通過服務(wù)端代理訪問多個子查詢,可以極大降低訪問延遲。
關(guān)鍵技術(shù)三:高效數(shù)據(jù)加速
前面提及的數(shù)據(jù)資產(chǎn),通常是存在于低速的存儲引擎中,無法支撐線上業(yè)務(wù)高訪問流量。因此需要以系統(tǒng)化的方式進行數(shù)據(jù)加速。目前有兩種加速方式:1)全量數(shù)據(jù)加速;2)多級緩存(部分數(shù)據(jù)加速)。
全量數(shù)據(jù)加速
從多個數(shù)據(jù)源攝入原始數(shù)據(jù)(如Kafka,MySQL、線上訪問日志等),進行加工建模后,得到數(shù)據(jù)資產(chǎn)。數(shù)據(jù)資產(chǎn)經(jīng)由獨立的數(shù)據(jù)同步服務(wù),同步至其他更高速的存儲引擎,如 redis、hbase、druid等。數(shù)據(jù)同步支持一次性或者周期性(小時、天、周等)將數(shù)據(jù)從Hive同步至其他存儲中,數(shù)據(jù)同步本身是基于分布式的調(diào)度系統(tǒng),內(nèi)核是基于 datax 進行數(shù)據(jù)同步。大數(shù)據(jù)服務(wù)化平臺單日同步的數(shù)據(jù)量達到1200億條,數(shù)據(jù)size達到20TB。
多級緩存
大數(shù)據(jù)服務(wù)化平臺會使用 Redis、Hbase、Druid、Clickhouse 等方式存儲所有數(shù)據(jù),但是部分存儲如Hbase速度可能較慢,針對熱點數(shù)據(jù)需要使用額外的熱點緩存來Cache數(shù)據(jù)。熱點緩存是多級緩存,針對每個API接口,用戶可自由搭配組合多級緩存、靈活設(shè)置緩存策略。此外,針對數(shù)據(jù)較大的API,還可配置數(shù)據(jù)壓縮,通過多種壓縮方式(如 ZSTD, SNAPPY, GZIP 等),可將數(shù)據(jù)量顯著減少(部分API 甚至能減少90%的數(shù)據(jù)存儲量)
關(guān)鍵技術(shù)四:高可用保障
服務(wù)可用性是微服務(wù)領(lǐng)域內(nèi)的一大核心,服務(wù)的高可用通常需要組合多種手段來保障??焓謹?shù)據(jù)服務(wù)化平臺通過多種方式來達到高可用的目的,主要包括:
彈性服務(wù)框架
資源隔離
全鏈路監(jiān)控
彈性服務(wù)框架
數(shù)據(jù)服務(wù)是部署在容器云環(huán)境,容器云是快手自研的彈性可伸縮的容器服務(wù),部署在其中的RPC服務(wù)會注冊到 KESS (快手自研服務(wù)注冊與發(fā)現(xiàn)中心),供主調(diào)方去調(diào)用,如有離群壞點,會自動摘除。服務(wù)調(diào)用是基于 RPC,全鏈路都有監(jiān)控,包括服務(wù)可用性、延遲、QPS、容器CPU、容器內(nèi)存等情況。
資源隔離
資源隔離是可用性保障的常見手段之一,通過隔離將意外故障等情況的影響面降低。不管是微服務(wù),還是存儲,我們都按照業(yè)務(wù) + 優(yōu)先級(高、中、低)粒度隔離部署,獨立保障,業(yè)務(wù)之間互不影響、業(yè)務(wù)內(nèi)不同級別也互不影響。同一業(yè)務(wù)線內(nèi)可能有多個不同數(shù)據(jù)服務(wù),通過混合部署,提高資源使用率。
全鏈路監(jiān)控
服務(wù)很難避免出現(xiàn)問題或者故障,一旦出現(xiàn)問題,及早發(fā)現(xiàn)及早介入是非常重要的。服務(wù)平臺構(gòu)建了全鏈路監(jiān)控,包括:
數(shù)據(jù)同步:對數(shù)據(jù)資產(chǎn)同步至高速存儲的過程進行監(jiān)控,包括數(shù)據(jù)質(zhì)量檢測(過濾臟數(shù)據(jù))、同步超時或者失敗檢測等
服務(wù)穩(wěn)定性:構(gòu)建一個獨立的哨兵服務(wù),來監(jiān)測每個API的運行指標(如延遲、可用性等),客觀的評估健康度
業(yè)務(wù)正確性:數(shù)據(jù)服務(wù)需要確保用戶訪問的數(shù)據(jù)內(nèi)容和數(shù)據(jù)資產(chǎn)表內(nèi)容是一致的,因此哨兵服務(wù)會從數(shù)據(jù)一致性層面去探查,確保每個API的數(shù)據(jù)一致性
總結(jié)和展望
大數(shù)據(jù)服務(wù)化平臺從2017年演化至今,已經(jīng)支持多類應(yīng)用場景,涵蓋直播、短視頻、電商、商業(yè)化等在線業(yè)務(wù),生產(chǎn)者中臺等準在線業(yè)務(wù),運營系統(tǒng)等偏內(nèi)部數(shù)據(jù)系統(tǒng)等,目前平臺在線業(yè)務(wù)總 QPS 達到 1000W,平均延遲在毫秒級;對于準在線業(yè)務(wù)和內(nèi)部數(shù)據(jù)系統(tǒng),基于CH、Druid等多種數(shù)據(jù)引擎,支持多種靈活查詢。數(shù)據(jù)服務(wù)平臺支持了多種模式API,很好滿足了多元化需求。此外數(shù)據(jù)服務(wù)平臺也支持服務(wù)權(quán)限、API市場等豐富功能,進一步賦能業(yè)務(wù)。
大數(shù)據(jù)服務(wù)化平臺未來進一步發(fā)展方向主要包括:
貼近業(yè)務(wù)需求:數(shù)據(jù)服務(wù)平臺本身是為業(yè)務(wù)服務(wù),通過賦能業(yè)務(wù)而對企業(yè)帶來價值,業(yè)務(wù)本身在不斷發(fā)展,未來也會有更多的需求出現(xiàn),因此數(shù)據(jù)服務(wù)平臺本身會不斷抽象和沉淀出公共數(shù)據(jù)服務(wù)能力。
深耕數(shù)據(jù)資產(chǎn):數(shù)據(jù)資產(chǎn)是數(shù)據(jù)服務(wù)之根本,如果沒有完善的數(shù)據(jù)資產(chǎn)建設(shè),上面就很難構(gòu)建出結(jié)構(gòu)化的統(tǒng)一的數(shù)據(jù)服務(wù),針對數(shù)據(jù)資產(chǎn)有較多內(nèi)容,包括資產(chǎn)注冊和審核、資產(chǎn)地圖、資產(chǎn)標簽、資產(chǎn)管理、資產(chǎn)開放和服務(wù)。
大數(shù)據(jù)服務(wù)平臺的能力建設(shè)會朝著統(tǒng)一的 OneService 體系前進。主要包括三個方面:
支持豐富的數(shù)據(jù)源:包括大寬表、文本文件、機器學習模型(模型也是一種數(shù)據(jù)資產(chǎn)),來構(gòu)建完善的數(shù)據(jù)服務(wù)。
支持多樣取數(shù)方式:除了支持同步快速取數(shù)之外,還支持異步查詢?nèi)?shù)、推送結(jié)果、定時任務(wù)等多樣化方式,以滿足業(yè)務(wù)多種場景需求。
建設(shè)統(tǒng)一的API網(wǎng)關(guān):集成權(quán)限管控、限流降級、流量管理等于一體,不僅平臺創(chuàng)建的服務(wù)可以注冊進API網(wǎng)關(guān),用戶自己開發(fā)的API也可注冊進API網(wǎng)關(guān),從而享受已有的基礎(chǔ)網(wǎng)關(guān)能力,為業(yè)務(wù)提供數(shù)據(jù)服務(wù)能力。
參考文章:?
統(tǒng)一數(shù)據(jù)架構(gòu)業(yè)務(wù)概念視圖

統(tǒng)一數(shù)據(jù)服務(wù)層框架(Unified Data Service Layer, UDSL)
MongoDB、HBase、Redis等NoSQL數(shù)據(jù)庫的應(yīng)用使得持久層的開發(fā)變得更為復(fù)雜,開發(fā)者需要掌握和使用不同類型的開發(fā)接口。統(tǒng)一數(shù)據(jù)服務(wù)層框架(Unified Data Service Layer, UDSL)是一個持久層框架。它統(tǒng)一了持久層開發(fā)的API,開發(fā)者通過UDSL可以使用一致的讀寫接口進行持久層的開發(fā),無需再關(guān)心數(shù)據(jù)源接口的差異。對不同類型的數(shù)據(jù)源,UDSL通過相應(yīng)的擴展模塊提供支持,比如DB模塊對應(yīng)著關(guān)系型數(shù)據(jù)庫,Text模塊則對應(yīng)著MongoDB數(shù)據(jù)庫,這種良好的模塊化設(shè)計使UDSL具備了對新數(shù)據(jù)源進行擴展能力。
Cache模塊
Cache模塊是UDSL的核心模塊之一, 它在很大程度上提升了UDSL的查詢性能。在Cache模塊中,UDSL實現(xiàn)了一個基于Redis的高性能分布式緩存,還提供了緩存規(guī)則的功能。通過制定緩存規(guī)則,應(yīng)用可以把大部分不經(jīng)常被訪問的查詢結(jié)果濾掉,以減少緩存的空間消耗。得益于面向切面的編程設(shè)計,UDSL的緩存是無侵入式的,只需要使用Java注解在被緩存的方法上進行配置即可使緩存生效,無需修改任何的業(yè)務(wù)邏輯代碼。