偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

系統(tǒng)性能提升優(yōu)先法寶 | 緩存應(yīng)用實(shí)踐

開(kāi)發(fā) 開(kāi)發(fā)工具
網(wǎng)上有很多資料介紹緩存理論及使用策略,本文就不再涉及了,今天簡(jiǎn)單將緩存做個(gè)歸類(lèi),重點(diǎn)分享以前在實(shí)際業(yè)務(wù)中碰到場(chǎng)景以及如何使用。

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

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

緩存分類(lèi)

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

緩存分類(lèi)

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

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

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

實(shí)踐案例

1. 熱點(diǎn)key

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

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

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

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

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

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

2. 類(lèi)目中心設(shè)計(jì)

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

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

(1) 類(lèi)目中心--讀

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

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

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

(2) 類(lèi)目中心--更新

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

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

(4) 客戶(hù)端性能

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

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

***

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

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

【本文來(lái)自51CTO專(zhuān)欄作者張開(kāi)濤的微信公眾號(hào)(開(kāi)濤的博客),公眾號(hào)id: kaitao-1234567】

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

責(zé)任編輯:趙寧寧 來(lái)源: 51CTO專(zhuān)欄
相關(guān)推薦

2024-11-08 14:27:52

系統(tǒng)設(shè)計(jì)數(shù)據(jù)庫(kù)

2016-09-26 13:50:52

Linux系統(tǒng)性能

2015-07-28 09:19:10

Linux內(nèi)核

2011-08-09 17:15:45

注冊(cè)表注冊(cè)表編輯器

2024-12-11 07:59:02

2009-02-18 20:27:24

組策略提升Windows性能

2009-03-22 19:19:15

多核多核服務(wù)器多核歷史

2011-09-19 14:30:47

Vista緩存

2019-06-21 14:40:52

緩存系統(tǒng)性能操作系統(tǒng)

2025-06-30 09:02:17

2023-10-26 08:33:16

Redis管道技術(shù)

2023-06-12 00:22:50

操作系統(tǒng)應(yīng)用程序內(nèi)核鎖

2023-10-23 08:23:16

系統(tǒng)性能數(shù)據(jù)庫(kù)

2023-10-17 14:35:22

人工智能AI

2018-08-09 09:00:34

2024-08-12 09:38:33

2012-12-10 13:43:07

固態(tài)硬盤(pán)系統(tǒng)性能內(nèi)存

2009-09-29 10:39:04

Linuxlinux系統(tǒng)性能檢測(cè)

2010-04-23 11:44:34

Aix系統(tǒng)

2024-04-01 08:04:05

JProfilerJVM工具
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)