缓存系列之二:CDN与其他层面缓存
緩存系列之二:CDN與其他層面緩存
一:內(nèi)容分發(fā)網(wǎng)絡(luò)(Content Delivery Network),通過將服務(wù)內(nèi)容分發(fā)至全網(wǎng)加速節(jié)點(diǎn),利用全球調(diào)度系統(tǒng)使用戶能夠就近獲取,有效降低訪問延遲,提升服務(wù)可用性,CDN 第一降低機(jī)房的使用帶寬,因?yàn)楹芏噘Y源通過CDN就直接返回用戶了,第二解決不同運(yùn)營商之間的互聯(lián),因?yàn)榭梢宰屄?lián)通的網(wǎng)絡(luò)訪問聯(lián)通讓電信的網(wǎng)絡(luò)訪問電信,起到加速用戶訪問的目的, 第三:解決用戶訪問的地域問題,就近返回用戶資源。
百度CDN:https://cloud.baidu.com/product/cdn.html
阿里CDN:https://www.aliyun.com/product/cdn?spm=5176.8269123.416540.50.728y8n
騰訊CDN:https://www.qcloud.com/product/cdn
1.1:用戶請(qǐng)求的具體流程:
1.2:關(guān)于302調(diào)度:
如用的是是聯(lián)通的網(wǎng)絡(luò),但是設(shè)置了一個(gè)電信的DNS,或者電信的用戶設(shè)置了一個(gè)聯(lián)通的DNS,在剛建立連接的時(shí)候CDN法獲取到用戶的真實(shí)IP,而是只能獲取到用戶的local DNS而判定用戶是聯(lián)通還是電信的網(wǎng)絡(luò),假如設(shè)置了錯(cuò)誤的運(yùn)營商DNS會(huì)被調(diào)度到錯(cuò)誤的CDN 邊緣節(jié)點(diǎn),當(dāng)和邊緣節(jié)點(diǎn)連接之后就可以獲取到用戶的真實(shí)IP從而判斷用戶是聯(lián)通還是電信的網(wǎng)絡(luò),如果是電信的網(wǎng)絡(luò)被調(diào)度到了聯(lián)通的CDN邊緣節(jié)點(diǎn)或者是電信的網(wǎng)絡(luò)被調(diào)度到了聯(lián)通的CND邊緣節(jié)點(diǎn),那么可以給用戶再發(fā)送一個(gè)302重定向的回復(fù),用戶的瀏覽器再根據(jù)新的地址進(jìn)行連接,即可訪問到正確的CND 邊緣節(jié)點(diǎn)。
1.3:內(nèi)容分發(fā)與分層:
提前對(duì)靜態(tài)內(nèi)容進(jìn)行預(yù)緩存,避免大量的請(qǐng)求回源,導(dǎo)致主站網(wǎng)絡(luò)帶寬被打滿而導(dǎo)致數(shù)據(jù)無法更新,另外CDN可以將數(shù)據(jù)根據(jù)訪問的熱度不通而進(jìn)行不通級(jí)別的緩存,例如訪問量最高的資源訪問CDN 邊緣節(jié)點(diǎn)的內(nèi)存,其次的放在SSD或者SATA,再其次的放在云存儲(chǔ),這樣兼顧了速度與成本。
1.4:CND的主要優(yōu)勢(shì):
緩存-緩存到最快的地方如內(nèi)存,緩存的數(shù)據(jù)準(zhǔn)確命中率高,訪問速度就快
調(diào)度準(zhǔn)確-將用戶調(diào)度到最近的邊緣節(jié)點(diǎn)
性能優(yōu)化-CDN 性能相關(guān)
安全相關(guān)-抵御攻擊等
1.5:自建CDN優(yōu)缺點(diǎn):
nginx+squid、nginx+varnish、nginx+ATS等方式可以自建
優(yōu)點(diǎn):
自建CDN 比較靈活,可以在訪問用戶較多的地方多部署服務(wù)器
成本比較容易控制
缺點(diǎn):
費(fèi)用高
團(tuán)隊(duì)技術(shù)要求高
問題不便排查,出問題不容易搞的定
二:應(yīng)用層緩存:
2.1:應(yīng)用程序級(jí)別的緩存:
指的是編譯性語言需要編譯成二進(jìn)制可執(zhí)行代碼,比如c/c++/go等,其編譯好之后就可以直接運(yùn)行,另外還有解釋性語言,比如php/python先編譯成operate code即中間碼也叫字節(jié)碼,中間碼不能直接運(yùn)行需要解釋器解釋成機(jī)器碼之后才能執(zhí)行,因此中間碼也算是緩存,php在5.5.0之后已經(jīng)綁定了OPCache擴(kuò)展,對(duì)于PHP 5.2,5.3,5.4等版本中可以使用PECL 擴(kuò)展中的OPcache庫,在5.5版本之前可以使用APC/Xcache等進(jìn)行緩存也可以實(shí)現(xiàn),但是5.5之后已經(jīng)內(nèi)置OPcache 就不需要APC和Xcache了,開啟的話在編譯PHP的時(shí)候使用–enable-opcache即可,因此使用PHP 推薦使用5.5之后的版本并打開OPcache以提升性能,另外如果在開啟OPcache的情況下使用了軟連接的方式部署代碼會(huì)導(dǎo)致代碼不更新,當(dāng)代碼更新之后需要重啟php-fpm才可以識(shí)別并將新的代碼進(jìn)行編譯成字節(jié)碼并通過解釋器解釋給訪問用戶,apache 的mod_cache現(xiàn)在一般不使用,nginx的FastCGI緩存會(huì)導(dǎo)致代碼代碼更新后用戶訪問不生效,因此也不使用,所以動(dòng)態(tài)語言就使用OPcache,FastCGI會(huì)導(dǎo)致不生效就直接關(guān)閉。
2.2:動(dòng)態(tài)頁面靜態(tài)化:
將java的動(dòng)態(tài)頁面靜態(tài)化,比如將每個(gè)具體產(chǎn)品的web頁面靜態(tài)化為html文件,然后通過nginx 的rewrite功能發(fā)布,即用戶最終訪問到的某個(gè)產(chǎn)品的web 頁面是靜態(tài)的頁面,靜態(tài)頁面的訪問速度是比較快的,生成的靜態(tài)頁面可以通過nfs、rsync、分布式存儲(chǔ)等方式推送到各web服務(wù)器,如果靜態(tài)頁面生成的信息是錯(cuò)誤的,可以將信息更改后通過推送平臺(tái)重新生成新的web頁面并同步到各web服務(wù)器,平時(shí)可以通過每間隔幾個(gè)小時(shí)自動(dòng)生成靜態(tài)頁面,比如每6小時(shí)生成一次動(dòng)態(tài)頁面并同步到各web服務(wù)器。
三:其他緩存:
3.1數(shù)據(jù)緩存
3.1.1:分布式緩存:redis、memcached
3.1.2:數(shù)據(jù)庫:MySQL的Innodb緩存、MYISA緩存
3.2:系統(tǒng)層:
3.2.1:操作系統(tǒng)
CPU緩存(L1的數(shù)據(jù)緩存和L1的指令緩存)、二級(jí)緩存、三級(jí)緩存
內(nèi)存:buffer和cache、內(nèi)存表緩存
3.3:物理層:
3.3.1:磁盤緩存:磁盤有自己的緩存,用RAID 卡的時(shí)候磁盤的緩存是關(guān)閉的。
3.3.2:RAID 卡緩存:服務(wù)器在使用raid 卡的時(shí)候磁盤的緩存默認(rèn)是關(guān)閉的,避免因?yàn)橥蝗粩嚯姸鴮?dǎo)致的緩存里面的數(shù)據(jù)丟失,看看到磁盤的換粗是關(guān)閉的,因?yàn)閞aid 卡可以帶電池供電。
3.3.3:RAID 卡的基本操作命令:
查看當(dāng)前RAID卡緩存策略
MegaCli64 -LDinfo -Lall -aAll
Default Cache Policy: WriteThrough, ReadAheadNone, Direct, No Write Cache if Bad BBU
Current Cache Policy: WriteThrough, ReadAheadNone, Direct, No Write Cache if Bad BBU
第一部分:
WriteBack:寫緩存策略
WriteThrough:直接寫入磁盤,不使用RAID卡緩存。
第二部分:
ReadAheadNone:不開啟預(yù)讀
ReadAhead:開啟預(yù)讀,在讀操作的時(shí)候,預(yù)先把后面順序的數(shù)據(jù)載入raid卡緩存,在順序讀的環(huán)境中能提供很好的性能,但是在隨機(jī)讀的環(huán)境中反而降低讀的性能(適合文件系統(tǒng),不適合數(shù)據(jù)庫系統(tǒng))
ReadAdaptive:自適應(yīng)預(yù)讀,在緩存和I/O空閑時(shí)選擇預(yù)讀,默認(rèn)策略。
第三部分:
Direct:讀操作不緩存到RAID卡緩存。
Cached:讀操作緩存到RAID卡緩存。
第四部分:如果BBU(電池)出現(xiàn)問題是否啟用Write Cache
No Write Cache if Bad BBU:如果BBU出現(xiàn)問題不使用Write Cache,從WriteBack自動(dòng)切換到WriteThrough,默認(rèn)配置。
Write Cache OK if Bad BBU: 如果BBU出現(xiàn)問題仍啟用Write Cache,這種配置是非常不安全的,除非是有UPS或者雙電源的情況下。
RAID卡策略更改
修改WriteBack:
MegaCli64 -LDSetProp -WB -Lall -aAll
修改WriteThrough:
MegaCli64 -LDSetProp -WT -Lall -aAll
修改No Write Cache if Bad BBU:
MegaCli64 -LDSetProp -NoCachedBadBBU -Lall -aAll
修改Write Cache OK if Bad BBU:
MegaCli64 -LDSetProp -CachedBadBBU -Lall -aAll
4.其它相關(guān)命令
查看機(jī)器型號(hào) # dmidecode | grep"Product"
查看廠商 # dmidecode| grep "Manufacturer"
查看序列號(hào) # dmidecode | grep "Serial Number"
查看CPU信息 # dmidecode | grep "CPU"
查看CPU個(gè)數(shù) # dmidecode | grep "Socket Designation: CPU" |wc –l
查看出廠日期 # dmidecode | grep"Date"
查看充電狀態(tài) # MegaCli64 -AdpBbuCmd-GetBbuStatus -aALL |grep "Charger Status"
顯示BBU狀態(tài)信息 # MegaCli64 -AdpBbuCmd-GetBbuStatus –aALL
顯示BBU容量信息 # MegaCli64 -AdpBbuCmd-GetBbuCapacityInfo –aALL
顯示BBU設(shè)計(jì)參數(shù) # MegaCli64 -AdpBbuCmd-GetBbuDesignInfo –aALL
顯示當(dāng)前BBU屬性 # MegaCli64 -AdpBbuCmd-GetBbuProperties –aALL
查看充電進(jìn)度百分比 # MegaCli64 -AdpBbuCmd-GetBbuStatus -aALL |grep "Relative State of Charge"
查詢Raid陣列數(shù) # MegaCli64 -cfgdsply -aALL|grep "Number of DISK GROUPS:"
顯示Raid卡型號(hào),Raid設(shè)置,Disk相關(guān)信息 # MegaCli64-cfgdsply –aALL
顯示所有物理信息 # MegaCli64 -PDList-aALL
顯示所有邏輯磁盤組信息 # MegaCli64 -LDInfo -LALL–aAll
查看物理磁盤重建進(jìn)度(重要) # MegaCli64 -PDRbld-ShowProg -PhysDrv [1:5] -a0
查看適配器個(gè)數(shù) #MegaCli64 –adpCount
查看適配器時(shí)間 #MegaCli64 -AdpGetTime–aALL
顯示所有適配器信息 #MegaCli64 -AdpAllInfo–aAll
查看Cache 策略設(shè)置 # MegaCli64 -cfgdsply -aALL|grep Polic
轉(zhuǎn)載于:https://www.cnblogs.com/reblue520/p/7327299.html
總結(jié)
以上是生活随笔為你收集整理的缓存系列之二:CDN与其他层面缓存的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在linux程序里面,知道一个函数地址,
- 下一篇: Excel技巧续