OpenResty完全开发指南:构建百万级别并发的Web应用
上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组件,进一步增加了开发工作的便利。为了叙述方便,本书约定用C语言实现的OpenResty组件名字加“ngx”前缀,用Lua语言实现的OpenResty组件名字加“lua”或“lua-resty”前缀。

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的组成