◆歐志芳
(福富軟件 福建 350001)
利用分布式緩存提升CRM系統登錄效率
◆歐志芳
(福富軟件 福建 350001)
應用系統支撐總繞不開性能的問題,有時通過業(yè)務清理來降低壓力,有時通過代碼優(yōu)化來提高處理速度,更有時候通過主動的架構優(yōu)化,引入新技術來系統性地提升性能。本文通過對項目的回顧,分享利用分布式緩存來實現提升系統登陸效率的方案,總結分布式緩存應用的原則和約束,指導應用如何更好地設計來滿足性能的要求。
CRM;分布式緩存;Redis
以一個面向信息管理并以客戶服務為核心的電信系統為例,每天來自營業(yè)廳、代理商、客服等渠道人員都需要登錄到CRM系統進行客戶認證、業(yè)務辦理、資料查詢等,而且大部分都是在登錄之后無限期地使用會話,這就使得每天首次登錄系統的速度很關鍵。首次登錄的數據需要加載員工信息、權限信息等,加載的信息量大,最大可達10W記錄。老系統采用直接訪問數據庫,由于磁盤I/O數據存在瓶頸,每秒數據處理能力無法滿足性能要求,造成首次登錄較慢,影響到客戶感知。本文主要說明如何通過分布式緩存來提升首次系統登錄效率的實現方案。
由于緩存通過高效內存作為存儲介質,極大提升數據存取能力,可以有效解決大量并發(fā)的數據庫性能瓶頸,減輕數據庫的負載壓力,提升系統穩(wěn)定性;通過分布式數據緩存應用不僅可以降低系統交互環(huán)節(jié)與時間、提高事務吞吐率、有效降低系統的延時,還可以對服務資源實時擴容縮容調整,過程對應用整體無感知,保障業(yè)務連續(xù)性。
目前流行的分布式緩存有兩種,它們的優(yōu)缺點如下:
分類 方案 MemCache Redis業(yè)務保障 擴容方式 停機擴容 在線擴容單點故障 主備+手工切換(應用重連)主備+自動切換(應用重連)可擴展性 客戶端API擴展;多并發(fā)橫向擴展受限;通過redis橫向擴容存儲;通過接入機橫向擴展并發(fā)數;運維保障運維自動化 手工編譯、安裝、部署;節(jié)點管理需重新開發(fā)手工編譯、安裝、部署;節(jié)點管理需重新開發(fā)運維監(jiān)控 無提供分鐘級監(jiān)控數據接口;可快速與業(yè)務監(jiān)控系統對接;數據恢復 無 快照+流水+手工恢復
通過比對,基于Redis具備更好的業(yè)務和運維保障能力,選擇Redis作為系統改造的分布式緩存組件。分布式緩存Redis主要包含如下特性:
(1)功能特性
①具備NoSQL數據庫功能,且支持list、map集合對象。
②具備故障自動切換功能,在主庫發(fā)生故障時及時切換到備庫。
③具備數據備份、運維監(jiān)控管理等配套管理功能。
(2)關鍵性能指標(4路8核,512GB內存,千兆網卡)
①單機性能:單實例 TPS ~ 7w/s;單機 6-10個實例 TPS ~30W/s;并發(fā)數:最大10000并發(fā)數;30-60并發(fā)下性能最優(yōu)。
②集群性能:單一數據租戶線性擴展最大支持 1000個redis進程;每個進程最佳數據大小為20G。
(1)改造前
應用首次訪問,通過數據庫查詢,并把數據庫返回的數據存儲到本地緩存,本地緩存之后,后續(xù)該數據的讀操作直接獲取本地緩存;第一次讀取的數據都是通過數據庫查詢返回,查詢量大,耗時長。
(2)改造后
提前把熱點數據上載到分布式緩存;應用首次訪問,通過分布式緩存訪問,并把返回的數據存儲到本地緩存,本地緩存之后,后續(xù)該數據的讀取操作直接獲取本地緩存;經過壓測,分布式緩存平均命中率 99.36%,單次命中的分布式緩存訪問比數據庫訪問平均耗時減少81%,大大減少數據庫的查詢壓力,提升權限登錄感知,特別是首次登錄。
(3)風險規(guī)避工具
①統一開關:調用分布式緩存設置開關,設置超時控制,出現問題情況時,能在線、快速切換回原有模式。
②上載工具:提供全量、增(批)量數據上載,可自動定時上載也可手工上載。
③定時比對:按照設定的時間全量比對分布式緩存數據與數據庫數據,并記錄不一致的數據。
④自動不一致數據補償:自動補償定時比對不一致的數據,并能自動進行補償。
⑤監(jiān)控告警:監(jiān)控閥值出現異常時,實時短信告警。
(1)分布式緩存的應用場景選擇,主要從以下三方面考慮:
方向說明 典型場景熱度為支持高并發(fā)事務的請求處理,對于訪問量大于更新量,訪問熱度特別高的場景,采用分布式緩存實現,提高應用吞吐率,降低延時。員工等配置數據的緩存。共享為了降低數據庫的負載壓力,加速應用訪問,對于數據在服務器間共享的場景,采用分布式緩存實現,最大限度地提高資源利用率。會話狀態(tài)緩存等需要共享的緩存計算涉及大量中間計算內容,需要在線實時使用的場景,先采用離線并行處理,再加載到分布式緩存,提供應用實時使用。員工權限等處理過程數據的緩存。
(2)分布式緩存的應用時需要關注事項
①關注命中率
命中率是分布式緩存應用核心,決定應用效果;具備緩存范圍配置,通過不斷增加規(guī)則直至緩存數據覆蓋所有場景。
②保障一致率
數據變更實時更新分布式緩存;定期數據比對,當分布式緩存數據不一致時,具備自動化的數據修復。
③故障可轉移
分布式緩存留有故障轉移口,當分布式緩存故障時,自動切換回保障渠道,實現不受影響業(yè)務受理;緩存調用設置超時,超過閥值的走保障渠道訪問。
④工具齊配套
全量工具,在線的實時數據上載;增量工具,異常的數據快速修復;比對工具,定期的數據比對,自動化的數據修復。
(3)使用建議
數據大?。簡螚l記錄(key+value)建議大小不超過32K;
容量大小:為保證能夠數據快速的備份、遷移及恢復,redis單實例內存大小建議設置不超過20G;
主從配置:高可用應用場景緩存建議配置1主2從,1個本地機房不同主機從節(jié)點,用于快速的故障切換,1個異地機房的從節(jié)點;
數據持久化策略:建議設置Redis增量日志備份(AOF),每天業(yè)務低谷快照備份(RDB);
數據更新:熱點數據建議通過LRU數據緩存數據淘汰方式更新。即如發(fā)現緩存無數據則通過數據庫獲取最新數據;
單機多實例:為最大化利用資源,建議每臺主機上可部署多個Redis實例,最大實例數>=CPU核數的一半;
數據分片:單租戶redis數據分片最多1000個;
內存使用:主機內存使用率最大90%;redis實例內存使用率最大90%,建議為60-70%;預留20%應對突發(fā)流量。
分布式緩存雖然已經在IT系統的方方面面廣泛應用著,但是對應用的場景、使用的原則與約束等說法不一。本文通過對分布式緩存在CRM系統的落地過程進行回顧,給出了分布式緩存Redis的落地參考方案。