前言
lua是一夸小巧,灵活且高效的脚本语言,用标准c语言编写并以源代码形式开发,在很多业务场景下配合适当的设计,可以带来意想不到的效果;
举个常见的例子,现在几乎很多公司都会用到nginx作为代理服务器,假如现在有这么个需求,需要做黑名单过滤,或者在网关这一层做流控,这该怎么做呢?
实现思路
在服务端(java)中编写过滤器,在过滤器中统一拦截;
这里列举了3种实现的思路,至于实现方案,可能还有更多,但是我们想想,在nginx中编写逻辑块貌似不是很多人擅长的;在代码层面做不是不可以,而是这样一来,在涉及到高并发的业务高峰期,这必然会对后端服务造成较大的压力,那么还有没有其他更好的处理办法呢?
这就是要说的lua,即nginx作为网关仍然作为代理服务器,由于nginx可以集成lua,于是使用lua进行配合,来完成上面的业务实现的设计;
ngx_lua模块概念
ngx_lua模块由淘宝技术团队开发,通过将lua解释器集成进nginx;
可采用lua脚本实现业务逻辑,由于lua的紧凑、快速以及内建协程,所以在保证高并发服务能力的同时极大地降低了业务逻辑实现成本;
openrestry
openresty是一个基于nginx与 lua 的高性能 web 平台,其内部集成了大量精良的 lua库、第三方模块以及大多数的依赖项;用于方便地搭建能够处理超高并发、扩展性极高的动态 web 应用、web 服务和动态网关;
openresty内部已经集成了nginx和lua,所以使用起来会更加方便;
简单来说,直接安装并使用openrestry,就可以达到同时使用nginx与lua的效果,同时基于openrestry,还可以在内部操作其他中间件,比如mysql,redis,kafka等,这样就使得业务架构在设计上具备了更大的灵活性;
openrestry安装步骤
1、下载openrestry
2、解压缩文件
3、进入openresty目录执行配置
这一步有点类似于nginx的源码安装,进行相关的环境变量的配置,这里直接使用默认的就好;