Java-面试-开发工具-1-Nginx

三种机制缓解并发

我在项目中同时使用了Redis 缓存、Nginx 反向代理和 Thymeleaf 模板 来保证较高的并发。

这几种机制对于一个请求的相应顺序:

当客户端向服务器请求一个页面时,依次经过 Nginx 反向代理Redis 缓存Spring Boot 服务器Thymeleaf 模板引擎进行响应。以下是详细的顺序和流程:

  1. Nginx 反向代理
    • 初始入口:客户端的请求首先到达 Nginx。Nginx 检查请求类型和 URL 路径。
    • 静态资源处理:如果请求的是静态资源(如 CSS、JS、图片),Nginx 直接从其缓存中提供响应,避免请求进入服务器。
    • 反向代理转发:对于动态页面请求(如博客帖子页面),Nginx 将请求转发给后端的 Spring Boot 服务器。
  2. Redis 缓存
    • 缓存检查:Spring Boot 服务器接收到请求后,会先查找 Redis 缓存中是否已有该页面的数据。
    • 命中缓存:如果缓存中有页面数据,Spring Boot 服务器会直接从 Redis 获取页面内容,并立即返回给 Nginx,从而快速响应客户端请求。
    • 未命中缓存:若 Redis 中没有找到页面数据,Spring Boot 服务器将进入下一步,由 Thymeleaf 模板引擎来渲染页面。
  3. Thymeleaf 模板渲染
    • 数据准备:Spring Boot 从数据库或其他服务中获取页面所需的数据。
    • 模板渲染:将获取到的数据传递给 Thymeleaf 模板引擎进行动态渲染,将数据填充到 HTML 模板中,生成完整的 HTML 页面。
    • 缓存更新:渲染完成的页面数据可以被缓存到 Redis,以便下次请求直接从缓存获取,减少渲染时间。
  4. 返回响应
    • 发送至 Nginx:生成的响应页面返回到 Nginx。
    • 响应客户端:Nginx 将最终的 HTML 页面发送给客户端,从而完成请求-响应流程。

具体的顺序示意图

  1. 客户端Nginx(反向代理或静态资源返回)
  2. NginxSpring Boot(若为动态页面请求)
  3. Spring BootRedis 缓存(查找缓存数据)
  4. Redis(若缓存命中直接返回)或 Thymeleaf 模板渲染(未命中)
  5. 渲染完成后的 HTMLNginx
  6. Nginx客户端

流程总结

通过这一流程,Redis 缓存显著减少了对数据库的访问次数,Nginx 反向代理则分担了静态资源的请求,Thymeleaf 动态渲染负责生成未缓存的页面。这种协同处理方式使服务器响应更高效,同时降低了数据库和服务器的压力。

测试

我是如何测试网站的并发数量的?

采用 并发压力测试工具:Linux之压测工具Siege安装和使用_siege压测-CSDN博客

性能测试还可以使用 JMeter

安全性

Nginx 限流方式(速率限流、并发限流及黑白名单配置)_nginx 限流类型-CSDN博客