利用 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交互時有大量數據傳輸