转自:https://blog.csdn.net/phil_code/article/details/79154271

1. OpenResty
OpenResty是一个基于 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:
1、提高redis的读取速度
2、减少带宽的占用
压缩会消耗cpu时间,小于1K的数据不压缩tps更高。
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库进行压缩。

四. 定时更新
按下图第1和第2步定时执行,nginx lua定时器定时请求tomcat页面的url,返回的页面html保存在redis。
缓存有效期可设置长些,比如1个小时,可保证1个小时内tomcat挂掉,仍可使用缓存数据返回,缓存的定时更新时间可设置短些,比如1分钟,保证缓存快速更新

五.请求转发
浏览器打开页面:
1、nginx先从redis获取页面html
2、redis不存在数据时,从tomcat获取页面,同时更新redis
3、返回页面HTML给浏览器

六. 单进程定时更新
Nginx的所有worker进程都可以处理前端请求转发到redis,只有nginx worker 0才运行定时任务定时更新redis,lua脚本中通过ngx.worker.id()获取worker进程编号。

七. 可配置化
通过管理后台配置需要缓存的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的配置。

最新文章

  1. PHP 高级编程(5/5) - SPL 数组重载
  2. 虚拟机备份克隆导致SQL SERVER 出现IO错误案例
  3. escape(), encodeURI()和encodeURIComponent()(转)
  4. 开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别
  5. 近期C#项目中总结
  6. chrome编辑DOM
  7. 完全迁移到red hat来的相关问题解决和配置
  8. 判断Set里的元素是否重复、==、equals、hashCode方法研究-代码演示
  9. LeetCode Dungeon Game
  10. 【HDOJ】2774 Shuffle
  11. ExecuteScalar 要求已打开且可用的 Connection。连接的当前状态为已关闭。
  12. unity3d游戏开发学习之使用3dmax创建导弹模型
  13. C#自动实现Dll(OCX)控件注册的两种方法
  14. [Deep Learning] 神经网络基础
  15. VIM系统复制粘贴
  16. java跨域
  17. gitlab 与 jenkins 关联
  18. Java SE之正则表达式三:替换
  19. 【BZOJ1778】[Usaco2010 Hol]Dotp 驱逐猪猡
  20. 第四篇——Struts2的引入多个配置文件

热门文章

  1. fastjson学习笔记
  2. 大数据笔记(二)——Apache Hadoop的体系结构
  3. JavaScript export
  4. AWK之随心所欲-高手篇
  5. 测开之路一百零七:bootstrap排版
  6. Jenkins简介&邮箱配置
  7. PHPstorm Xdebugger最全详细
  8. Spring Boot系列(四) Spring Boot 之验证
  9. linux--初识别
  10. 编码规范(code style guide)