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