vlambda博客
学习文章列表

打造高性能服务器的通牒Nginx(负载均衡+缓存)web层拦截

1:写在前头

众所周知,Ngxin是一款高性能的服务器,可用于负载均衡,反向代理等功能,在日常的开发过程我们用到最多的应该是它的负载均衡,这个功能在多机部署的时候很是管用啊,毕竟现在很多公司基本上都是通过集群来做弹性伸缩的,但是这个容易受到物理条件的限制,随着流量(这里说的查询)的不断的增大(可能伴随着爆发性的增长,这里要注意措辞,是“爆发性”),那么添加物理机器的方式就会出现瓶颈,不过这个时候就可以用到Nginx给我们提供的缓存模块来解决这个问题,没错,本篇重要讲解就是Nginx的缓存。话不多说,就是干。

2:食用指南

2.1:负载均衡

1:首先搭建一个springboot项目,由于这里是演示,所以项目很是简单,源码以及Nginx文件都上传了,项目结构如下

2:依次启动项目在 8080,8081,8082 这三个端口,如下图所示

打造高性能服务器的通牒Nginx(负载均衡+缓存)web层拦截

3:配置 nginx 的 /nginx-1.16.0/conf/nginx.conf文件

打造高性能服务器的通牒Nginx(负载均衡+缓存)web层拦截

4:启动nginx,先到根目录,继续使用windows的骚操作,"cmd"

打造高性能服务器的通牒Nginx(负载均衡+缓存)web层拦截

打造高性能服务器的通牒Nginx(负载均衡+缓存)web层拦截

5:验证

打造高性能服务器的通牒Nginx(负载均衡+缓存)web层拦截

刷新

打造高性能服务器的通牒Nginx(负载均衡+缓存)web层拦截

再次刷新

打造高性能服务器的通牒Nginx(负载均衡+缓存)web层拦截

可以尝试着多刷新几次,这里没有配置权重,默认都一样,最后发现这个请求的服务器会在 8080 8081 8082之前来回切换,这里使用的是端口号(port作为服务器的标识)也就达到了负载均衡的效果,负载均衡到这里就结束了。接下来会介绍缓存功能。

2.2:缓存

1:先搞下配置文件,如下

打造高性能服务器的通牒Nginx(负载均衡+缓存)web层拦截

2:缓存目录没有文件

打造高性能服务器的通牒Nginx(负载均衡+缓存)web层拦截

3:启动nginx,两种方式,这里使用第一种

3.1:关闭之前启动nginx的服务器,ngxin.exe -s stop 再 nginx.exe

3.2:ngxin.exe -s reload

打造高性能服务器的通牒Nginx(负载均衡+缓存)web层拦截

4:验证

打造高性能服务器的通牒Nginx(负载均衡+缓存)web层拦截

然后查看缓存文件

打造高性能服务器的通牒Nginx(负载均衡+缓存)web层拦截

这里使用vs打开,发现这里数据和上面接口返回的一致,说明缓存成功了。

打造高性能服务器的通牒Nginx(负载均衡+缓存)web层拦截

4.2:再次请求,发现命中了。Nginx-Cache 为 HIT

打造高性能服务器的通牒Nginx(负载均衡+缓存)web层拦截

4.3:这时候我就有点怀疑了,是不是巧合?唉,我要换一个请求 这个将id = 2,返回值和预期一样,再次查看下缓存文件夹

打造高性能服务器的通牒Nginx(负载均衡+缓存)web层拦截

4.4:查看文件夹

打造高性能服务器的通牒Nginx(负载均衡+缓存)web层拦截

4.5:再次查看文件

4.6:验证缓存是否起作用,可以使用 id = 1同样的方式 再次请求id = 2 ,这时候会发现 Nginx-Cache 为 HIT

3:拓展

对于流量比较大的项目,使用缓存是必须的,同时提高系统吞吐量以及RTT,考虑到以下三种解决方案

3.1:架构技术选型

Nginx做负载均衡(+ 缓存),redis二级缓存,DB隔离级别,ES(数据的检索方式)

3.2:代码优化

异步 + 多线程

3.3:参数调优

Tomcat:线程池,连接器,IO方式(BIO,NIO,AIO,APR等),不必要的静态资源过滤

JVM:GC方式,响应快的CMS,G1;JVM参数调优,最小堆,最大堆大小,是否需要开启逃逸分析等

4:总结

通过这个demo,可以学习到nginx不仅仅只是作为负载均衡去用,还可以使用其缓存,搭配上其他的缓存或者是一些高级的搜索引擎和代码优化可以使得项目的吞吐量得到量级的提升,在平时的项目中可以多做做优化之类的,这大概就是所谓的工匠精神吧。

本篇中只是介绍了关于Nginx缓存的简单配置,至于其他的配置和功能,还需读者尝试,验证。

5:附件地址

test-nginx-high-performance: Nginx的负载均衡和缓存