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

news2025/1/12 3:59:37

目录

  • 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 案例介绍

在这里插入图片描述

商品详情页系统架构

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

命令描述
ngx.arg指令参数,如跟在content_by_lua_file后面的参数
ngx.varrequest变量,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 就能搞定

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

在这里插入图片描述

	就是我们有把商品详情页直接做成一个静态页面,然后这样子每次全量的更新,把数据全部静态放到`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访问测试

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/620836.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Unity100个实用小技巧】Git报错:error: some local refs could not be updated;

☀️博客主页:CSDN博客主页 💨本文由 我是小狼君 原创,首发于 CSDN💢 🔥学习专栏推荐:面试汇总 ❗️游戏框架专栏推荐:游戏实用框架专栏 ⛅️点赞 👍 收藏 ⭐留言 📝&…

SpringBoot+Mybatis+Thymeleaf实现的疫情防控物资管理系统

本系统具体使用的技术是:后端使用SpringBootMybatis,前端使用了Thymeleaf框架,数据库使用的是MySql 8.0。开发工具使用的是IDEA。 本系统前端是使用了前辈的管理系统模板,具体的系统模块功能如下图所示: 一、系统首页…

《环信开发者技术等级考试》有奖问答正在进行中。。。

欢迎参加《环信开发者技术等级考试》,希望大家凝神静气,考出水平。 值此环信十周年,参与本次考试所有考生均可凭实力获得周年大礼包。 考场设置 本次考试主要考察大家对集成环信IM以及环信开通服务的熟悉度。 题型包含单选和多选&#xff…

算法修炼之筑基篇——筑基一层初期(解决01背包问题)

✨博主:命运之光 ✨专栏:算法修炼之练气篇​​​​​ ✨博主的其他文章:点击进入博主的主页 前言:学习了算法修炼之练气篇想必各位蒟蒻们的基础已经非常的扎实了,下来我们进阶到算法修炼之筑基篇的学习。筑基期和练气期…

物联网网关,原来是这么回事,感谢!

《高并发系统实战派》-- 你值得拥有 文章目录 物联网网关是什么?为什么要搞物联网网关?物联网网关作用? 物联网网关技术原理物联网网关实战开发边缘计算与物联网网关的碰撞边缘计算的理解物联网网关结合边缘计算 物联网网关是什么&#xff1f…

Windows10下docker安装及遇到的问题并且在docker快速部署onlyoffice

docker安装官网地址 docker安装超链接点击进入下载 这里下载的是window版的docker,你们根据自身实际情况下载; 安装docker遇到的问题: 第一个问题 : 启动遇到Docker Desktop is unable to detect a Hypervisor 虚拟化技术没打开,需要打开…

有哪些你觉得非常好用的软件?

以下是我认为非常好用的软件: 1. 金鸣表格文字识别:由深圳市金鸣科技有限公司开发,系统采用超前AI,经深度学习,识别精准,可将图片、PDF等转为excel、word,同时支持证件、票据等批量合并转为结构…

“好不容易进的腾讯,你凭什么要离开?”

前几天,我在网上看到一个故事。 故事的主人翁是18届的校招生,目前入职腾讯,工作了一个月。这一个月给他的感受是大量的写测试用例,感觉自己写测试用例的能力熟练了不少,测试技能倒是没有多大的提高,真正需…

vue使用纪要

一、基础总结 1、构成 1)位置目录 如下图所示: 一个页面一个vue文件,位置在src下边的views里边; 如下图: 一个vue文件,对应一个或多个js文件,js放在src下边的api中; 2&#xf…

开源杀毒引擎库libclamav的使用方法

《开源杀毒引擎ClamAV的源码编译安装》中我们讲了ClamAV的安装和使用方法,可以很方便的使用ClamAV提供的工具进行病毒扫描,当然我们也可以在我们的程序中集成它提供的libclamav开发库来实现病毒扫描,libclamav是一个功能强大的病毒扫描库&…

代码随想录刷题第46天|LeetCode139单词拆分、多重背包

1、LeetCode139单词拆分 题目链接:139单词拆分 1、dp[i] : 字符串长度为i的话,dp[i]为true,表示可以拆分为一个或多个在字典中出现的单词。 2、递推公式:如果确定dp[j] 是true,且 [j, i] 这个区间的子串出现在字典里…

Using index Using where和 Using where Using index有何区别

先把结论呈现出来: 1、Using index : 查询的列被索引覆盖,并且where筛选条件是索引的是前导列,Extra中为Using index 2、 Using index ,Using where:查询的列被索引覆盖,数据都是先通过索引查询出来的…

语法篇JS基础

一、初识JavaScript 1.1前景 CSS 预处理器 CSS 预处理器定义了一种新的语言,其基本思想是,用一种专门的编程语言,为 CSS 增加了一些 编程的特性,将 CSS 作为目标生成文件,然后开发者就只要使用这种语言进行 CSS 的编码…

cookies介绍

cookies介绍 Cookies概述 Cookies是网络浏览器中用于存储用户信息的小文本文件。Cookie的大小通常限制在4KB以内(不同浏览器内核可能有细微差异或有单域名更高的限制)。当你访问某个网站时,该网站可能会在你的计算机上创建一个cookie&#…

PDB Database - ESM Atlas PDB 数据集的多维度分析与整理 (3)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/131095395 PDB 三大数据集的多维度分析与整理: 人工提交 - RCSB PDB:PDB Database - RCSB PDB 数据集的多维度分…

YUV4:2:0是什么意思

我们经常看到YUV中4:2:0,看着好像懂,仔细看又不懂。 比例,N1:N2:N3里面的数字指水平方向上的相对采样率,N1表示在奇数行和偶数行里Y样本的个数,N2表示奇数行里Cb和Cr样本的个数,N3…

ciscn_2019_s_4-栈迁移

1,三连 程序功能:两次输入 题目类型猜测:栈溢出,栈迁移 2,ida分析 溢出点: system_plt地址: 思路:由于无直接getshell的利用函数,溢出空间只有8字节(ebpret占用无法继续…

数据结构与算法脑图

数据结构 非受限线性表 顺序结构 数组 支持 O(1) 的随机访问平均为 O(n) 的插入和删除警惕越界错误,导致 Stack Over Flow链式结构 单链表 不支持随机访问,需要遍历去访问结点插入和删除只需要移动指针,时间复杂度为 O(1)每个结点需要额外的空间存储指针,需要的内存比数组…

控制视图内容的位置

文本域中的提示内容在默认情况下是垂直居中的,要改变文本在文本域中的位置,可以使用android:gravity来实现。 利用android:gravity可以指定如何在视图中放置视图内容,例如,如何在文本域中放置文本。 如果希望视图文本显示在上方&a…

RocketMQ 学习社区重磅上线!AI 互动,一秒了解 RocketMQ 功能源码

作者:RocketMQ学习社区 RocketMQ 背景 Apache RocketMQ 诞生至今,一直服务于 100% 阿里集团内部业务、阿里云以及开源社区数以万计的企业客户。 历经十多年双十一严苛流量验证的 RocketMQ,承载了超过万亿级消息规模的洪峰压力。2021 年 Ap…