NGINX vs OpenResty缓存性能

我配置了一个简单的NGINX代理,带有一些简单的缓存,但其在OpenResty和普通NGINX中的性能表现非常奇怪。

在负载测试(300rpm)下,普通的NGINX表现得很好,然而,一旦我从NGINX转换到OpenResty,就会有一部分请求突然挂起,无响应,需要20多秒才能返回。

我的nginx.conf如下:

events {
    worker_connections  1024;
}

http {
    proxy_cache_path /var/cache keys_zone=pagecache:10m;

    server {
        listen 80;

        location / {
            return 301 https://$host$request_uri;
        }
    }

    server {
        listen 443 ssl;

        ssl_certificate /etc/ssl/mycert.pem;
        ssl_certificate_key /etc/ssl/mycert.key;

        location / {
            proxy_cache pagecache;
            proxy_cache_key $host$request_uri;
            proxy_cache_lock on;

            proxy_pass http://ssl-proxy-test.s3-website-eu-west-1.amazonaws.com/;

            add_header X-Cache-Status $upstream_cache_status;
        }
    }
}

我的NGINX Dockerfile如下:

FROM nginx

COPY certificates /etc/ssl
COPY nginx.conf /etc/nginx/nginx.conf

我的OpenResty命令如下:

FROM openresty/openresty:buster

COPY certificates /etc/ssl
COPY nginx.conf /usr/local/openresty/nginx/conf/nginx.conf

我已经在几个OpenResty版本(buster,bionic,xenial)上尝试过,并且在每个版本上都获得了相同的结果。

缓慢的请求确实返回304,并带有Cache-Status:HIT头,似乎没有到达上游服务器,这让我认为瓶颈必须在读取缓存数据时出现在内存/磁盘中?而不是来自上游。

我对OpenResty还是新手,因此不太确定它在缓存行为方面与普通的NGINX相比有多大的不同。

有关从哪里开始调试或可能的原因的任何建议?

点赞
用户1830207
用户1830207

在尝试将我的负载测试应用到不同的基础设施后,我发现这个问题似乎只出现在AWS弹性容器服务上。

转换到基于Centos/Amazon Linux的Docker镜像似乎可以更加一致地运行。

尽管仍不确定真正的原因是什么,但至少我有了一个有效的解决方案。

2020-11-04 13:01:29