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

简介: 高性能软件负载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 就能搞定

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

dc76fa6fabca4bd7a3803842c6d6c276.png

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

2.1 缺点

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

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访问测试

目录
相关文章
|
安全 测试技术 数据库
OWASP ZAP 工具简介
OWASP ZAP 工具简介
1494 0
OWASP ZAP 工具简介
|
JSON 机器人 数据安全/隐私保护
钉钉中,如何获取机器人发送群聊消息接口返回的加密消息id(processQueryKey)?
钉钉中,如何获取机器人发送群聊消息接口返回的加密消息id(processQueryKey)?【1月更文挑战第5天】【1月更文挑战第24篇】
796 5
|
11月前
|
弹性计算 开发者
阿里云服务器优惠政策解读:个人开发者、学生及初创企业最新租赁解读
阿里云2025年最新优惠:新用户38元/年享2核2G轻量服务器;老用户99元/年用ECS;学生领300元代金券免费获取;企业199元/年购2核4G云服务器。配置灵活,续费同价,助力个人开发者、学生及初创企业低成本上云。
1140 8
|
11月前
|
人工智能 自然语言处理 供应链
2025中国工业软件厂商推荐,优质国产MES厂商有哪些特性?
在智能制造浪潮下,国产工业软件加速崛起。盘古信息凭借自主MES系统,赋能上千家工厂实现透明化生产,服务比亚迪、大疆等龙头企业,以技术领先、全场景覆盖和国产化适配优势,领跑国产MES赛道,推动“中国制造”迈向“中国智造”。
555 0
|
运维 监控 Java
Tomcat配置参数connection-timeout的详细解析和应用讨论
`connection-timeout` 的配置需要根据实际的应用场景、服务器性能、网络环境以及用户行为来决定。因此,开发和运维团队通常需要结合应用特点和监控数据,经过一系列的测试和调优,来确定一个既能保证用户体验,又能维护服务器稳定性和安全性的最优值。
1169 0
|
存储 弹性计算 安全
阿里云服务器实例选择:经济型、通用算力型、计算型、通用型、内存型实例选择参考
当我们通过阿里云的活动购买云服务器会发现,相同配置的云服务器往往有多个不同的实例可选,而且价格差别也比较大,例如同样是4核8G的配置的云服务器,经济型e实例活动价格1595.11元/1年起,通用算力型u1实例要955.58元/1年起,而计算型c8i实例则要2845.81元/1年起,价格差别还是比较大的,因此,阿里云经济型、通用算力型、计算型、通用型、内存型实例云服务器有何差别就是很多新手用户比较关心的问题了,下面小编来为大家简单介绍下它们之间的区别。
1182 16
|
存储 持续交付 开发工具
clang-format
clang-format
2087 7
|
Ubuntu Shell API
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
|
存储 编解码 Java
图书馆信息管理系统(总)(中)
图书馆信息管理系统(总)(中)
766 2
|
存储 安全 数据中心
交换机和集线器有什么区别?
【8月更文挑战第4天】
8727 12

热门文章

最新文章