姬渭孟 于雪蓮
摘 要:針對(duì)運(yùn)營商IT系統(tǒng)產(chǎn)品規(guī)則校驗(yàn)復(fù)雜的情況,提出一種基于緩存的規(guī)則計(jì)算方法,通過基于緩存的實(shí)時(shí)數(shù)據(jù)存儲(chǔ)與規(guī)則計(jì)算,能夠?qū)崿F(xiàn)對(duì)于整個(gè)規(guī)則計(jì)算過程,全部基于緩存實(shí)現(xiàn),從而提高規(guī)則計(jì)算的效率。
關(guān)鍵詞:緩存;實(shí)時(shí);數(shù)據(jù);存儲(chǔ);規(guī)則;計(jì)算
1 方案提出的背景
隨著通信業(yè)務(wù)的發(fā)展,尤其是近年來流量業(yè)務(wù)的快速發(fā)展,各類產(chǎn)品不斷推出,產(chǎn)品的訂購規(guī)則也越來越復(fù)雜,如產(chǎn)品與產(chǎn)品件的互斥,產(chǎn)品對(duì)于用戶余額、入網(wǎng)時(shí)間等的規(guī)則要求。在通信運(yùn)營商層面,用戶進(jìn)行產(chǎn)品訂購時(shí),由IT系統(tǒng)進(jìn)行規(guī)則校驗(yàn)。如校驗(yàn)較慢,會(huì)降低用戶體驗(yàn),影響產(chǎn)品推廣。
目前的主流方案是基于緩存計(jì)算裝置,包括緩存單元和計(jì)算單元,計(jì)算單元通過讀取緩存單元的規(guī)則數(shù)據(jù),并完成計(jì)算。但需要進(jìn)行多次的物理磁盤讀的操作,以獲取所需要的實(shí)例數(shù)據(jù),存在數(shù)據(jù)讀取計(jì)算時(shí)間過長的問題。
本方案要解決的技術(shù)問題:通過數(shù)據(jù)的實(shí)時(shí)存儲(chǔ),將規(guī)則計(jì)算所需要的配置數(shù)據(jù)、實(shí)例數(shù)據(jù)均保存在緩存中,并提前進(jìn)行規(guī)則計(jì)算,將計(jì)算結(jié)果也保存在緩存中,這樣當(dāng)需要進(jìn)行規(guī)則計(jì)算時(shí),所有的數(shù)據(jù)均從內(nèi)存中獲取,避免了進(jìn)行磁盤的讀寫操作,從而可以大大縮短規(guī)則計(jì)算的時(shí)間。
2 具體方案介紹
本方案提出一種方案,具體組成如下,包括5個(gè)單元,單元一:數(shù)據(jù)加載單元;單元二:原始數(shù)據(jù)緩存單元;單元三:數(shù)據(jù)服務(wù)單元;單元四:數(shù)據(jù)計(jì)算單元;單元五:數(shù)據(jù)持久化單元。
單元一:數(shù)據(jù)加載單元,原始數(shù)據(jù)加載單元的主要工作有兩項(xiàng),一是在首次啟動(dòng)時(shí),會(huì)進(jìn)行數(shù)據(jù)初始化工作,從BSS系統(tǒng)的物理數(shù)據(jù)庫,提取當(dāng)前時(shí)刻全量的產(chǎn)品配置數(shù)據(jù)和“活躍用戶”訂購實(shí)例數(shù)據(jù),通過數(shù)據(jù)加載功能,全量加載到單元二中,key-value方式后保存到緩存。二是對(duì)于實(shí)時(shí)的增加變化數(shù)據(jù),提供兩種適配器,消息適配器和文件適配器,當(dāng)業(yè)務(wù)系統(tǒng)用戶數(shù)據(jù)發(fā)生變更時(shí),如用戶進(jìn)行了產(chǎn)品訂購,則業(yè)務(wù)系統(tǒng)可以通過消息或文件的方式,與數(shù)據(jù)加載單元的對(duì)應(yīng)適配器進(jìn)對(duì)接,將增量變化數(shù)據(jù)同步到數(shù)據(jù)加載單元,由數(shù)據(jù)加載單元將變更
單元二:原始數(shù)據(jù)存儲(chǔ)單元,主要為數(shù)據(jù)存儲(chǔ)功能,以key-value方式將數(shù)據(jù)保存在緩存中。數(shù)據(jù)主要分為兩類,一類是用戶實(shí)例數(shù)據(jù),一類是配置數(shù)據(jù)。實(shí)現(xiàn)將靜態(tài)數(shù)據(jù)緩存到共享內(nèi)存中,利用共享內(nèi)存實(shí)現(xiàn)數(shù)據(jù)的快速計(jì)算及讀取,同時(shí)采用RBTREE排序方法實(shí)現(xiàn)對(duì)數(shù)據(jù)的快速查找。
其中用戶實(shí)例數(shù)據(jù)緩存通過LRU(最近最少使用算法)及MRU(最近最長使用算法)實(shí)現(xiàn)緩存數(shù)據(jù)替換,如果緩存結(jié)果達(dá)到系統(tǒng)配置的內(nèi)存值,將提供一定的策略將最近最不常被查詢到的數(shù)據(jù)替換出去,而將最近最常被使用的數(shù)據(jù)保持在緩存中。
單元三:數(shù)據(jù)服務(wù)單元,主要是對(duì)外提供緩存的計(jì)算和查詢服務(wù),同時(shí)具有服務(wù)管理功能,能夠?qū)Ψ?wù)進(jìn)行注冊和管理,并記錄服務(wù)調(diào)用信息,并對(duì)服務(wù)調(diào)用的頻次、渠道等進(jìn)行管理和控制。
單元四:數(shù)據(jù)計(jì)算單元,當(dāng)熱點(diǎn)用戶生成或新增熱點(diǎn)數(shù)據(jù)后,會(huì)調(diào)用數(shù)據(jù)計(jì)算單元的數(shù)據(jù)計(jì)算模塊,完成規(guī)則的計(jì)算,并將計(jì)算結(jié)果保存在共享緩存中。
當(dāng)有服務(wù)通過數(shù)據(jù)服務(wù)單元提供的數(shù)據(jù)校驗(yàn)服務(wù)要求進(jìn)行規(guī)則校驗(yàn)時(shí),根據(jù)服務(wù)入?yún)⑻峁┑牟僮鲉TID,用戶ID,先到單元二中,將操作員ID+用戶ID作為Key值,獲取包括用戶訂購實(shí)例的Value值,與用戶的當(dāng)前訂購實(shí)例進(jìn)行比對(duì)。
1)如果比對(duì)結(jié)果一致,標(biāo)識(shí)該用戶未做過其它業(yè)務(wù)操作,可以直接將規(guī)則計(jì)算結(jié)果返回
2)如果比對(duì)結(jié)果不一致,或沒有記錄,則通過單元一,重新將此用戶數(shù)據(jù)作為“熱點(diǎn)數(shù)據(jù)”進(jìn)行加載到共享緩存,并調(diào)用數(shù)據(jù)計(jì)算模塊,快速進(jìn)行規(guī)則計(jì)算,并將計(jì)算結(jié)果更新到共享緩存中。
進(jìn)程管理模塊,可以依據(jù)規(guī)則計(jì)算類型,將進(jìn)程進(jìn)行分組,如產(chǎn)品互斥規(guī)則計(jì)算為單獨(dú)一組進(jìn)程,產(chǎn)品依賴規(guī)則計(jì)算為另外一組進(jìn)程,這樣當(dāng)有多個(gè)產(chǎn)品規(guī)則計(jì)算時(shí),可以進(jìn)行多進(jìn)程并行計(jì)算,從而提高計(jì)算速度。
單元五:數(shù)據(jù)持久化單元,主要采用文件或數(shù)據(jù)庫的方式,將共享緩存中心數(shù)據(jù)同步至磁盤,實(shí)現(xiàn)數(shù)據(jù)持久化。這樣做的好處時(shí)當(dāng)單元二發(fā)生故障,重新啟動(dòng)時(shí),共享緩存中的數(shù)據(jù)會(huì)全部丟失,可以從數(shù)據(jù)持久化單元中快速恢復(fù)。而不再需要重新通過單元一進(jìn)行數(shù)據(jù)的全量抽取和加載,提高了共享緩存數(shù)據(jù)恢復(fù)速度。
4 結(jié)束語
本方案的技術(shù)優(yōu)點(diǎn):一是通過建立“活躍用戶”的模型,降低了緩存中的數(shù)據(jù)量。二是將用戶訂購實(shí)例數(shù)據(jù)放入緩存,解決了規(guī)則計(jì)算涉及用戶實(shí)例數(shù)據(jù)時(shí),與物理數(shù)據(jù)庫頻繁交互造成計(jì)算效率明顯下降的問題。三是通過緩存與用戶實(shí)例的對(duì)比,實(shí)現(xiàn)了緩存數(shù)據(jù)的強(qiáng)一致性,保證緩存規(guī)則計(jì)算的正確性。4四是通過將緩存計(jì)算結(jié)果保存,避免了每次規(guī)則計(jì)算都要重新計(jì)算的問題,有效提高計(jì)算效率。
本方案基于緩存平臺(tái),實(shí)現(xiàn)了用戶實(shí)例等實(shí)時(shí)變化類數(shù)據(jù)的實(shí)時(shí)的存儲(chǔ)和計(jì)算,大大提升了規(guī)則計(jì)算的效率。