openResty,站在巨人的肩膀上
聊一聊
openResty
1、是什么?
OpenResty® 是一个基于 Nginx[1] 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
OpenResty® 通过汇聚各种设计精良的 Nginx[2] 模块(主要由 OpenResty 团队自主开发),从而将 Nginx[3]有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师可以使用 Lua 脚本语言调动 Nginx[4] 支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。
OpenResty® 的目标是让你的Web服务直接跑在 Nginx[5] 服务内部,充分利用 Nginx[6] 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。
2、如何使用?
①、安装
对于一些常见的 Linux 发行版本(Ubuntu、Debian、CentOS、RHEL、Fedora、OpenSUSE、Alpine 和 Amazon Linux), OpenResty® 提供 官方预编译包[7]。确保你首先用这种方式来安装。
对于 Mac OS X 或 macOS 用户,强烈推荐您使用 homebrew[8] 包管理工具安装 OpenResty。可以直接使用下面 这一条命令:
brew install openresty/brew/openresty
如果你之前是从 homebrew/nginx
安装的 OpenResty,请先执行:
brew untap homebrew/nginx
如果您还没有下载 OpenResty[9] 的源码包, 请到 Download[10] 页下载。
首先,您可以根据下面的示例安装和构建OpenResty[11]。
tar -xzvf openresty-VERSION.tar.gz
cd openresty-VERSION/
./configure
make
sudo make install
示例中的 VERSION
替换成 OpenResty[12]的版本号, 比如 1.11.2.1
。如果您在构建过程中需要对于细节更加灵活的控制,请您继续阅读。
安装成功后,我们就可以使用 openresty 直接输出 html 页面。
②、配置
首先我们可以创建一个工作目录:
mkdir /home/www
cd /home/www/
mkdir logs/ conf/
其中 logs 目录用于存放日志,conf 用于存放配置文件。
接着,我们在 conf 目录下创建一个 nginx.conf 文件 代码如下:
worker_processes 1;
error_log logs/error.log;
events {
worker_connections 1024;
}
http {
server {
listen 9000;
location / {
default_type text/html;
content_by_lua '
ngx.say("<p>Hello, World!</p>")
';
}
}
}
如果你熟悉 nginx 的配置,应该对以上代码就很熟悉。这里我们将 html 代码直接写在了配置文件中。
③、启动
默认情况下 openresty 安装在 /usr/local/openresty 目录中,启动命令为:
cd /home/www
/usr/local/openresty/nginx/sbin/nginx -p `pwd`/ -c conf/nginx.conf
如果没有任何输出,说明启动成功,-p 指定我们的项目目录,-c 指定配置文件。
3、与Nginx比较
Nginx
是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP
服务。
1、处理响应请求很快
2、高并发连接
3、低的内存消耗
4、具有很高的可靠性:
5、高扩展性
6、热部署
nginx 只有一个master
进程和已配置个数的 worker
进程,master
进程把请求交给 worker
去处理,一个worker
在可能出现阻塞的地方会注册一个事件就放过去了(epoll模型),会继续处理后续的请求(非阻塞),当这个事件处理完之后会通过callback
来通知worker
继续处理那条请求后续的事情(事件驱动),单个worker
可以处理大量请求而不会轻易让整个系统卡住。
master
管理进程与worker
工作进程的分离设计,使得 Nginx
具有热部署的功能,可以在 7 × 24 小时不间断服务的前提下,升级 Nginx 的可执行文件。也可以在不停止服务的情况下修改配置文件,更换日志文件等功能。
openresty 是基于 nginx 增加了模块,我们说的其实也就是 nginx 的性能.
4、解决了什么问题或痛点?
OpenResty解决的是高并发的痛点,异步处理方式提高了服务器整体负载能力,而不是提高某个请求的速度。
参考
openResty官方:http://openresty.org/cn/
OpenResty 究竟解决了什么痛点?:https://www.zhihu.com/question/266535644?sort=created