实验环境:rhel6 x64 selinux and iptables disabled
主机 IP:172.25.77.1
OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
OpenResty 的目标是让你的 Web 服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。
memcached 的 key 可以通过 memcached_key 变量来设置,如以$uri。如果命中,那么直接输出内容,没有命中就意味着 nginx 需要从应用程序请求页面。同时,我们还希望该应用程序将键值对写入到 memcached,以便下一个请求可以直接从 memcached 获取。
实验内容:
1. 安装包
openresty-1.11.2.3.tar.gz
2.1 解压安装 openresty
# tar zxf openresty-1.11.2.3.tar.gz
# cd openresty-1.11.2.3
# ./configure
# yum install -y gcc pcre-devel
# yum install -y openssl-devel ##在使用 HTTPS 服务时候必须装 openssl-devel
# gmake
##gmake 进行编译
# gmake install
##gmake install 生成文件到系统
# ln -s /usr/local/openresty/nginx/sbin/nginx /usr/sbin/ ##使用软连接,方便调用
# nginx ##启动 nginx
2.2 修改配置文件
# vim /usr/local/openresty/nginx/conf/nginx.conf ##和修改 nginx 配置文件十分相似
http {
include
mime.types;
default_type application/octet-stream;upstream memcached{
server 127.0.0.1:11211; ##节点服务器
keepalive 512; ##保持的最多连接数
}
location / {
root html;
index index.html index.htm index.php; ##添加 index.php
}
location /memc {
internal; ##只接受内部访问,提高了数据安全
memc_connect_timeout 100ms; ##用于建立与 memcached 服务器连接超时时间
memc_send_timeout 100ms; ##设置发送请求到 memcached 服务器超时时间
memc_read_timeout 100ms; ##定义从 memcached 服务器读取响应超时时间
set $memc_key $query_string; ##指定以什么作为 key,这里使用 nginx 内置的
$query_string
set $memc_exptime 120; ##缓存失效时间 120s
memc_pass memcached; ##设置 memcached 服务器的位置
}
location ~ \.php$ {
set $key $uri$args;
##根据 uri 和参数作为缓存的 key
srcache_fetch GET /memc $key;
##srcache_fetch 表示注册一个输入拦
截处理器到 location,将在 location 进入时被执行
srcache_store PUT /memc $key;
##srcache_store 表示注册一个输出拦
截处理器到 location,将在 location 输出时被执行
root
html;fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
#fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include
fastcgi.conf;
}
【注:经过上述配置,相当于 nginx 增加了如下逻辑:当请求的 uri 以.php 结尾时,首
先到 memcache 中查询有没有以$key $uri$args 为 key 的数据,如果有则直接返回,
否则,执行 location 的逻辑,如果返回状态码为 200,则在输出前以$key $uri$args 为
key,将输入结果存入 memcache】
# nginx -t ##检查配置文件
# nginx -s reload ##重新加载 reload
2.3 编写 php 测试页面
# cd /usr/local/openresty/nginx/html/
# vim test.php
phpinfo();
?>
2.4 启动 php-fpm
# /etc/init.d/php-fpm start
浏览器测试访问 http://172.25.77.1/test.php
3. 安装 memcached
# yum install -y memcached
# /etc/init.d/memcached start
4. 性能测试
# ab -c 10 -n 50000 http://172.25.77.1/index.php
Server Software:
openresty/1.11.2.3 ##服务器软件
Server Hostname:
Server Port:
172.25.77.1 ##服务器主机名
80
Document Path:
##服务器端口
/index.php
Document Length:
16 bytes
Concurrency Level:
10
##测试的页面文档
##文档大小
##并发数
Time taken for tests: 8.919 seconds ##整个测试持续时间
Complete requests:
Failed requests:
Write errors:
50000
0
##失败的请求数
0
Non-2xx responses:
Total transferred:
HTML transferred:
Requests per second:
Time per request:
##完成请求数量
50000
9600000 bytes ##整个场景的网络传输量
800000 bytes ##整个场景的 HTML 内容传输量
5606.09 [#/sec] (mean) ##每秒事务数,mean 表示平均值
1.784 [ms] (mean) ##平均事物响应时间
Time per request:
0.178 [ms] (mean, across all concurrent requests) ##每个请
求实际处理时间
Transfer rate:
1051.14 [Kbytes/sec] received ##平均每秒网络上的流量
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 3
Processing: 0 2 0.5 2 10
Waiting:
0
Total:
1
2 0.5
2 0.5
2
2
10
10
Percentage of the requests served within a certain time (ms)
50% 2 ##50%的用户响应小于 2ms
66% 2 ##60%的用户响应小于 2ms
75% 2 80% 2 90% 2 95% 2 98% 3 99% 4
100%
##99%的用户响应小于 4ms
10 (longest request) ##最大响应时间小于 10ms