利用 openresty 的 drizzle-nginx-module模块 读取数据 传递到 php后端
利用到 openresty 的并发,无阻塞,mysql连接池,memcache|redis连接池特性
php 原生读取mysql数据 或者 存储在memcache|redis 的数据
有建立连接开销,没有连接池,php进程也是阻塞,也无法多个数据源并发读取
激进的方案是 用 ngx_lua 替代 php
考虑到实际 php做为模板系统 数据读取 修改 由 openresty 接管 加上 通用缓存模块 memcache 模块 redis 模块
性能还是可以有很多提升
nginx.conf
server 块同级
upstream mysql
{
drizzle_server 127.0.0.1:3306 dbname=wsonline password=123456 user=root protocol=mysql;
drizzle_keepalive max=200 overflow=reject;
}
location /api
{
drizzle_query "select * from twuj_ask order by id desc limit 3";
drizzle_pass mysql;
rds_json on;
}
location ~ .php
{
fastcgi_index index.php;
fastcgi_pass unix:/tmp/php.sock;
set $script $uri;
set $data '';
rewrite_by_lua '
local res = ngx.location.capture("/api")
if res.status == 200 then
ngx.var.data= res.body
end
';
fastcgi_param DATA $data;
include fcgi.conf;
}
php处理得到的数据
<?php
$data = json_decode(getenv('DATA'),true);
print_r($data);
此方案有性能问题 nginx交互时有大量数据传输