openresty简介

一、OpenResty 简介

OpenResty是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。可以使用Lua脚本调用Ngnix支持的C以及Lua模块,快速构建10K~1000K单机并发连接的高性能web应用系统。OpenResty的目标是让web服务直接运行在Nginx服务内部,利用Ngnix的非阻塞IO模型,对HTTP客户端请求和后端DB进行一致的高性能响应。

OpenResty 基于Nginx开发,可以简单认为是 Nginx + lua-nginx-module的组合版。

官网:https://openresty.org/cn/
官方文档:https://github.com/openresty/lua-nginx-module#version

openresty最佳实战:https://github.com/moonbingbing/openresty-best-practiceshttps://moonbingbing.gitbooks.io/openresty-best-practices/content/

nginx使用的wiki:https://www.nginx.com/resources/wiki/

nginx3rd中lua模块wiki:https://www.nginx.com/resources/wiki/modules/lua/

二、高性能服务端两个重要要素

对于“高性能”服务端而言,我们所关注的并不是语言的性能,而是缓存,语言层面要支持异步非堵塞。

1、缓存速度上

内存 > SSD > 机械磁盘;本机 > 网络 ; 进程内 > 进程间 。缓存系统的目标是希望在进程内的命中率是最高的,那么此时缓存系统整体的效率也是最高的。

2、异步非阻塞指的是事件驱动方式(事件完成后再通知)

希望访问数据库、访问网络,访问一些比较慢的IO设备时,不要在等待上耗费大量时间。而是使用事件驱动的方式,当系统完成某项任务后再来通知我们。这样就可以将服务器CPU的空闲资源,用来服务客户端连接。

三、OpenResty 包含的技术

  • Nginx:不仅仅是负载均衡+反向代理等功能,Nginx c module开发成本高。
  • LuaJIT:OpenResty用的是 LuaJIT,LuaJIT 是主打性能的Lua。

OpenResty已经颠覆了高性能服务端的开发模式。OpenResty 本质上是将 LuaJIT 的虚拟机嵌入到 Nginx的worker中,所以效率特别高,在性能上,OpenResty 接近或超过 Nginx c module:

由于Nginx采用的是master-worker模型,也就是一个master主进程管理多个worker进程,基本的事件处理都是放在worker中,master仅负责一些全剧初始化,以及对worker的管理。在OpenResty中,每个worker使用一个LuaVM,每个请求被分配到worker时,将在这个LuaVM中创建一个coroutine协程。协程之间数据隔离,每个协程具有独立的全局变量_G

Lua中的协程和多线程下的线程类似,都有自己的堆栈、局部变量、指令指针...,但是和其他协程程序共享全局变量等信息。线程和协程主要不同在于:多处理器的情况下,概念上来说多线程是同时运行多个线程,而协程是通过代码来完成协程的切换,任何时刻只有一个协程程序在运行。并且这个在运行的协程只有明确被要求挂起时才会被挂起。

四、OpenResty与市面上其他语言对比

  • node.js:第一门将异步非阻塞特性放入自己语言中的,前端同学可以快速切入。但是 node.js 用回调(callback)实现异步非阻塞,代码写起来比较麻烦。
  • Python:3.4之后加入了异步的支持,比如异步io和aiohttp;3.5引入了协程。缺点是版本跨度大,因为很多人还是使用2.7。
  • Golang:最近几年非常火。缺点:代码写法上需要使用go关键字;线上热调试不方便(SystemTap 提供了有限的支持)。
  • Baas:后端即服务,(Backend as a Service),公司为移动应用开发者提供整合云后端的边界服务。

参考:

https://www.zhihu.com/question/23048744

https://www.cnblogs.com/52fhy/p/10589295.html

https://www.jianshu.com/p/09c17230e1ae

发布了524 篇原创文章 · 获赞 172 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/INGNIGHT/article/details/104822017