文章目錄
一,原理知識介紹:
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記錄