php 面試考點總結-高並發和大流量解決方案考點


1.web資源防盜鏈

盜鏈概念

盜鏈是指在自己的頁面上展示一些並不在自己服務器的內容

防盜鏈工作原理

通過referer或者簽名,網站可以檢測目標網頁訪問的來源頁,一旦檢測到來源頁不是本站即進行阻止或者返回指定頁面

解決方案1

Referer
nginx 模塊ngx_http_referer_module用於阻擋來源非法的域名請求
location ~ .*\.(gif|jpg|png|swf|bmp|jpeg)$
{
    valid_referers none blocked bobo.com 
    if ($invalid_referer)
    {
        return 403 
    }
}
缺點:可以進行偽裝referer

解決方案2

使用第三方HttpAccessKeyModule模塊實現NGINX防盜鏈
location ~ .*\.(gif|jpg|png|swf|bmp|jpeg)$
{
    accesskey on;
    accesskey_hashmethod md5;
    accesskey_arg sign;
    accesskey_signature "bobo$remote_addr";
}
缺點:要在每個資源后面加個簽名

2.減少http請求次數

為什么要減少http請求次數

HTTPl連接產生的開銷
域名解析->TCP連接->發送請求->等待->下載資源->解析時間

解決方案1

圖片地圖
使用標簽

解決方案2

CSS精靈
通過指定css的backgroud-image和backgroud-position來顯示元素

解決方案3

合並腳本和樣式表
使用外部js和css文件引用方式

解決方案4

圖片使用base64編碼減少頁面的請求數
使用外部js和css文件引用方式

3.瀏覽器緩存和壓縮優化技術

HTTP緩存機制

1.200 from cache: 直接從本地緩存中獲取響應,最快速,最省流量,因為根本沒有向服務器發送請求
2.304 not modify:協商緩存,瀏覽器在本地沒有命中情況下請求頭發送一定的校驗數據到服務端,如果服務端數據沒有改變瀏覽器從本地緩存響應,返回304,快速,發送的數據小,只返回一些基本的響應頭信息,數據量很小,不發生實際響應體
3.200 OK:以上兩種緩存全都失敗,服務器返回完整響應,沒有用到緩存,相對最慢。
NGINX配置
location ~ .*\.(gif|jpg|png|swf|bmp|jpeg)$
{
    expires 30d;  //緩存30天
}
前端代碼和資源的壓縮
js代碼壓縮常用工具:UglifyJs, YUI Compressor, Closure Compiler
css代碼壓縮常用工具:YUI Compressor, CSS Compressor
html代碼壓縮常用工具:htmlcompressor
圖片壓縮
常用工具:tinypng, JpegMini, ImageOptim
gzip壓縮
location ~ .*\.(gif|jpg|png|swf|bmp|jpeg)$
{
    gzip on|off //是否開啟
    gzip_buffers 32 4K | 16 8K //緩沖
    gzip_comp_level [1-9] 推薦6 壓縮級別(級別越高,壓的越小,越浪費CPU資源)
    gzip_disable //什么樣的uri不進行gzip壓縮
    gzip_min_length 200 //開始壓縮的最小長度
    gzip_http_version //開始壓縮的http協議版本 
    gzip_types text/plain application/xml //對哪些類型的文件用
    gzip_proxied//設置請求者代理服務器,該如何緩存內容
    gzip_vary on|off //是否傳輸gzip壓縮標志
}

4.使用CDN加速

什么是CDN,全稱:Content Delivery Network 內容分發網絡

使用CDN的優勢

5.建立獨立的圖片服務器

獨立的必要性:

1.分擔web服務器的I/O負載,將耗費資源的圖片服務分離出來,提高服務器的性能和穩定性,
2.能夠專門對圖片服務器進行優化,為圖片服務設置有針對性的緩存方案,減少帶寬成本,提高訪問速度,
3.提高網站可擴展性,通過增加圖片服務器提高圖片的吞吐能力

采用獨立域名:

1.同一域名下瀏覽器的並發連接數有限制,突破瀏覽器的連接數限制(同一域名下瀏覽器並發連接數2-6個)
2.由於cookie的原因,對緩存不利,大部分web cache 都只能緩存不帶cookie的請求,導致每次的圖片請求都不能命中cache
3.如何進行圖片上傳和圖片同步,NFS共享方式,利用FTP同步

6.動態語言層的並發處理

進程,線程,協程,同步阻塞,異步非阻塞,

php並發編程實踐:swoole 消息隊列 接口的並發請求(curl_multi_init)

7.數據庫緩存層優化

1 為什么的要使用數據庫緩存

極大地j解決數據庫服務器的壓力
提高應用數據的響應速度
常見的緩存形式:內存緩存,文件緩存
是為了讓客戶端很少,甚至不訪問數據庫服務器進行數據的查詢,高並發下,能最大程度降低對數據庫服務器的壓力

2 使用redis,memcache緩存查詢數據

8.MySQL數據優化

9.Web服務器的負載均衡,請求分發


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM