- OpenResty完全開發指南:構建百萬級別并發的Web應用
- 羅劍鋒
- 954字
- 2019-07-25 11:55:03
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的組成
推薦閱讀
- 深入核心的敏捷開發:ThoughtWorks五大關鍵實踐
- Learning Spring 5.0
- 深入淺出DPDK
- Hands-On RESTful Web Services with Go
- 微信小程序項目開發實戰
- Visual C#通用范例開發金典
- Python語言實用教程
- OpenCV Android Programming By Example
- Clojure Polymorphism
- MongoDB Cookbook(Second Edition)
- Software Development on the SAP HANA Platform
- XML程序設計(第二版)
- 基于MATLAB的控制系統仿真及應用
- Scala編程(第4版)
- Cinder:Begin Creative Coding