日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
系統(tǒng)性能提升優(yōu)先法寶|緩存應(yīng)用實踐

緩存是系統(tǒng)性能提升優(yōu)先法寶,在互聯(lián)網(wǎng)應(yīng)用系統(tǒng)中,屢試不爽。網(wǎng)上有很多資料介紹緩存理論及使用策略,本文就不再涉及了,今天簡單將緩存做個歸類,重點分享以前在實際業(yè)務(wù)中碰到場景以及如何使用。

我們提供的服務(wù)有:網(wǎng)站建設(shè)、成都做網(wǎng)站、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、新津縣ssl等。為上千多家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的新津縣網(wǎng)站制作公司

接下來主要分兩部分介紹:緩存分類與應(yīng)用實踐案例。

緩存分類

緩存一般有以下幾類:客戶端、瀏覽器、CDN緩存、NGINX緩存、應(yīng)用緩存及統(tǒng)一緩存(如redis)。

緩存分類:用戶->數(shù)據(jù)層

  • 客戶端緩存:很少使用,一般都是傳統(tǒng)企業(yè)才會使用。把不變化或很長時間才變化的數(shù)據(jù)按一定格式存儲在客戶端的本地文件中,使用時通過js讀取解析使用,延用了C/S結(jié)構(gòu)的方式,適合數(shù)據(jù)量很大業(yè)務(wù)且技術(shù)有所不足的開發(fā)。
  • 瀏覽器緩存:這種形式使用很廣泛,極大地提升了用戶體驗,但有時會出現(xiàn)沒及時更新導(dǎo)致顯示“錯誤”的信息。把已經(jīng)請求過的Web資源(如html頁面,圖片,js,css等)拷貝一份副本儲存在瀏覽器中,緩存會根據(jù)進(jìn)來的請求保存輸出內(nèi)容的副本。這種緩存帶來的好處有三點:減少網(wǎng)絡(luò)帶寬消耗,降低服務(wù)器壓力,減少網(wǎng)絡(luò)延遲、加快頁面打開速度,適合請求量大、靜態(tài)的數(shù)據(jù)請求。
  • CDN緩存:在用戶和服務(wù)器之間增加cache層,把數(shù)據(jù)存放到內(nèi)容分發(fā)網(wǎng)絡(luò)機(jī)房服務(wù)器中,用戶請求進(jìn)從最近的CDN節(jié)點獲取。主要緩存圖片、js及css文件,CDN需要付費,有些規(guī)模的網(wǎng)站才會使用。
  • NGINX緩存:對客戶已經(jīng)訪問過的內(nèi)容在Nginx服務(wù)器本地建立副本,達(dá)到減少Nginx服務(wù)器與后端服務(wù)器之間的網(wǎng)絡(luò)流量。
  • 應(yīng)用緩存:在后端應(yīng)用中使用緩存,如java常使用Ehcache及gauva緩存組件進(jìn)行數(shù)據(jù)緩存,也可以針對特殊場景在請求中進(jìn)行線程緩存。適合調(diào)用量大且應(yīng)用內(nèi)部方法間調(diào)用,減少網(wǎng)絡(luò)消耗。
  • 統(tǒng)一緩存:使用內(nèi)存減少對數(shù)據(jù)庫的直接訪問,提高網(wǎng)站性能,如使用memcache或redis搭建緩存服務(wù)。

前四類都是在網(wǎng)絡(luò)傳輸中進(jìn)行數(shù)據(jù)緩存,一般研發(fā)很少會去使用,后兩類在應(yīng)用中緩存,在開發(fā)中經(jīng)常使用,接下來介紹后兩類緩存的實踐案例。

實踐案例

1. 熱點key

場景:在大促期間,給所有活動頁及頻道頁提供側(cè)滑html片段數(shù)據(jù),會有修改。

特點:數(shù)據(jù)記錄少,調(diào)用量比較大(峰值400萬/分鐘)。

在接到需求時,***反應(yīng)是使用redis進(jìn)行緩存,數(shù)據(jù)更新時刪除redis緩存。讀取時先讀取redis,緩存為空,讀取DB并存放redis。

該場景是使用redis當(dāng)緩存使用,存在一定風(fēng)險:由于數(shù)據(jù)量少并發(fā)高時,成為熱點key會集中***單個redis實例,流量上去后,性能會變差,甚至可能拖垮實例。

進(jìn)一步改進(jìn)本地JVM緩存,加redis緩存,JVM緩存一分種失效,回源redis及數(shù)據(jù)庫。存在集中穿透緩存回源數(shù)據(jù)庫,拖垮應(yīng)用或數(shù)據(jù)庫的情況,之前有過緩存失效,集中回源數(shù)據(jù)庫的經(jīng)歷,結(jié)果應(yīng)用服務(wù)一臺臺全部倒下,數(shù)據(jù)庫沒有壓力。事后分析,數(shù)據(jù)庫配置***連接數(shù)為10,外部請求超時時間為500ms,不斷有新請求進(jìn)來,大量請求在等待連接。***選擇在JVM使用ConcurrentMap存放當(dāng)DB使用,1分鐘異步刷新數(shù)據(jù)。

在大促當(dāng)天,頁面該請求返回性能不太理想,數(shù)據(jù)返回大概73KB,使用Nginx增加gzip壓縮后,數(shù)據(jù)壓縮到13KB,性能提高不少。后續(xù)在Nginx增加代理緩存,性能穩(wěn)定。

2. 類目中心設(shè)計

類目是電商領(lǐng)域最基礎(chǔ)的數(shù)據(jù),使用依賴的系統(tǒng)很多,早期是各個系統(tǒng)直接從數(shù)據(jù)庫讀取并自行緩存使用,人為給數(shù)據(jù)庫增壓。為了避免該情況,著手搭建類目中心,對性能及穩(wěn)定要求***,類目中心服務(wù)異常不能影響使用方,類目更新后要及時同步給使用方。

經(jīng)過多次討論,確認(rèn)使用三級緩存:客戶端緩存、類目系統(tǒng)jvm緩存及統(tǒng)一redis緩存。

(1) 類目中心--讀

  • 客戶端緩存:在對外提供的api依賴包中進(jìn)行緩存封裝,通過調(diào)用類目系統(tǒng)接口提供緩存后的服務(wù)方法。緩存數(shù)據(jù)記錄失效時間,調(diào)用時發(fā)現(xiàn)緩存數(shù)據(jù)已失效時,更新失效時間并返回,異步請求類目中心數(shù)據(jù)刷新。若緩存沒有***,回源請求類目中心??蛻舳藭〞r檢測類目版本信息,若版本更新變化,客戶端數(shù)據(jù)強(qiáng)制更新。
  • 類目系統(tǒng)jvm緩存:使用jvm緩存,若有過期異步回源,統(tǒng)一緩存redis,穿透直接回源redis。
  • 統(tǒng)一緩存redis:當(dāng)DB使用,不回源數(shù)據(jù)庫,并定時從數(shù)據(jù)庫把數(shù)據(jù)刷新至redis中。為了避免并發(fā)刷新,使用redis實現(xiàn)排它鎖,保證只一個任務(wù)刷新。

數(shù)據(jù)更新請求,有一定的規(guī)則:

  • 更新數(shù)據(jù)庫,保證數(shù)據(jù)庫是正確數(shù)據(jù),后續(xù)步驟異常也可通過定時全量更新彌補(bǔ);
  • 更新redis緩存;
  • 更新類目中心所有實例JVM緩存:由于系統(tǒng)是多實例集群,需要通知所有實例更新JVM緩存;
  • 更新版本號,用于客戶端查驗強(qiáng)制更新標(biāo)識。一定需要JVM更新完成之后,否則客戶端可能獲取到更新前的“錯誤”數(shù)據(jù)。

(2) 類目中心--更新

客戶端95%的請求被客戶端緩存***,調(diào)用次數(shù)3700萬/分鐘,性能TP999為1ms。

(3) 客戶端調(diào)用次數(shù)

(4) 客戶端性能

服務(wù)端請求次數(shù)3000萬/分鐘也沒有壓力,單實例現(xiàn)實際調(diào)用次數(shù)150萬/分鐘。

(5) 服務(wù)端調(diào)用次數(shù)

***

  • 緩存不僅能當(dāng)緩存,也可以當(dāng)DB使用,避免穿透
  • 數(shù)據(jù)的更新分主動緩存及被動緩存
  • 需要解決數(shù)據(jù)的一致性及有效性

如何使用,怎么組合,緩存什么數(shù)據(jù),都需要結(jié)合業(yè)務(wù)場景,也需要一步步觀察、總結(jié)才能優(yōu)化。

【本文來自專欄作者張開濤的微信公眾號(開濤的博客),公眾號id: kaitao-1234567】

戳這里,看該作者更多好文


當(dāng)前名稱:系統(tǒng)性能提升優(yōu)先法寶|緩存應(yīng)用實踐
文章地址:http://m.5511xx.com/article/dhjhdsd.html