高性能的服务器的架设
对于高性能网站 ,请求量大,如何支撑? 一方面,要减少请求 对于开发人员—-合并css, 背景图片, 减少mysql查询等.
2: 对于运维 nginx的expires ,利用浏览器缓存等,减少查询.
3: 利用cdn来响应请求
4: 最终剩下的,不可避免的请求—-服务器集群+负载均衡来支撑.
所以,来到第4步后,就不要再考虑减少请求这个方向了. 而是思考如何更好的响应高并发请求.
大的认识——-既然响应是不可避免的,我们要做的是把工作内容”平均”分给每台服务器. 最理想的状态 每台服务器的性能都被充分利用.
环境准备
win7 Intel i7 4710MQ CPU 2.50GHz 64bit 8G内存,系统安装了oracle、mysql、两台虚拟机(centos6,centos1安装了nginx、redis,centos2安装了httpd(使用ab进行http压力测试),sysbench)
nginx
安装nginx我配置了一致性hash(与mem集成使用)、status(压测统计使用)、redis模块(与redis集成使用)
[root@centos1 nginx]# ./sbin/nginx -V
nginx version: nginx/1.10.2
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)
configure arguments: --prefix=/usr/local/nginx --add-module=/usr/local/nginx/nginx_module_hash --with-http_stub_status_module --add-module=/usr/local/nginx/ngx_http_redis-0.3.8
[root@centos1 nginx]#
upstream zmy_zh {
server 192.168.1.100;
}
//redis集群,最好使用lua配合,进行redis集群的动态配置以及查找
//lua暂未开始学习
upstream redis_cluster {
server 192.168.106.130:7000;
server 192.168.106.130:7001;
server 192.168.106.130:7002;
#server 192.168.106.130:7003;
#server 192.168.106.130:7004;
#server 192.168.106.130:7005;
keepalive 100;
}
//memcached集群
upstream mem_cluster {
//一致性哈希算法
consistent_hash $request_uri;
server 192.168.106.130:11211;
server 192.168.106.130:11212;
server 192.168.106.130:11213;
}
server {
listen 80;
server_name 192.168.106.130;
#charset koi8-r;
access_log logs/zh.access.log main;
error_log logs/zh.error.log info;
location ~ /redis {
proxy_pass http://zmy_zh;
proxy_redirect off;
proxy_set_header host 192.168.1.100;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
index succ.jsp;
}
location ~ / {
set $redis_key "$uri";
redis_pass redis_cluster;
error_page 404 redis;//如果缓存未命中则去后台服务器查询
}
//压测时,hginx统计模块
location = /status {
stub_status on;
access_log off;
}
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
redis
使用的版本是redis3+,redis3以后提供了强大的集群机制以及自动容错机制,一些自定义的脚本
start.sh