上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
1.3 组成
OpenResty并不是个“单块”(Monolithic)的程序,而是由众多设计精良的组件集合而成的,这些组件可以灵活组装或拆卸,共同搭建起了完整的高性能服务器开发环境。
核心组件
OpenResty的核心组成部分有四个,分别是:
■ Nginx :高性能的Web服务器(不熟悉的读者可阅读第2章); ■ LuaJIT :高效的Lua语言解释器/编译器; ■ ngx_lua(http_lua) :处理HTTP协议,让Lua程序嵌入在Nginx里运行; ■ stream_lua :与ngx_lua类似,但处理的是TCP/UDP协议。
使用这四个核心组件,OpenResty就可以完成相当多的网络应用开发工作了,但Open-Resty远不止如此,它还包含了其他一些非常有用的Nginx组件和Lua组件,进一步增加了开发工作的便利。
Nginx组件
OpenResty里的Nginx组件以C模块的方式提供,集成在Nginx内部,较常用的有:
■ ngx_iconv :转换不同的字符集编码; ■ ngx_encrypted :使用AES-256算法执行简单的加密运算; ■ ngx_echo :提供一系列“echo”风格的指令和变量; ■ ngx_set_misc :增强的“set_xxx”指令,用来操作变量; ■ ngx_headers_more :更方便地处理HTTP请求头和响应头的指令; ■ ngx_memc :支持各种memcached操作; ■ ngx_redis2 :支持各种Redis操作; ■ ngx_dizzle :支持各种MySQL操作;
■ ngx_postgres :支持各种PostgreSQL操作。
Lua组件
OpenResty里的Lua组件通常以Lua源码的方式提供(*.lua),但个别组件为追求效率会以C语言实现,是动态链接库的形式(*.so)。
较常用的Lua组件有:
■ lua_core :OpenResty的核心功能库;
■ lua_cjson :处理JSON格式的数据,速度很快(使用C语言实现);
■ lua_string :hex/md5/sha1/sha256等字符串功能;
■ lua_upload :流式读取HTTP的上行数据;
■ lua_healthcheck :后端集群健康检查;
■ lua_limit_traffic :定制流量控制策略;
■ lua_lock :基于共享内存的非阻塞锁;
■ lua_lrucache :高效的LRU缓存功能;
■ lua_dns :高效、非阻塞的DNS解析功能;
■ lua_websocket :高效、非阻塞的WebSocket功能;
■ lua_redis :Redis客户端,用起来比ngx_redis2更灵活;
■ lua_memcached :Memcached客户端,用起来比ngx_memc更灵活;
■ lua_mysql :MySQL客户端,用起来比ngx_dizzle更灵活。注
注:目前OpenResty发行包暂不含有操作PostgreSQL的Lua组件,但可以通过opm安装。
辅助工具
核心组件、Nginx组件和Lua组件实现了OpenResty的主要功能,但作为集成开发环境,辅助开发、调试和运维的工具也是必不可少的。OpenResty目前提供的辅助工具有:
■ opm :类似rpm、npm的管理工具,用来安装各种功能组件; ■ resty-cli :以命令行的形式直接执行OpenResty/Lua程序; ■ restydoc :类似man的参考手册,非常详细。
组件示意图
综上可见,OpenResty是一个功能非常完备的服务器开发包,大多数Web应用所需的功能都已经包含在了里面,也就是所谓的“out of box”,我们只需要简单地在自己的程序里引用,就能够轻松享用这些高质量的模块和库,从而快速实现新的业务。
OpenResty的组成可以用图1-1来表示:
图1-1 OpenResty的组成