王小錦
【摘要】 本文闡述了業(yè)務(wù)發(fā)展帶來的業(yè)務(wù)支撐系統(tǒng)的瓶頸,分析了緩存平臺(tái)技術(shù),從而提出緩存平臺(tái)技術(shù)在業(yè)務(wù)支撐系統(tǒng)的應(yīng)用。
【關(guān)鍵詞】 緩存平臺(tái) 業(yè)務(wù)支撐系統(tǒng) API 應(yīng)用程序接口(Application Program Interface) 全表加載 懶加載
一、 引言
隨著業(yè)務(wù)的快速發(fā)展,線上線下多受理渠道的增加,以及CRM側(cè)超級(jí)限制、積分、代理商資金歸集、騰訊視頻等一些特色項(xiàng)目及各種外圍接口的實(shí)施,導(dǎo)致訂單及查詢服務(wù)效率的下降。究其根本,瓶頸還是在業(yè)務(wù)數(shù)據(jù)庫的處理性能上。
省分業(yè)務(wù)數(shù)據(jù)庫部署在AIX小型機(jī)上,硬件投入成本非常高。數(shù)據(jù)庫主機(jī)CPU使用率又逐漸增高,業(yè)務(wù)高峰期甚至高達(dá)95%多,對(duì)前臺(tái)業(yè)務(wù)受理的效率影響顯著,特別是對(duì)用戶新裝、繳費(fèi)、停開機(jī)、產(chǎn)品變更等重要業(yè)務(wù)沖擊很大,既直接導(dǎo)致了用戶受理體驗(yàn)的下降,也增加了業(yè)務(wù)系統(tǒng)的內(nèi)在隱患。
因此,迫切需要找到一種切實(shí)可行的優(yōu)化方式,以大幅提高整體系統(tǒng)的處理性能。
二、緩存平臺(tái)技術(shù)
2.1 統(tǒng)一存儲(chǔ)代替分散存儲(chǔ)
定制數(shù)據(jù)存儲(chǔ)的格式與規(guī)則。將主機(jī)上運(yùn)行的各個(gè)進(jìn)程私有內(nèi)存中的數(shù)據(jù)統(tǒng)一存儲(chǔ)在緩存平臺(tái)中。平臺(tái)對(duì)外提供統(tǒng)一的訪問API。一方面,確保了數(shù)據(jù)的唯一性和一致性;另一方面,也降低了主機(jī)內(nèi)存的損耗。
2.2 懶加載代替全表加載
定制數(shù)據(jù)存儲(chǔ)的流程。將系統(tǒng)運(yùn)行中全表加載數(shù)據(jù)的機(jī)制改為按需懶加載機(jī)制。懶加載可以提升系統(tǒng)運(yùn)行效率,同時(shí)也能增強(qiáng)客戶體驗(yàn)。
2.3 數(shù)據(jù)生命周期管理
平臺(tái)存儲(chǔ)了各種各樣的數(shù)據(jù),不同的數(shù)據(jù)可以定制各自的生命周期。數(shù)據(jù)的生命周期內(nèi),業(yè)務(wù)系統(tǒng)從緩存平臺(tái)讀取數(shù)據(jù);數(shù)據(jù)生命周期結(jié)束后,平臺(tái)存儲(chǔ)的數(shù)據(jù)立刻失效,然后平臺(tái)繼續(xù)按需懶加載數(shù)據(jù)。
2.4 高效的數(shù)據(jù)查找算法
緩存平臺(tái)多處采用一些著名的算法,比如:hash算法、skip list算法、sha1算法等等。通過這些算法,一方面提高了程序運(yùn)行效率,另一方面提高了程序的可靠性。
2.5 多機(jī)容災(zāi)機(jī)制
緩存平臺(tái)提供應(yīng)用調(diào)用的API,內(nèi)置容錯(cuò)機(jī)制,智能檢測(cè)緩存平臺(tái)狀態(tài)。當(dāng)發(fā)現(xiàn)平臺(tái)不可用時(shí),可以智能跳轉(zhuǎn)至備用平臺(tái)。網(wǎng)絡(luò)內(nèi)可以部署多個(gè)平臺(tái),互為主備。一臺(tái)主機(jī)可以同時(shí)支持多臺(tái)備機(jī)。
正常情況下,中間件A連接緩存平臺(tái)A,當(dāng)緩存平臺(tái)A不可用用時(shí),自動(dòng)連接緩存平臺(tái)B…
正常情況下,中間件B連接緩存平臺(tái)B,當(dāng)緩存平臺(tái)B不可用用時(shí),自動(dòng)連接緩存平臺(tái)A…
緩存平臺(tái)切換為平滑切換,對(duì)應(yīng)用透明。不影響業(yè)務(wù)受理。
2.6 總述
緩存平臺(tái)能夠?qū)崿F(xiàn)優(yōu)化現(xiàn)有系統(tǒng)架構(gòu),降低數(shù)據(jù)庫壓力,提升查詢速度。在原有網(wǎng)絡(luò)中添加緩存平臺(tái),數(shù)據(jù)的流向由舊架構(gòu)中每次都從數(shù)據(jù)庫進(jìn)行查詢,修改為新架中每次都從緩存平臺(tái)進(jìn)行查詢,平臺(tái)中的數(shù)據(jù)采用懶加載策略,需要時(shí)才從數(shù)據(jù)庫獲取,并且在數(shù)據(jù)的生命周期內(nèi),僅從數(shù)據(jù)庫獲取一次數(shù)據(jù)。
三、業(yè)務(wù)支撐系統(tǒng)架構(gòu)存在的問題
當(dāng)前的IT業(yè)務(wù)支撐系統(tǒng)自2009年實(shí)施上線,一直運(yùn)行至今。系統(tǒng)架構(gòu)采用傳統(tǒng)的四層架構(gòu):展示層、接入層、業(yè)務(wù)邏輯層、數(shù)據(jù)層。傳統(tǒng)的技術(shù)架構(gòu),隨著用戶數(shù)增長,業(yè)務(wù)發(fā)展,其對(duì)后端數(shù)據(jù)庫的壓力也逐漸增大。數(shù)據(jù)庫性能瓶頸日益明顯。
前端,業(yè)務(wù)系統(tǒng)受理效率下降,影響客戶體驗(yàn);在業(yè)務(wù)高峰期數(shù)據(jù)庫CPU使用率又上升到90%。數(shù)據(jù)庫硬件擴(kuò)容難度大,存在天花板。
四、緩存平臺(tái)技術(shù)在業(yè)務(wù)支撐系統(tǒng)的應(yīng)用
現(xiàn)有業(yè)務(wù)支撐系統(tǒng)的技術(shù)架構(gòu)是四層:展示層、接入層、業(yè)務(wù)邏輯層、數(shù)據(jù)層,緩存平臺(tái)技術(shù)是在業(yè)務(wù)邏輯層與數(shù)據(jù)層之間,部署緩存平臺(tái)及基于平臺(tái)研發(fā)的通用數(shù)據(jù)管理產(chǎn)品。
4.1緩存平臺(tái)的功能架構(gòu)
整個(gè)系統(tǒng)架構(gòu)分為三個(gè)部分:平臺(tái)核心層。在這里規(guī)范業(yè)務(wù)數(shù)據(jù)的標(biāo)準(zhǔn)存取操作流程、數(shù)據(jù)的生命周期管理,以及操作流程中的策略管理與配置管理等等。平臺(tái)接口層。在這里與現(xiàn)有的BOSS側(cè)業(yè)務(wù)層對(duì)接,提供相關(guān)的操作接口。BOSS業(yè)務(wù)層。在這里對(duì)現(xiàn)有的BOSS側(cè)業(yè)務(wù)層邏輯進(jìn)行代碼改造,以便對(duì)接緩存平臺(tái)。
1、平臺(tái)核心層。主要包含12個(gè)功能模塊,內(nèi)容概述如下:
1)內(nèi)存數(shù)據(jù)庫適配器:內(nèi)存數(shù)據(jù)庫適配器包含兩個(gè)功能。對(duì)主流內(nèi)存數(shù)據(jù)庫(altibase/redis/memcached/…)進(jìn)行調(diào)用接口適配;對(duì)不同廠商的小機(jī)環(huán)境進(jìn)行適配,目前支持AIX/ hp-ux等。
2)數(shù)據(jù)生命周期管理:對(duì)內(nèi)存數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行生命周期管理,支持通過配置來定義不同類型的數(shù)據(jù)的不同的生命周期。相同數(shù)據(jù)在生效期內(nèi),不再重復(fù)從數(shù)據(jù)源加載,數(shù)據(jù)失效后,采用懶加載策略從數(shù)據(jù)源重新加載數(shù)據(jù)。
3)關(guān)系型數(shù)據(jù)庫數(shù)據(jù)操作對(duì)象。采用oci接口封裝對(duì)關(guān)系型數(shù)據(jù)庫的操作對(duì)象。包括關(guān)系型數(shù)據(jù)庫中數(shù)據(jù)的增刪改查等等。
4)內(nèi)存型數(shù)據(jù)庫數(shù)據(jù)操作對(duì)象。封裝對(duì)內(nèi)存數(shù)據(jù)庫的操作對(duì)象。包括內(nèi)存數(shù)據(jù)庫中數(shù)據(jù)的增刪改查等等。
5)存儲(chǔ)驅(qū)動(dòng)器。根據(jù)配置來自動(dòng)加載不同的存儲(chǔ)實(shí)例,獲取存儲(chǔ)管理器,交給應(yīng)用做后續(xù)的內(nèi)存操作。
6)存儲(chǔ)管理器。定義了對(duì)存儲(chǔ)的各種操作接口及標(biāo)準(zhǔn)的操作流程。
7)元數(shù)據(jù)查詢。定義了標(biāo)準(zhǔn)的查詢流程并提供相關(guān)的API。
8)元數(shù)據(jù)存儲(chǔ)。定義了標(biāo)準(zhǔn)的存儲(chǔ)流程并提供相關(guān)的API。
9)元數(shù)據(jù)刪除。定義了標(biāo)準(zhǔn)的刪除流程并提供相關(guān)的API。
10)懶加載策略管理。實(shí)現(xiàn)對(duì)數(shù)據(jù)的懶加載策略,當(dāng)需要時(shí)才加載相關(guān)增量數(shù)據(jù),而非一次性全量加載。
11)容災(zāi)策略管理。提供應(yīng)用調(diào)用的API,內(nèi)置容錯(cuò)機(jī)制,智能檢測(cè)緩存平臺(tái)狀態(tài)。當(dāng)發(fā)現(xiàn)平臺(tái)不可用時(shí),可以智能跳轉(zhuǎn)至備用平臺(tái)。網(wǎng)絡(luò)內(nèi)可以部署多個(gè)平臺(tái),互為主備。一臺(tái)主機(jī)可以同時(shí)支持多臺(tái)備機(jī)。
12)通用配置管理。實(shí)現(xiàn)對(duì)配置的讀取與使用。
2、 平臺(tái)接口層。主要包含4個(gè)功能模塊,內(nèi)容概述如下:
1)CParam查詢接口。對(duì)系統(tǒng)中上百個(gè)KV類型數(shù)據(jù)進(jìn)行封裝,定義統(tǒng)一的查詢接口。實(shí)現(xiàn)對(duì)這些數(shù)據(jù)的加載、查詢與存儲(chǔ)等操作。
2)通用查詢接口。對(duì)所有基于對(duì)數(shù)據(jù)庫的查詢操作進(jìn)行封裝,使用標(biāo)準(zhǔn)的數(shù)據(jù)查詢流程,內(nèi)置關(guān)系型數(shù)據(jù)庫的查詢、內(nèi)存數(shù)據(jù)庫的查詢、存儲(chǔ)等操作。
3)Buffer轉(zhuǎn)換。對(duì)Tuxedo的CFml32格式的數(shù)據(jù)進(jìn)行封裝,可以快速地對(duì)其中KV數(shù)據(jù)進(jìn)行編碼名稱轉(zhuǎn)換。
4)Conv類轉(zhuǎn)換。Conv類是封裝了一系列c++類,使用這個(gè)系列類可以對(duì)一些常見的數(shù)據(jù)進(jìn)行查詢轉(zhuǎn)換。
3、BOSS業(yè)務(wù)改造內(nèi)容
BOSS業(yè)務(wù)側(cè)所有按傳統(tǒng)方式對(duì)關(guān)系型數(shù)據(jù)Oracle進(jìn)行數(shù)據(jù)操作的代碼,都采用緩存平臺(tái)提供的API進(jìn)行調(diào)用改造。BOSS業(yè)務(wù)側(cè)需改造的大小模塊將近30個(gè),包括但不局限于以下內(nèi)容:訂單模塊、費(fèi)用模塊、客戶模塊、用戶模塊、賬戶模塊、資源模塊、帳管模塊、產(chǎn)品模塊、參數(shù)模塊、聯(lián)指模塊等。
4.2緩存平臺(tái)實(shí)施后的優(yōu)化效果
系統(tǒng)運(yùn)行穩(wěn)定,效果顯著,有效降低了業(yè)務(wù)程序?qū)?shù)據(jù)庫的訪問。出賬期間,緩存平臺(tái)每天緩存命中次數(shù)最高可達(dá)2億6千多萬次,crm數(shù)據(jù)庫活動(dòng)會(huì)話數(shù)降低近一半,中間件主機(jī)內(nèi)存較實(shí)施前降低明顯,12臺(tái)業(yè)務(wù)主機(jī)共降低內(nèi)存達(dá)50.2G。
五、結(jié)束語
緩存技術(shù)很大程度上解決了BOSS系統(tǒng)的瓶頸問題,提高了整體系統(tǒng)的處理性能。實(shí)施后BOSS系統(tǒng)有以下四個(gè)方面的明顯優(yōu)化:提升數(shù)據(jù)庫性能,降低數(shù)據(jù)庫主機(jī)CPU使用率; 降低中間件主機(jī)內(nèi)存損耗;降低中間件主機(jī)CPU使用率,提高流程處理性能;降低WEB應(yīng)用服務(wù)器的瞬間CPU性能高峰。
緩存平臺(tái)的應(yīng)用提高了業(yè)務(wù)受理效率,提升了客戶體驗(yàn),降低業(yè)務(wù)數(shù)據(jù)CPU使用率,降低主機(jī)內(nèi)存損耗,節(jié)省了硬件成本。