来源:blog.csdn.net/phil_code/article/details/79154271
一. OpenRestyOpenResty是一个基于 Nginx与 Lua的高性能 Web平台,其内部集成了大量精良的 Lua库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态Web 应用、Web 服务和动态网关。
接入层缓存技术就是使用OpenResty的技术用Lua语言进行二次开发。
二.Nginx +redis下图左边是常用的架构,http请求经过nginx负载均衡转发到tomcat,tomcat再从redis读取数据,整个链路过程是串行的,当tomcat挂掉或者tomcat线程数被消耗完,就无法正常返回数据。
使用OpenResty的lua-resty-redis模块使nginx具备直接访问redis的能力,不占用tomcat线程,Tomcat暂时挂掉仍可正常处理请求,减少响应时长,提高系统并发能力。
三.压缩减少带宽数据大于1K,nginx压缩再保存到redis:
OpenResty并没有提供redis连接池的实现,需要自己用lua实现redis的连接池,在网上已有实现的例子http://wiki.jikexueyuan.com/project/openresty/redis/out_package.html
,直接参照使用。
Redis的value值用json格式保存{length:xxx,content:yyy}
,content是压缩后的页面内容,length是content压缩前的大小,length字段是为了在读取redis时,根据length的大小来判断是否要解压缩content的数据。
使用lua-zlib库进行压缩。
![ba94123b1d5805cb3ccc3edd896bdfa6.png](https://i-blog.csdnimg.cn/blog_migrate/ec7d5e6180071388714ec798bf103b58.png)
四. 定时更新
按下图第1和第2步定时执行,nginx lua定时器定时请求tomcat页面的url,返回的页面html保存在redis。
搜索公众号互联网架构师后台回复“2T”,获取一份惊喜礼包。
缓存有效期可设置长些,比如1个小时,可保证1个小时内tomcat挂掉,仍可使用缓存数据返回,缓存的定时更新时间可设置短些,比如1分钟,保证缓存快速更新
![5c3df6c0adea0039f3d1c2362fd55dc9.png](https://i-blog.csdnimg.cn/blog_migrate/34702aee86908101bd3d8b746e71fec2.png)
五.请求转发
浏览器打开页面:
![ec3f06a9113433a84c47e153ad0e3b94.png](https://i-blog.csdnimg.cn/blog_migrate/1bdf12e06542450b3327709c5384f3fb.png)
六. 单进程定时更新
Nginx的所有worker进程都可以处理前端请求转发到redis,只有nginx worker 0才运行定时任务定时更新redis,lua脚本中通过ngx.worker.id()
获取worker进程编号。
![32ced187dcb2c1840bbbfa9d2504a28b.png](https://i-blog.csdnimg.cn/blog_migrate/55a763bb2bde1efc7b0cf380b744b972.png)
七 . 可配置化
通过管理后台配置需要缓存的URL,可配置缓存URL、缓存有效期、定时更新时间,比如modify?url=index&&expire=3600000&&intervaltime=300000&sign=xxxx
,sign的值是管理后台secretkey对modify?url=index&&expire=3600000&&intervaltime=300000
签名运算得到的,nginx端用相同的secretkey对modify?url=index&&expire=3600000&&intervaltime=300000
签名运算,得到的值与sign的值相同则鉴权通过,允许修改nginx的配置。
![fc64ba71416820aa56b12ce9ac2520cc.png](https://i-blog.csdnimg.cn/blog_migrate/817463921c000ea4272ebf764a1e6240.png)
PS:如果觉得我的分享不错,欢迎大家随手点赞、转发、在看。
PS:欢迎在留言区留下你的观点,一起讨论提高。如果今天的文章让你有新的启发,欢迎转发分享给更多人。