News
您的位置:
對軟件系統來說要“分秒必爭”,對用戶來說要“多快好省”。“快”的同義詞是“實時”,于是就有了“實時數據”、“實時計算”、“實時數據存儲”。實時應用場景企業經營數據實時大屏看板、金融風險實時風控、實時營銷推薦等各行各業的實時業務場景越來越豐富,實時場景中參與計算的數據量逐漸增多,實時的業務規則逐漸豐富,應用場景也已經從當初單一的流式數據計算類型發展到如今的批流一體化計算、批流接合計算等多種類型的場景。典型的業務場景有:實時查看公司經營大盤,實時核心日報,比如項目實時進展相關、經營業績相關、人員工作動態情況相關、項目實時故障相關,都有一個核心的實時看板。典型的實時計算流程性能影響點從上圖可以看出實時計算由四端組成:源端數據(業務數據、日志數據)、消息中間件、實時計算、目標端(hbase、hdfs等),其中每一端的實時處理能力,都將影響到整個實時計算的性能。通常一般的流式作業,只針對實時數據處理,使用flink計算可以完全滿足秒級的性能要求,但實時計算業務都會有一個數據加工的過程,在加工過程中會比較頻繁地訪問離線的數據,此時如果處理不好,會極大地影響到實時計算端到端的性能,主要存在以下缺陷:1)造成對離線數據庫的訪問壓力,影響離線數據庫自身的業務,直接影響到實時計算的性能;2)不同的離線數據庫差異,難以保障讀取大表數據記錄可秒級響應的能力,導致實時計算延遲,造成大量實時數據堆積的現象;3)完全讀取內存數據時,離線庫表變動的數據無法及時同步到內存,導致數據計算錯誤;4)對接多個不同介質的數據源時,數據格式不統一,無形中增加了研發成本以及實現的復雜度,在計算過程也增加了解析的復雜度,影響計算性能。綜上所述,實時計算急需提供一款端到端解決復雜實時計算場景的實時計算工具,真正地解決實時數據市場的這些難題和困境。01解困之道為提升復雜業務邏輯的實時計算性能,加強數據端到端的計算的實效性,通過設計分布式動態表來橋接,其優勢主要有:1) 實時同步不同介質的庫表數據,保障參與計算的數據完整性與正確性;2) 標準化不同介質的庫表數據和實時計算的接口,減少實時計算過程中對離線庫表的頻繁訪問,很好地保護了離線庫的穩定性;3) 通過近次內存存儲介質,分布式存儲數據,可存儲的大表數據,提升數據訪問的性能。
01
下圖介紹實現的過程:
通過動態表實現實時計算端到端的計算性能搭建一個分布式存儲動態表數據的組件,實現對多源數據庫類型的數據統一管理與存儲,同時為實時計算提供標準的數據接入方式,滿足實時任務高效的讀寫性能、支持分布式擴縮容存儲,滿足億級大表的存儲需求,提供方便簡易的sql操作支撐,可快速接入與使用分布式動態表管理組件。02關鍵技術實現構建分布式動態表存儲空間RocksDB 是單節點存儲引擎,具備良好高效的存儲性能,可滿足實時計算數據存儲與計算的秒級性能要求,利用 RocksDB 存儲引擎良好的性能,通過虛擬節點一致性哈希算法分布均衡存儲,結合簡易的SQL來高效讀寫數據,設計并實現一個能夠提供高效、穩定和可靠的持久化存儲服務的分布式動態表管理組件。分布式動態表管理組件的核心是要實現分布式存儲,通過虛擬節點的一致性哈希算法來實現數據的分布均衡存儲,均衡存儲主要解決:1)分布均勻,即每個存儲節點上的數據量盡可能相近;2)負載均衡,即每個存儲節點上的請求量盡可能相近;3)擴縮容時產生的數據遷移盡可能少。虛擬節點的一致性哈希算法的意義在于:當增加或者刪除節點時,只影響變動節點臨近的一個或兩個節點,哈希表的其他部分保持不變,某種程度上可以理解為:一致性哈希的哈希函數與節點數無關。虛擬節點主要將整個哈??臻g抽象成為一個虛擬圓環,假設哈希函數的值空間為 0 ? (2^32 ? 1),即 32 位無符號整數,此值可以根據實際部署規模調整,默認為:1024(虛擬節點總數M)。高效導入分布式動態表數據分布式動態表管理組件是一種高效的緩存,具備內存數據庫、響應快的特點,支持數據的持久化,將內存中的數據保存在磁盤中,其速度遠超數據庫,性能極高,能讀的速度可達110000次/s,寫的速度可達81000次/s。數據讀取時從內存中獲取庫表的元數據信息,包括主鍵、索引、屬性如連接等信息,然后通過Reader插件連接數據源讀取解析相應的數據,緩存存儲格式如下:實時更新分布式動態表數據針對源端庫表中發生的INSERT(新增數據)、UPDATE(更新數據)、DELETE(刪除數據)操作時,實時同步數據到分布式動態表中,以保障數據的即時性:如上實現對離線庫表數據的實時拉取與同步的流程,實現的步驟:1) 離線數據開始推送INSERT、UPDATE、DELETE的更新Log數據;2) RealDataParser接收到的log數據,根據日志類型調用相應的日志解析器,通過log parser進行協議解析,補充一些特定信息,補充字段名字、字段類型、主鍵信息、索引信息等,解析完成后數據通過庫表與主鍵的hash等略分發到相應的RealDataSink模塊;3) RealDataSink實現數據的數據存儲,是一個事務性的阻塞操作,直到存儲成功。實現流數據與動態表的計算Flink是最適合的低時延的數據處理(Data Processing),且具備高并發處理數據,兼具可靠性等特性,利用Flink的能力接合高效動態分布式表,實現復雜的實時計算場景,主要通過下面的步驟實現流數據與動態表的計算,解決復雜業務邏輯的實時計算秒級要求。步驟1:利用flink sql的現有能力,可直接讀取動態表的數據,上圖第1步列出的3條sql語句分別代表關聯計算、聚合計算、取值等;步驟2:同樣利用flink的現有能力,對動態表(virtual table)的數據(virtual data)與流表(flow table)的數(flow data)據進行各種類型的計算,如關聯(join)、聚合(Aggregate)、取值(GetOneRecord)等計算;步驟3:按需加載動態表的數據,解析sql,拆分出動態表部分的sql,可以轉換api形式如hmget(key*、f1、f2),然后預判取數的形式(單條數據、多條固定數據量的記錄、關聯查詢的記錄等)計算將要生成的取數記錄數來切分取數的任務,將取數據的語句的任務切分成多個小的子任務,并發執行。03成效充分利用當前優秀的開源技術的組合,通過優化修改開源組件,在適當的環節巧妙利用技術分步分層加載大表數據,按需加載大表數據,有效將大表按需拆分解成小表,同時利用內存的高效特性,提供大表存儲數據組件,標準化多源庫表數據的結構,提升了實時計算的性能,有效地解決實時業務對存量大表的計算性能問題;利用批量與推送協議的方式同步源端的數據,消除對源端庫表造成訪問的壓力,可以滿足大部分實時流與離線數據結合計算的業務場景要求,拓寬了實時計算能支持的業務范圍,很好地解決了實時計算結合外部數據源大表下的復雜業務邏輯的實時計算要求。例如業務場景:客戶辦理業務時過程中實時判斷當前客戶是否欠費。客戶在辦理業務時,都想有一個好的體驗效果,因此要求業務辦理的各環節都需要快速響應,所以對客戶是否欠費的判斷需要在秒級內響應,考慮可以處理千萬級別的客戶數,技術組件采用ES來存儲客戶數據,ES可以滿足大并發大數據量下數據的秒級查詢性能要求;客戶的實時消費的變更數據存儲在Oracle數據庫中,此部分數據會實時增量同步到kafka,再經過實時計算后更新ES中的客戶狀態數據,實時計算實現邏輯如下:1) 根據客戶編碼讀取Oracle庫表的客戶當前費用信息;2) 計算的結果是否大于0來判斷是否欠費;3) 并將結果信息更新到Oracle與ES中。針對以上計算場景,實現步驟如下:1)創建分布式動態表客戶信息表;2)初始化加載分布式動態表客戶信息表(億級);3)配置源表與分布式動態表的實時數據同步任務;4)通過sql實現實時業務邏輯開發:Select 客戶名稱、證件有效期、當前費用、是否欠費......from rdm_xxtel.custinfo(動態表中的客戶信息表) where 客戶編碼=?5)接合流數據接入與上述的4)的動態表數據進行計算判斷:計算:費用=客戶.當前費用-流.消費費用如果:費用小于0表示客戶當前欠費,更新結果到ES與Oracle表中;說明:此案例用到動態表中的數據參與實時計算過程,如上面4、5步,均需要根據存量系統的客戶信息表來判斷業務邏輯。在沒有使用動態表前,并發任務增加多時會實時讀取Oracle的中數據,并創建過多的Oracle的連接數,會對Oracle正常的業務受理造成不少的壓力,同時無法完成秒級計算的同步數據到ES的能力。使用動態表后,將原來需要并發多實時任務對Oracle的數據庫表,全部轉移到讀到動態表的數據,不管多少任務對Oracle的連接都保持1個,極大的減少讀寫Oracle的壓力,保障了業務系統正常運行;由于數據采用近內存的存儲與計算,流計算與離線計算接合計算時可達到了秒級計算的效果,滿足了業務的實時性要求,極大的提升了實時計算的能力。
02
03
浩鯨云計算科技股份有限公司 版權所有 2003-2023
蘇ICP備10224443號-6 蘇公網安備 32011402011374號