Openresty和Tengine基于 Nginx 的两个衍生版本,某种意义上他们都和淘宝有关系,前者是前淘宝工程师agentzh主导开发的,后者是淘宝的一个开源项目;
Openresty的最大特点是引入了ngx_lua模块,支持使用lua开发插件;
Tengine的特点是融入了因淘宝自身的一些业务带来的新功能;
Tengine 简介
tengine官方网站:http://tengine.taobao.org/index_cn.html
在 Nginx官方版本的基础上增加的一些定制模块如下:
1、支持动态加载模块:通过加载so文件实现,不用再重新编译整个项目了。
、ngx_proc_daytime_module模块,这个模块允许开一个独立的服务进程,该模块本身并未实现具体的业务逻辑,而是构建了一个TCP Server框架,等待开发者来实现自己的业务;
3、ngx_http_concat_module模块,用于合并多个文件的响应;
4、ngx_http_upstream_session_sticky_module模块,该模块是一个负载均衡模块,通过cookie实现客户端与后端服务器的会话保持, 在一定条件下可以保证同一个客户端访问的都是同一个后端服务器。
5、ngx_http_upstream_check_module模块,用于检查upstream上游服务器的健康状况。
6、trim filter模块,用于删除 html,内嵌 javascript 和 css 中的注释以及重复的空白符。
7、ngx_http_headers_module模块,支持根据Content-Type来设置过期时间。
8、ngx_http_limit_req_module模块,限制访问。
9、扩展了ngx_http_log_module模块,支持syslog和pipe;
Openresty 简介
openresty官方网站:http://openresty.org/cn/index.html
agentzh自己对openresty的介绍:http://blog.zoomquiet.org/pyblosxom/oss/openresty-intro-2012-03-06-01-13.html
agentzh(章亦春)的openresty开源项目(基于nginx),通过各种插件、模块,极大的扩展了nginx能干的事情,而lua扩展更是可以用来定制非常复杂的业务逻辑。作者给nginx赋予的这些新的特性,使openresty在业务开发上变得更加简单,对程序员更加友好,开发者可以在不需要对nginx源码熟悉的情况下就直接使用一些高级特性,比如并发subrequest、dns异步解析、对第三方数据库(如mysql、redis、memcached)等的访问。
先简单看一下openresty扩展的模块:
- ArrayVarNginxModule 支持数组变量
- AuthRequestNginxModule 鉴权模块
- CoolkitNginxModule 一些插件
- NginxDevelKit 封装了一些面对开发者的C接口
- EchoNginxModule 一堆类似于shell命令的指令,支持(串行/并行)子请求等,这个模块很酷,也很实用
- EncryptedSessionNginxModule 会话加密
- FormInputNginxModule 解析POST请求中的参数
- HeadersMoreNginxModule http头处理
- IconvNginxModule 设置响应编码集
- MemcNginxModule 支持对Memcached的访问
- DrizzleNginxModule 支持对mysql的访问
- PostgresNginxModule 支持对Postgres数据库的访问
- RdsCsvNginxModule filter模块,将Drizzle和Postgres两个模块的响应格式化为csv输出
- RdsJsonNginxModule filter模块,将Drizzle和Postgres两个模块的响应格式化为json输出
- RedisNginxModule 支持对redis的访问(只支持select和get命令)
- Redis2NginxModule 支持对redis的访问(支持所有redis命令)
- SetMiscNginxModule 一堆set命令,用于设置变量
- SrcacheNginxModule 通过子请求进行cache
- XssNginxModule 防跨站攻击
- LuaJIT luaJIT解释器
- StandardLuaInterpreter 标准lua解释器
- LuaCjsonLibrary json库
- LuaNginxModule lua接口库 (该模块本身用C实现)
- LuaRdsParserLibrary rds格式解析
- LuaRedisParserLibrary redis响应解析库
- LuaRestyCoreLibrary LuaNginxModule模块的lua实现
- LuaRestyDNSLibrary dns解析库
- LuaRestyLockLibrary
- LuaRestyLrucacheLibrary LRU cache库
- LuaRestyMemcachedLibrary memcached访问接口
- LuaRestyMySQLLibrary mysql访问接口
- LuaRestyRedisLibrary redis访问接口
- LuaRestyStringLibrary 一些hash函数的接口
- LuaRestyUploadLibrary
- LuaRestyUpstreamHealthcheckLibrary
- LuaRestyWebSocketLibrary ws协议解析库
- LuaUpstreamNginxModule 扩展了对upstream的支持
浏览一下上述模块,有几个特点:
1、通过upstream机制已经可以支持对mysql、redis、postgreSQL、memcached 等数据库的访问(全都是异步无阻塞的);
2、跟lua扩展有关的模块,提供给lua脚本调用的库,api非常丰富,涉及各种的操作;