经过揉和众多设计良好的 Nginx 模块,OpenResty 有效地把 Nginx 服务器转变为一个强大的 Web 应用服务器,基于它开发人员可使用 Lua 编程语言对 Nginx 核心以及现有的各类 Nginx C 模块进行脚本编程,构建出能够处理一万以上并发请求的极端高性能的 Web 应用。sql
一、处理响应请求很快
二、高并发链接
三、低的内存消耗
四、具备很高的可靠性:
五、高扩展性
六、热部署
七、自由的 BSD 许可协议编程
Nginx 采用的是 master-worker 模型,一个 master 进程管理多个 worker 进程,基本的事件处理都是放在 woker 中,master 负责一些全局初始化,以及对 worker 的管理。在OpenResty中,每一个 woker 使用一个 LuaVM,当请求被分配到 woker 时,将在这个 LuaVM 里建立一个 coroutine(协程)。协程之间数据隔离,每一个协程具备独立的全局变量_G。tomcat
ps. 协程和多线程下的线程相似:有本身的堆栈,本身的局部变量,有本身的指令指针,可是和其余协程程序共享全局变量等信息。线程和协程的主要不一样在于:多处理器的状况下,概念上来讲多线程是同时运行多个线程,而协程是经过代码来完成协程的切换,任什么时候刻只有一个协程程序在运行。而且这个在运行的协程只有明确被要求挂起时才会被挂起。服务器
架构图以下:多线程
OpenResty的优点架构
首先咱们选择使用OpenResty,其是由Nginx核心加不少第三方模块组成,其最大的亮点是默认集成了Lua开发环境,使得Nginx能够做为一个Web Server使用。并发
借助于Nginx的事件驱动模型和非阻塞IO,能够实现高性能的Web应用程序。编程语言
并且OpenResty提供了大量组件如Mysql、Redis、Memcached等等,使在Nginx上开发Web应用更方便更简单。目前在京东如实时价格、秒杀、动态服务、单品页、列表页等都在使用Nginx+Lua架构,其余公司如淘宝、去哪儿网等。高并发
压测介绍:
一、机器
压测机:3台物理机,配置 cpu: 40核 内存: 31G
被测机:1台物理机,配置 cpu: 40核 内存: 31G 被测机JVM默认配置
二、测试方式
并发数压测,并发数从低往高进行压测性能
二、压测结果
openresty性能图
tomcat性能图
三、压测分析
从压测结果看,在并发数场景一致的状况下,随着压测并发数据的增长,openresty的MRT更加稳定,
始终维持到0.35左右,而tomcat的性能随着并发数的增长,性能也快速降低,openresty的MRT只有
tomcat的1/10左右。
压测介绍:
一、机器
压测机:3台物理机,配置 cpu: 40核 内存: 31G;3台云主机,配置cpu: 8核 内存: 16G
被测机:1台物理机,配置 cpu: 40核 内存: 31G 被测机JVM默认配置
二、测试方式
增长请求量,
二、压测结果
openresty性能图
tomcat
三、压测分析
从对比来看随着机器增多,tomcat的TPS都有所增长,可是tomcat没有openresty增长的明显,同时openresty的MRT依然在1ms如下,比tomcat要小。
压测介绍:
一、机器
压测机:3台物理机,配置 cpu: 40核 内存: 31G;3台云主机,配置cpu: 8核 内存: 16G
被测机:1台物理机,配置 cpu: 40核 内存: 31G 被测机JVM默认配置
压测结果
一、并发数300的曲线对比
二、对比数2000的曲线对比
压测分析
从图中能够看出,在压测条件一致的状况下,openresty的TPS曲线更加稳定,稳定性更高
压测介绍:
一、机器
压测机:3台物理机,配置 cpu: 40核 内存: 31G
被测机:1台物理机,配置 cpu: 40核 内存: 31G 被测机JVM默认配置
二、测试方式
交叉对比
压测介绍:
一、机器
压测机:3台物理机,配置 cpu: 40核 内存: 31G;3台云主机,配置cpu: 8核 内存: 16G
被测机:1台物理机,配置 cpu: 40核 内存: 31G
二、测试方式
交叉对比
一、内存使用率对比:
二、CPU占用率的对比
一、在并发度比较低的状况下,好比200一下,openresty和tomcat的性能差异不大,openresty的性能主要体如今占用更小的内存,性能更加稳定;二、在并发量不断增大,请求量不断增大的状况下,openresty的处理能力更快,不但能够占用更小的内存,还能够保持很小的TPS,获取更高的QPS,性能也更加稳定;三、openresty在内存使用率,CPU占用率等方面性能要更好;