vlambda博客
学习文章列表

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