高性能软件负载OpenResty常用命令

目录

  • 1 案例介绍
  • 2 中小公司的详情页方案
    • 2.1 缺点
  • 3 大型公司的商品详情页的核心思想
    • 3.1 生成静态页
    • 3.2 推送到文件服务器
    • 3.3 布隆过滤器过滤请求
    • 3.4 lua直连Redis读取数据
    • 3.5 OpenResty 渲染数据
  • 4 环境准备
    • 4.1 配置文件服务器
    • 4.2 配置资源反向代理
    • 4.3 访问测试


1 案例介绍

高性能软件负载OpenResty常用命令_第1张图片

商品详情页系统架构

主要帮助对http请求取参、取header头、输出等

命令 描述
ngx.arg 指令参数,如跟在content_by_lua_file后面的参数
ngx.var request变量,ngx.var.VARIABLE引用某个变量,lua使用nginx内置的绑定变量. ngx.var.remote_addr为获取远程的地址,
ngx.ctx 请求的lua上下文,每次请求的上下文,可以在ctx里记录,每次请求上下文的一些信息,例如:request_id, access_key等等
ngx.header 响应头,ngx.header.HEADER引用某个头
ngx.status 响应码
ngx.log 输出到error.log
ngx.send_headers 发送响应头
ngx.headers_sent 响应头是否已发送
ngx.resp.get_headers 获取响应头
ngx.is_subrequest 当前请求是否是子请求
ngx.location.capture 发布一个子请求
ngx.location.capture_multi 发布多个子请求
ngx.print 输出响应
ngx.say 输出响应,自动添加‘\n‘
ngx.flush 刷新响应
ngx.exit 结束请求

商品详情页架构的要求,高可用,高性能,高并发 ;一般来说 业界分为两种主流的方案

2 中小公司的详情页方案

很多中小型 电商的商品详情页 可能一分钟都没有一个访问,这种的话,就谈不上并发设计,一个tomcat 就能搞定

	还有一种中小型公司呢?虽然说公司不大,但是也是有几十万日活,然后几百万用户,他们的商品详情用,采取的方案可能是全局的一个静态页面这样子

高性能软件负载OpenResty常用命令_第2张图片

	就是我们有把商品详情页直接做成一个静态页面,然后这样子每次全量的更新,把数据全部静态放到`redis`里面,每次数据变化的时候,我们就通过一个Java服务去渲染这个数据,然后把这个静态页面推送到到文件服务器

2.1 缺点

  • 这种方案的缺点,如果商品很多,那么渲染的时间会很长,达不到实时的效果
  • 文件服务器性能高,tomcat性能差,压力都在Tomcat服务器了
  • 只能处理一些静态的东西,如果动态数据很多,比如有库存的,你不可能说每次去渲染,然后推送到文件服务器,那不是更加慢?

3 大型公司的商品详情页的核心思想

下面这张图就是整体的思路

高性能软件负载OpenResty常用命令_第3张图片

上图展示了核心思想主要有以下五步来完成

3.1 生成静态页

	添加修改页面的时候生成静态页,这个地方生成的是一个通用的静态页,敏感数据比如 价格,商品名称等,通过占位符来替换,然后将生成的静态页的链接,以及敏感数据同步到redis中,如果只修改价格不需要重新生成静态页,只需要修改redis敏感数据即可。

3.2 推送到文件服务器

	这个的文件服务器泛指能够提供静态文件处理的文件服务器,nginx代理静态文件,tomcat,以及OSS等都算静态文件服务器,生成完静态文件后将文件推送到文件服务器,并将请求连接存放进redis中

3.3 布隆过滤器过滤请求

	Redis和nginx的速度很快,但是如果有人恶意请求不存在的请求会造成redis很大的开销,那么可以采用布隆过滤器将不存在的请求过滤出去。

3.4 lua直连Redis读取数据

	因为java连接Reids进行操作并发性能很弱,相对于OpenResty来说性能差距很大,这里使用OpenResty,读取Redis中存放的URL以及敏感数据。

3.5 OpenResty 渲染数据

	从Redis获取到URL后lua脚本抓取模板页面内容,然后通过redis里面的敏感数据进行渲染然后返回前端,因为都是lua脚本操作性能会很高

4 环境准备

下面我们就基于这个架构来安装和搭建所需要的环境

4.1 配置文件服务器

我们的的文件服务器页面在nginx-server的代码中可以通过http://IP/template.html访问

4.2 配置资源反向代理

通过nginx来配置资源服务器

upstream dynamicserver {
      server 192.168.64.1:9001 fail_timeout=60s max_fails=3;
      server 192.168.64.1:9002 fail_timeout=60s max_fails=3;
      keepalive 256;
}

server {
        server_name www.resources.com 127.0.0.1;
        default_type text/html;
        charset   utf-8;
        location ~ .*$ {
            index index.jsp index.html;
            proxy_pass http://dynamicserver;
            # 表示重试超时时间是3s
            proxy_connect_timeout      30;   
            proxy_send_timeout         10;    
            proxy_read_timeout         10; 
            #表示在 6 秒内允许重试 3 次,只要超过其中任意一个设置,Nginx 会结束重试并返回客户端响应
            proxy_next_upstream_timeout 60s;
            proxy_next_upstream_tries 3;

       }
}

4.3 访问测试

可以通过访问www.resources.com/template.html访问测试

高性能软件负载OpenResty常用命令_第4张图片

你可能感兴趣的:(nginx,openresty,lua,开发语言)