浅谈openresty

liwf 2020-01-10

浅谈openresty

  • 为什么会有OpenResty?
    • 我们都知道Nginx有很多的特性和好处,但是在Nginx上开发成了一个难题,Nginx模块需要用C开发,而且必须符合一系列复杂的规则,最重要的用C开发模块必须要熟悉Nginx的源代码,使得开发者对其望而生畏。为了开发人员方便,所以接下来我们要介绍一种整合了Nginx和lua的框架,那就是OpenResty,它帮我们实现了可以用lua的规范开发,实现各种业务,并且帮我们弄清楚各个模块的编译顺序。
    • OpenResty(又称:ngx_openresty) 是一个基于 NGINX 的可伸缩的 Web 平台,由中国人章亦春发起,提供了很多高质量的第三方模块。OpenResty 是一个强大的 Web 应用服务器,Web 开发人员可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,更主要的是在性能方面,OpenResty可以 快速构造出足以胜任 10K 以上并发连接响应的超高性能 Web 应用系统。它最大的特点就是用同步的代码逻辑实现非阻塞的调用,其次它有单进程内的 LRU cache 和进程间的 share DICT cache,而且它是揉合 nginx 和 LuaJIT 而产生的。 OpenResty 致力于将你的服务器端应用完全运行于 Nginx 服务器中,充分利用 Nginx 的事件模型来进行非阻塞 I/O 通信。不仅仅是和 HTTP 客户端间的网络通信是非阻塞的,与MySQL、PostgreSQL、Memcached、以及 Redis 等众多远方后端之间的网络通信也是非阻塞的。
  • OpenResty运行原理
    • Nginx 采用的是 master-worker 模型,一个 master 进程管理多个 worker 进程,基本的事件处理都是放在 woker 中,master 负责一些全局初始化,以及对 worker 的管理。在OpenResty中,每个 woker 使用一个 LuaVM,当请求被分配到 woker 时,将在这个 LuaVM 里创建一个 coroutine(协程)。协程之间数据隔离,每个协程具有独立的全局变量_G
    • 浅谈openresty
  • Tengine vs openresty
    • Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。从2011年12月开始,Tengine成为一个开源项目,Tengine团队在积极地开发和维护着它。Tengine团队的核心成员来自于淘宝、搜狗等互联网企业。
    • Tengine下载
    • 继承Nginx-1.6.2的所有特性,兼容Nginx的配置;
      动态模块加载(DSO)支持。加入一个模块不再需要重新编译整个Tengine;
      支持SO_REUSEPORT选项,建连性能提升为官方nginx的三倍;
      支持SPDY v3协议,自动检测同一端口的SPDY请求和HTTP请求;
      流式上传到HTTP后端服务器或FastCGI服务器,大量减少机器的I/O压力;
      更加强大的负载均衡能力,包括一致性hash模块、会话保持模块,还可以对后端的服务器进行主动健康检查,根据服务器状态自动上线下线,以及动态解析upstream中出现的域名;
      输入过滤器机制支持。通过使用这种机制Web应用防火墙的编写更为方便;
      支持设置proxy、memcached、fastcgi、scgi、uwsgi在后端失败时的重试次数
      动态脚本语言Lua支持。扩展功能非常高效简单;
      支持管道(pipe)和syslog(本地和远端)形式的日志以及日志抽样;
      支持按指定关键字(域名,url等)收集Tengine运行状态;
      组合多个CSS、JavaScript文件的访问请求变成一个请求;
      自动去除空白字符和注释从而减小页面的体积
      自动根据CPU数目设置进程个数和绑定CPU亲缘性;
      监控系统的负载和资源占用从而对系统进行保护;
      显示对运维人员更友好的出错信息,便于定位出错机器;
      更强大的防攻击(访问速度限制)模块;
      更方便的命令行参数,如列出编译的模块列表、支持的指令等;
      可以根据访问文件类型设置过期时间;
    • agentzh是这样说的:Tengine 是一个 nginx 的 fork,而 ngx_openresty 是 nginx 的 bundle.最初两者没有交集,后来Tengine 也是 ngx_openresty 多数核心组件的用户 了,Tengine pdf文档中提到ngx_lua等核心组件也不足为怪了。
    • Nginx开发从入门到精通 — Nginx开发从入门到精通
  • openresty资源
  • 其它资源

相关推荐