上篇文章說到用ab做壓力測試窝剖,單臺服務器出現cpu瓶頸。
為了提高并發(fā)酥夭,可以從兩方面擴展赐纱,縱向擴展(提升單臺服務器性能),橫向擴展(增加機器)熬北。
縱向擴展疙描,成本是比較大的,而且容易到頂讶隐,隨著業(yè)務增加起胰,還是撐不住。
所以我們要做分布式方案巫延,這樣可以隨著業(yè)務擴展效五,租用更多機器來扛住壓力。
目前軟負載比較簡單的方式就是用nginx了炉峰,當然你也可以硬負載畏妖,不過我沒接觸過,只是聽過而已疼阔,據說很貴瓜客。
那我下面就介紹nginx配置方法。
我兩臺機器配置都沒1核1G內存竿开。
直接看nginx配置吧
upstream backend // 這個名字隨便起谱仪,用于下面做反向代理
{
server 10.104.136.40; // A機器的地址
server 10.104.243.10; // B機器的地址
}
// 監(jiān)聽80端口,做反向代理
server {
listen 80 default_server;
# listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
proxy_pass http://backend; // upstream里定義的名字
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
root html;
index index.html index.htm;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
就這樣否彩,reload nginx就生效了疯攒,為了測試是否成功負載,可以在兩個應用返回不同信息列荔,用瀏覽器訪問敬尺,看是否會自動切換。
如果測試時贴浙,出現較多的異常砂吞,可以查看nginx 的error log,定位問題
如果出現1024 worker_connections are not enough
可以修改/etc/nginx/nginx.conf
events {
worker_connections 20000;
}
下面為3000個并發(fā)崎溃,用分布式方案的結果蜻直,比單機平均處理時間降低了1秒。
Concurrency Level: 3000
Time taken for tests: 11.291 seconds
Complete requests: 20000
Failed requests: 0
Total transferred: 2400000 bytes
HTML transferred: 0 bytes
Requests per second: 1771.31 [#/sec] (mean)
Time per request: 1693.658 [ms] (mean)
Time per request: 0.565 [ms] (mean, across all concurrent requests)
Transfer rate: 207.58 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 204 892.5 0 7028
Processing: 1 279 587.7 134 7020
Waiting: 1 279 587.7 134 7020
Total: 1 483 1111.1 175 8710
Percentage of the requests served within a certain time (ms)
50% 175
66% 245
75% 343
80% 411
90% 1187
95% 1972
98% 4294
99% 7279
100% 8710 (longest request)