成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

ngx_srcache + lua異步更新緩存----提升10倍的響應(yīng)速度

gaomysion / 582人閱讀

摘要:異步更新緩存一直使用作為反向代理服務(wù)器,一來(lái)基于事件驅(qū)動(dòng),速度快。同時(shí),本身還能提供快速的讀寫速度。都是由于自動(dòng)刪除過期緩存,導(dǎo)致的緩存缺失。在結(jié)束請(qǐng)求的同時(shí),使用一個(gè)異步任務(wù)去更新緩存,考慮到并發(fā)情況,這里也需要使用一個(gè)共享內(nèi)存鎖。

nginx_lua異步更新緩存 NGINX

一直使用nginx作為反向代理服務(wù)器,一來(lái)nginx基于事件驅(qū)動(dòng),速度快。而來(lái)nginx的反向代理模塊能很好的支持頁(yè)面緩存負(fù)載均衡。

頁(yè)面緩存

nginx有proxy_cache這個(gè)內(nèi)置的緩存功能,是基于文件的。如果把緩存路徑設(shè)置到RAMDISK上面,可以達(dá)到和內(nèi)存緩存差不多的緩存讀寫速度。這樣做雖然解決了文件讀寫慢的問題,但是如果分布式部署的時(shí)候,這個(gè)緩存不能跨機(jī)器共享。

srcache-nginx-module

章大神寫的這個(gè)模塊支持和另一個(gè)模塊配合將頁(yè)面緩存寫入redis集群。就很好的解決了

緩存不能跨機(jī)器共享的問題

也使得緩存大小不受單機(jī)資源限制。

同時(shí),redis本身還能提供快速的讀寫速度。

問題

看上面列的幾點(diǎn),似乎已經(jīng)很完美了。
但是在實(shí)際使用的時(shí)候還是發(fā)現(xiàn)有需要改善的地方:

緩存不存在的時(shí)候:
第一個(gè)請(qǐng)求查詢r(jià)edis失敗,到后端,最后還要存儲(chǔ)redis。比沒有緩存的情況還多出兩次redis訪問,一次讀一次寫。而且當(dāng)并發(fā)訪問的時(shí)候還可能請(qǐng)求都會(huì)進(jìn)入后端服務(wù)器,后端不夠健壯的時(shí)候會(huì)導(dǎo)致“雪崩效應(yīng)”。(如果使用默認(rèn)的proxy_cache模塊還能通過proxy_cache_use_stale命令避免,但是srcache模塊沒有實(shí)現(xiàn)類似功能)

緩存失效的時(shí)候
通常我們?yōu)轫?yè)面設(shè)置緩存時(shí)間,緩存失效的時(shí)候,需要重新更新緩存。這個(gè)時(shí)候也會(huì)出現(xiàn)第一種情況類似的問題。

以上兩種情況,第一種出現(xiàn)較少,第二種情況出現(xiàn)較多。都是由于redis自動(dòng)刪除過期緩存,導(dǎo)致的緩存缺失。

解決辦法

由于nginx不知道redis里面數(shù)據(jù)的緩存時(shí)間,所以會(huì)頻繁的導(dǎo)致緩存缺失的情況出現(xiàn)。
既然知道原因了,那么咱們就來(lái)針對(duì)性的解決一下這個(gè)問題。讓nginx能夠知道甚至參與到緩存時(shí)間的管理里面,就能有效的避免被動(dòng)的緩存缺失問題,能有意識(shí)的主動(dòng)更新緩存。

ngx_lua

這里需要提到一個(gè)nginx的第三方模塊就是把lua集成到nginx里面擴(kuò)展了nginx配置文件語(yǔ)法,支持在配置文件里面直接使用lua語(yǔ)言編寫邏輯。

lua-resty-cache

我將自己在項(xiàng)目中使用的一個(gè)倉(cāng)庫(kù)開源到github上面了。

能讓nginx主動(dòng)的檢測(cè)緩存的過期時(shí)間

在快過期的時(shí)候,直接返回舊的緩存數(shù)據(jù)

使用異步任務(wù)更新緩存

以上的第二第三兩點(diǎn),就能在緩存快過期的時(shí)候,主動(dòng)的異步更新緩存,讓終端用戶感知不到更新緩存的過程。
項(xiàng)目中實(shí)測(cè),使用這個(gè)緩存機(jī)制之后,用戶感知到的平均響應(yīng)速度提升了10倍(nginx access log分析結(jié)果),而這都是在原有系統(tǒng)性能不變的情況下實(shí)現(xiàn)的!是不是有點(diǎn)不可思議。

原理

下面就來(lái)說一說提升速度的原理:

如果緩存缺失,直接跳過srcache_fetch步驟,將請(qǐng)求發(fā)到后端server。同時(shí)申請(qǐng)一個(gè)共享內(nèi)存鎖,并發(fā)而來(lái)的相同的請(qǐng)求不用發(fā)送到后端,而是等待這個(gè)請(qǐng)求返回。

更新緩存的時(shí)候,在過期時(shí)間expire基礎(chǔ)上加上一個(gè)stale time。那么在到了過期時(shí)間的時(shí)候,redis還不會(huì)立即刪掉這個(gè)數(shù)據(jù)。

如果檢測(cè)到數(shù)據(jù)過期,但是redis還能拿到這個(gè)“過期”數(shù)據(jù),則立即返回過期數(shù)據(jù)給終端用戶。

在結(jié)束請(qǐng)求的同時(shí),使用一個(gè)異步任務(wù)去更新緩存,考慮到并發(fā)情況,這里也需要使用一個(gè)共享內(nèi)存鎖。

這樣,即使在緩存過期的時(shí)候,用戶也很少會(huì)遇到只能從后端server拿數(shù)據(jù)的情況。所以能節(jié)省相當(dāng)?shù)臅r(shí)間,在速度上有這么大的提升。

后記

這個(gè)庫(kù)運(yùn)行了有好幾個(gè)月了,非常的穩(wěn)定。當(dāng)然這得益于nginx的穩(wěn)定。
但是也不得不說,使用這個(gè)庫(kù)之后,后端server能夠收到的請(qǐng)求,已經(jīng)絕大部分都是由那個(gè)異步的任務(wù)發(fā)出的。用戶基本都能在緩存里面直接拿到數(shù)據(jù)。所以,后端server的性能,沒有提升,但是給用戶的感覺卻是快了很多?。?!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/61766.html

相關(guān)文章

  • ngx_srcache + lua異步更新緩存----提升10倍的響應(yīng)速度

    摘要:異步更新緩存一直使用作為反向代理服務(wù)器,一來(lái)基于事件驅(qū)動(dòng),速度快。同時(shí),本身還能提供快速的讀寫速度。都是由于自動(dòng)刪除過期緩存,導(dǎo)致的緩存缺失。在結(jié)束請(qǐng)求的同時(shí),使用一個(gè)異步任務(wù)去更新緩存,考慮到并發(fā)情況,這里也需要使用一個(gè)共享內(nèi)存鎖。 nginx_lua異步更新緩存 NGINX 一直使用nginx作為反向代理服務(wù)器,一來(lái)nginx基于事件驅(qū)動(dòng),速度快。而來(lái)nginx的反向代理模塊能很好...

    baishancloud 評(píng)論0 收藏0
  • UPYUN Open Talk :同盾,從零打造千萬(wàn)級(jí)實(shí)時(shí)風(fēng)控云服務(wù)

    摘要:同盾技術(shù)總監(jiān)張新波在第二期移動(dòng)時(shí)代互聯(lián)網(wǎng)金融的架構(gòu)趨勢(shì)中闡述了同盾是如何從零開始打造千萬(wàn)級(jí)實(shí)時(shí)風(fēng)控云服務(wù),具體介紹了同盾系統(tǒng)平臺(tái)構(gòu)建過程中主要需要解決的三大難題,以及解決這些問題的具體時(shí)實(shí)踐過程。 同盾科技,是由阿里、Paypal 反欺詐專家創(chuàng)建的,國(guó)內(nèi)第一家風(fēng)險(xiǎn)控制與反欺詐云服務(wù)提供商,其涉及領(lǐng)域包括電商、B2B、互聯(lián)網(wǎng)金融、游戲等。同盾技術(shù)總監(jiān)張新波在 UPYUN Open ...

    malakashi 評(píng)論0 收藏0
  • 寫文件操作探微

    摘要:寫緩存與寫磁盤先看下寫文件操作的流程結(jié)構(gòu)圖磁盤緩存是物理內(nèi)存的一部分,專門供操作系統(tǒng)用作讀寫磁盤的緩沖之用。這印證了前面的說法,字符串在文件關(guān)閉前只在磁盤緩存里,還未真正寫到磁盤上,所以讀進(jìn)程無(wú)法讀出。 多進(jìn)程讀寫同一個(gè)文件的問題 不考慮文件內(nèi)容的錯(cuò)亂,多進(jìn)程是可以同時(shí)讀寫一個(gè)文件的。當(dāng)一個(gè)進(jìn)程在寫,讀的進(jìn)程能否讀到最新的內(nèi)容,取決于最新的內(nèi)容是否真正寫到了磁盤上。 寫緩存與寫磁盤 先...

    plus2047 評(píng)論0 收藏0
  • 寫文件操作探微

    摘要:寫緩存與寫磁盤先看下寫文件操作的流程結(jié)構(gòu)圖磁盤緩存是物理內(nèi)存的一部分,專門供操作系統(tǒng)用作讀寫磁盤的緩沖之用。這印證了前面的說法,字符串在文件關(guān)閉前只在磁盤緩存里,還未真正寫到磁盤上,所以讀進(jìn)程無(wú)法讀出。 多進(jìn)程讀寫同一個(gè)文件的問題 不考慮文件內(nèi)容的錯(cuò)亂,多進(jìn)程是可以同時(shí)讀寫一個(gè)文件的。當(dāng)一個(gè)進(jìn)程在寫,讀的進(jìn)程能否讀到最新的內(nèi)容,取決于最新的內(nèi)容是否真正寫到了磁盤上。 寫緩存與寫磁盤 先...

    cppowboy 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<