1. 程式人生 > >緩存系列之二:CDN與其他層面緩存

緩存系列之二:CDN與其他層面緩存

級別 spl pecl apache 分布式緩存 -o 真實ip har 分享

緩存系列之二:CDN與其他層面緩存

一:內容分發網絡(Content Delivery Network),通過將服務內容分發至全網加速節點,利用全球調度系統使用戶能夠就近獲取,有效降低訪問延遲,提升服務可用性,CDN 第一降低機房的使用帶寬,因為很多資源通過CDN就直接返回用戶了,第二解決不同運營商之間的互聯,因為可以讓聯通的網絡訪問聯通讓電信的網絡訪問電信,起到加速用戶訪問的目的, 第三:解決用戶訪問的地域問題,就近返回用戶資源。
百度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:用戶請求的具體流程:

技術分享

1.2:關於302調度:
如用的是是聯通的網絡,但是設置了一個電信的DNS,或者電信的用戶設置了一個聯通的DNS,在剛建立連接的時候CDN法獲取到用戶的真實IP,而是只能獲取到用戶的local DNS而判定用戶是聯通還是電信的網絡,假如設置了錯誤的運營商DNS會被調度到錯誤的CDN 邊緣節點,當和邊緣節點連接之後就可以獲取到用戶的真實IP從而判斷用戶是聯通還是電信的網絡,如果是電信的網絡被調度到了聯通的CDN邊緣節點或者是電信的網絡被調度到了聯通的CND邊緣節點,那麽可以給用戶再發送一個302重定向的回復,用戶的瀏覽器再根據新的地址進行連接,即可訪問到正確的CND 邊緣節點。

1.3:內容分發與分層:
提前對靜態內容進行預緩存,避免大量的請求回源,導致主站網絡帶寬被打滿而導致數據無法更新,另外CDN可以將數據根據訪問的熱度不通而進行不通級別的緩存,例如訪問量最高的資源訪問CDN 邊緣節點的內存,其次的放在SSD或者SATA,再其次的放在雲存儲,這樣兼顧了速度與成本。

1.4:CND的主要優勢:
緩存-緩存到最快的地方如內存,緩存的數據準確命中率高,訪問速度就快
調度準確-將用戶調度到最近的邊緣節點
性能優化-CDN 性能相關
安全相關-抵禦攻擊等

1.5:自建CDN優缺點:
nginx+squid、nginx+varnish、nginx+ATS等方式可以自建
優點:
自建CDN 比較靈活,可以在訪問用戶較多的地方多部署服務器
成本比較容易控制
缺點:
費用高
團隊技術要求高
問題不便排查,出問題不容易搞的定

二:應用層緩存:
2.1:應用程序級別的緩存:
指的是編譯性語言需要編譯成二進制可執行代碼,比如c/c++/go等,其編譯好之後就可以直接運行,另外還有解釋性語言,比如php/python先編譯成operate code即中間碼也叫字節碼,中間碼不能直接運行需要解釋器解釋成機器碼之後才能執行,因此中間碼也算是緩存,php在5.5.0之後已經綁定了OPCache擴展,對於PHP 5.2,5.3,5.4等版本中可以使用PECL 擴展中的OPcache庫,在5.5版本之前可以使用APC/Xcache等進行緩存也可以實現,但是5.5之後已經內置OPcache 就不需要APC和Xcache了,開啟的話在編譯PHP的時候使用–enable-opcache即可,因此使用PHP 推薦使用5.5之後的版本並打開OPcache以提升性能,另外如果在開啟OPcache的情況下使用了軟連接的方式部署代碼會導致代碼不更新,當代碼更新之後需要重啟php-fpm才可以識別並將新的代碼進行編譯成字節碼並通過解釋器解釋給訪問用戶,apache 的mod_cache現在一般不使用,nginx的FastCGI緩存會導致代碼代碼更新後用戶訪問不生效,因此也不使用,所以動態語言就使用OPcache,FastCGI會導致不生效就直接關閉。

2.2:動態頁面靜態化:
將java的動態頁面靜態化,比如將每個具體產品的web頁面靜態化為html文件,然後通過nginx 的rewrite功能發布,即用戶最終訪問到的某個產品的web 頁面是靜態的頁面,靜態頁面的訪問速度是比較快的,生成的靜態頁面可以通過nfs、rsync、分布式存儲等方式推送到各web服務器,如果靜態頁面生成的信息是錯誤的,可以將信息更改後通過推送平臺重新生成新的web頁面並同步到各web服務器,平時可以通過每間隔幾個小時自動生成靜態頁面,比如每6小時生成一次動態頁面並同步到各web服務器。

三:其他緩存:
3.1數據緩存
3.1.1:分布式緩存:redis、memcached
3.1.2:數據庫:MySQL的Innodb緩存、MYISA緩存

3.2:系統層:
3.2.1:操作系統
CPU緩存(L1的數據緩存和L1的指令緩存)、二級緩存、三級緩存
內存:buffer和cache、內存表緩存

3.3:物理層:
3.3.1:磁盤緩存:磁盤有自己的緩存,用RAID 卡的時候磁盤的緩存是關閉的。
3.3.2:RAID 卡緩存:服務器在使用raid 卡的時候磁盤的緩存默認是關閉的,避免因為突然斷電而導致的緩存裏面的數據丟失,看看到磁盤的換粗是關閉的,因為raid 卡可以帶電池供電。
3.3.3:RAID 卡的基本操作命令:
查看當前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:不開啟預讀
ReadAhead:開啟預讀,在讀操作的時候,預先把後面順序的數據載入raid卡緩存,在順序讀的環境中能提供很好的性能,但是在隨機讀的環境中反而降低讀的性能(適合文件系統,不適合數據庫系統)
ReadAdaptive:自適應預讀,在緩存和I/O空閑時選擇預讀,默認策略。
第三部分:
Direct:讀操作不緩存到RAID卡緩存。
Cached:讀操作緩存到RAID卡緩存。
第四部分:如果BBU(電池)出現問題是否啟用Write Cache
No Write Cache if Bad BBU:如果BBU出現問題不使用Write Cache,從WriteBack自動切換到WriteThrough,默認配置。
Write Cache OK if Bad BBU: 如果BBU出現問題仍啟用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.其它相關命令
查看機器型號 # dmidecode | grep"Product"
查看廠商 # dmidecode| grep "Manufacturer"
查看序列號 # dmidecode | grep "Serial Number"
查看CPU信息 # dmidecode | grep "CPU"
查看CPU個數 # dmidecode | grep "Socket Designation: CPU" |wc –l
查看出廠日期 # dmidecode | grep"Date"
查看充電狀態 # MegaCli64 -AdpBbuCmd-GetBbuStatus -aALL |grep "Charger Status"
顯示BBU狀態信息 # MegaCli64 -AdpBbuCmd-GetBbuStatus –aALL
顯示BBU容量信息 # MegaCli64 -AdpBbuCmd-GetBbuCapacityInfo –aALL
顯示BBU設計參數 # MegaCli64 -AdpBbuCmd-GetBbuDesignInfo –aALL
顯示當前BBU屬性 # MegaCli64 -AdpBbuCmd-GetBbuProperties –aALL
查看充電進度百分比 # MegaCli64 -AdpBbuCmd-GetBbuStatus -aALL |grep "Relative State of Charge"
查詢Raid陣列數 # MegaCli64 -cfgdsply -aALL|grep "Number of DISK GROUPS:"
顯示Raid卡型號,Raid設置,Disk相關信息 # MegaCli64-cfgdsply –aALL
顯示所有物理信息 # MegaCli64 -PDList-aALL
顯示所有邏輯磁盤組信息 # MegaCli64 -LDInfo -LALL–aAll
查看物理磁盤重建進度(重要) # MegaCli64 -PDRbld-ShowProg -PhysDrv [1:5] -a0
查看適配器個數 #MegaCli64 –adpCount
查看適配器時間 #MegaCli64 -AdpGetTime–aALL
顯示所有適配器信息 #MegaCli64 -AdpAllInfo–aAll
查看Cache 策略設置 # MegaCli64 -cfgdsply -aALL|grep Polic

緩存系列之二:CDN與其他層面緩存