hello all
线上应用采用openresty + lua 的架构,上线后发现延时严重。时常会出现3.01秒的请求,奇怪的是3.01秒的时间比较固定,也会穿插延时更长的情况。但是3.01占一半左右。目前单台物理机qps在4k左右,redis的命中率大概80%。已确认出现延迟的请求在redis命中的时候也经常出现,不是回源所造成。
目前改为nginx、redis同台物理的部署方式
nginx 配置:
upstream redis {
server 192.168.132.23:6379 weight=1;
keepalive 1024;
}
upstream backend {
server 127.0.0.1:8001 weight=1;
server 127.0.0.1:8002 weight=1;
server 127.0.0.1:8003 weight=1;
server 127.0.0.1:8004 weight=1;
server 127.0.0.1:8005 weight=1;
server 127.0.0.1:8006 weight=1;
}
location @fetch {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ~* /area/get {
default_type application/json;
set $key_prefix "AREA-";
set $redis_key $key_prefix$arg_fid;
content_by_lua_file conf/get_redis_key_area.lua;
error_page 404 500 502 503 504 =200 @fetch;
}
lua代码:get_redis_key_area.lua
local parser = require("redis.parser")
local res = ngx.location.capture("/redis_get", {args = { key = ngx.var.redis_key } })
local prefix
if ngx.var.arg_callback then
prefix = ngx.var.arg_callback .. "("
else
prefix = "("
end
local subfix=")"
if res.status == 200 then
reply = parser.parse_reply(res.body)
if reply == nil then
return ngx.exit(ngx.HTTP_INTERNAL_SERVER_ERROR)
end
ngx.print(prefix)
ngx.print(reply)
ngx.print(subfix)
end