PHP秒殺原理(慕課)

原文鏈接:www.imooc.com

一,原理知識介紹:

1,原理方案:
減而治之 CDN原理
nginx限流
異步隊列
分而治之 nginx負載均衡
2,特徵與難點分析:
特徵 寫強一致性
讀弱一致性
難點 極致性能的實現
高可用的保證
3-1,壓測工具安裝:
yum  -y  install  httpd-tools

# 指定目錄安裝
yum install --installroot=/data/soft/tools/ab  httpd-tools

ad -V
3-2,壓測使用說明:

檢測接口最大qps

ab -n100 -c 10 http://www.baidu.com
Requests per second: 101.15[#/sec](mean)
# Apache自帶的ab工具進行壓力測試

相關參數說明如下:

-n:在測試會話中所執行的請求個數。默認時,僅執行一個請求。
-c:一次產生的請求個數。默認是一次一個。
-t:測試所進行的最大秒數。其內部隱含值是-n 50000,它可以使對服務器的測試限制在一個固定的總時間以內。默認時,沒有時間限制。
-p:包含了需要POST的數據的文件。
-P:對一箇中轉代理提供BASIC認證信任。用戶名和密碼由一個:隔開,並以base64編碼形式發送。無論服務器是否需要(即是否發送了401認證需求代碼),此字符串都會被髮送。
-T:POST數據所使用的Content-type頭信息。
-v:設置顯示信息的詳細程度-4或更大值會顯示頭信息,3或更大值可以顯示響應代碼(404,200等),2或更大值可以顯示警告和其他信息。
-V:顯示版本號並退出。
-w:以HTML表的格式輸出結果。默認時,它是白色背景的兩列寬度的一張表。
-i:執行HEAD請求,而不是GET。
-x:設置<table>屬性的字符串。
-X:對請求使用代理服務器。
-y:設置<tr>屬性的字符串。
-z:設置<td>屬性的字符串。
-C:對請求附加一個Cookie:行。其典型形式是name=value的一個參數對,此參數可以重複。
-H:對請求附加額外的頭信息。此參數的典型形式是一個有效的頭信息行,其中包含了以冒號分隔的字段和值的對(如,"Accept-Encoding:zip/zop;8bit")。
-A:對服務器提供BASIC認證信任。用戶名和密碼由一個:隔開,並以base64編碼形式發送。無論服務器是否需要(即,是否發送了401認證需求代碼),此字符串都會被髮送。
-h:顯示使用方法。
-d:不顯示"percentage served within XX [ms] table"的消息(爲以前的版本提供支持)。
-e:產生一個以逗號分隔的(CSV)文件,其中包含了處理每個相應百分比的請求所需要(從1%到100%)的相應百分比的(以微妙爲單位)時間。由於這種格式已經“二進制化”,所以比'gnuplot'格式更有用。
-g:把所有測試結果寫入一個'gnuplot'或者TSV(以Tab分隔的)文件。此文件可以方便地導入到Gnuplot,IDL,Mathematica,Igor甚至Excel中。其中的第一行爲標題。
-i:執行HEAD請求,而不是GET。
-k:啓用HTTP KeepAlive功能,即在一個HTTP會話中執行多個請求。默認時,不啓用KeepAlive功能。
-q:如果處理的請求數大於150,ab每處理大約10%或者100個請求時,會在stderr輸出一個進度計數。此-q標記可以抑制這些信息。
4,限流
4-1,nginx限流配置
按連接數限速,即併發數 ngx_http_limit_conn_module
按請求速率限速,按照ip限制單位時間內的請求書 ngx_http_limit_req_module
4-2,nginx限流–配置
# 查看nginx情況
ps aux | grep nginx

vim /etc/nginx/nginx.conf
/usr/sbin/nginx -s reload
vim /etc/nginx/nginx.conf

nginx.conf

limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s; # 創建規則

server 上面
location ~ .php${
limit_req zone=mylimit burst=1 nodelay; #應用規則
}
$ /usr/sbin/nginx -s reload
$ ps aux | grep nginx
$ ab -n1000 -c100 127.0.0.1/test.php

$ tail -f /var/log/nginx/access.log
$ tail -f /var/log/nginx/error.log
4-3,限流算法介紹:

1,令牌桶算法

步驟:

​ 1, 勻速生產令牌 到 令牌桶

​ 2,request --> 令牌桶 == 桶中無令牌則返回 503

2,漏桶算法:

​ 1,request --> 漏桶,均勻流出

​ 2,桶滿則溢出,返回503

3,計數器

單位時間計數器技數即可,一般在應用程序中寫的較多

5,CDN介紹

CDN,內容分發網絡 (Content Delivery Network)

縮短訪問路徑,減少源站壓力、提高內容響應速度 # 常用方法,提高讀源站性能一大利器

爲源站提供安全保護

5-1,普通域名訪問
# 客戶端 (瀏覽器、app)
gethostbyname("www.TEST.com");

gethostbyname{
   生成查詢CDN服務器的消息(域名、class、記錄類型);
   通過UDP協議向DNS服務器發送消息;
   接受DNS服務器返回的消息並讀取出IP地址返回;
}

拿到ip地址訪問服務器
5-2,DNS解析原理
任何一臺DNS服務器都保留根域信息

上級DNS服務器保管着所有下級DNS服務器的信息

在這裏插入圖片描述
在這裏插入圖片描述

5-3,DNS解析原理
一般選擇最近的DNS服務器
   首選DNS服務器   8.8.8.8    #  Windows 上的網絡設置
域名 Class 類型 數據
a.com IN A 10.10.xx.xx
mail.a.com IN MX 10.10.xx.xx
cdn.a.com IN CNAME cdn.cdntip.com,
DNS服務器數據存儲格式 : CNAME  cdn.cdntip.com.

CNAME記錄 類似查詢轉發,該記錄不能直接使用ip,只能是另一個主機的別名。
CDN是利用該記錄來指定cdn服務器,如果有A記錄與CNAME記錄同時存在,則只使用A記錄

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章