Java-面试-开发工具-1-Nginx
三种机制缓解并发
我在项目中同时使用了Redis 缓存、Nginx 反向代理和 Thymeleaf 模板 来保证较高的并发。
这几种机制对于一个请求的相应顺序:
当客户端向服务器请求一个页面时,依次经过 Nginx 反向代理、Redis 缓存、Spring Boot 服务器和Thymeleaf 模板引擎进行响应。以下是详细的顺序和流程:
- Nginx 反向代理:
- 初始入口:客户端的请求首先到达 Nginx。Nginx 检查请求类型和 URL 路径。
- 静态资源处理:如果请求的是静态资源(如 CSS、JS、图片),Nginx 直接从其缓存中提供响应,避免请求进入服务器。
- 反向代理转发:对于动态页面请求(如博客帖子页面),Nginx 将请求转发给后端的 Spring Boot 服务器。
- Redis 缓存:
- 缓存检查:Spring Boot 服务器接收到请求后,会先查找 Redis 缓存中是否已有该页面的数据。
- 命中缓存:如果缓存中有页面数据,Spring Boot 服务器会直接从 Redis 获取页面内容,并立即返回给 Nginx,从而快速响应客户端请求。
- 未命中缓存:若 Redis 中没有找到页面数据,Spring Boot 服务器将进入下一步,由 Thymeleaf 模板引擎来渲染页面。
- Thymeleaf 模板渲染:
- 数据准备:Spring Boot 从数据库或其他服务中获取页面所需的数据。
- 模板渲染:将获取到的数据传递给 Thymeleaf 模板引擎进行动态渲染,将数据填充到 HTML 模板中,生成完整的 HTML 页面。
- 缓存更新:渲染完成的页面数据可以被缓存到 Redis,以便下次请求直接从缓存获取,减少渲染时间。
- 返回响应:
- 发送至 Nginx:生成的响应页面返回到 Nginx。
- 响应客户端:Nginx 将最终的 HTML 页面发送给客户端,从而完成请求-响应流程。
具体的顺序示意图
- 客户端 → Nginx(反向代理或静态资源返回)
- Nginx → Spring Boot(若为动态页面请求)
- Spring Boot → Redis 缓存(查找缓存数据)
- Redis(若缓存命中直接返回)或 Thymeleaf 模板渲染(未命中)
- 渲染完成后的 HTML → Nginx
- Nginx → 客户端
流程总结
通过这一流程,Redis 缓存显著减少了对数据库的访问次数,Nginx 反向代理则分担了静态资源的请求,Thymeleaf 动态渲染负责生成未缓存的页面。这种协同处理方式使服务器响应更高效,同时降低了数据库和服务器的压力。
测试
我是如何测试网站的并发数量的?
采用 并发压力测试工具:Linux之压测工具Siege安装和使用_siege压测-CSDN博客
性能测试还可以使用 JMeter