正文前先来一波福利推荐:
福利一:
百万年薪架构师视频,该视频可以学到很多东西,是本人花钱买的VIP课程,学习消化了一年,为了支持一下女朋友公众号也方便大家学习,共享给大家。
福利二:
毕业答辩以及工作上各种答辩,平时积累了不少精品PPT,现在共享给大家,大大小小加起来有几千套,总有适合你的一款,很多是网上是下载不到。
获取方式:
微信关注 精品3分钟 ,id为 jingpin3mins,关注后回复 百万年薪架构师 ,精品收藏PPT 获取云盘链接,谢谢大家支持!
------------------------正文开始---------------------------
一、openresty介绍
1、什么是openresty
通过揉和众多设计良好的 Nginx 模块,OpenResty 有效地把 Nginx 服务器转变为一个强大的 Web 应用服务器,基于它开发人员可以使用 Lua 编程语言对 Nginx 核心以及现有的各种 Nginx C 模块进行脚本编程,构建出可以处理一万以上并发请求的极端高性能的 Web 应用。
2、为什么选择 Nginx
1、处理响应请求很快
2、高并发连接
3、低的内存消耗
4、具有很高的可靠性:
5、高扩展性
6、热部署
7、自由的 BSD 许可协议
3、openresty架构模型
Nginx 采用的是 master-worker 模型,一个 master 进程管理多个 worker 进程,基本的事件处理都是放在 woker 中,master 负责一些全局初始化,以及对 worker 的管理。在OpenResty中,每个 woker 使用一个 LuaVM,当请求被分配到 woker 时,将在这个 LuaVM 里创建一个 coroutine(协程)。协程之间数据隔离,每个协程具有独立的全局变量_G。
ps. 协程和多线程下的线程类似:有自己的堆栈,自己的局部变量,有自己的指令指针,但是和其他协程程序共享全局变量等信息。线程和协程的主要不同在于:多处理器的情况下,概念上来说多线程是同时运行多个线程,而协程是通过代码来完成协程的切换,任何时刻只有一个协程程序在运行。并且这个在运行的协程只有明确被要求挂起时才会被挂起。
架构图如下:
![](https://upload-images.jianshu.io/upload_images/5304063-4703626204dfd005.jpg?imageMogr2/auto-orient/strip|imageView2/2/w/524/format/webp)
OpenResty的优势
首先我们选择使用OpenResty,其是由Nginx核心加很多第三方模块组成,其最大的亮点是默认集成了Lua开发环境,使得Nginx可以作为一个Web Server使用。
借助于Nginx的事件驱动模型和非阻塞IO,可以实现高性能的Web应用程序。
而且OpenResty提供了大量组件如Mysql、Redis、Memcached等等,使在Nginx上开发Web应用更方便更简单。目前在京东如实时价格、秒杀、动态服务、单品页、列表页等都在使用Nginx+Lua架构,其他公司如淘宝、去哪儿网等。
二、openresty性能对比图例
1、情景一:
压测介绍:
1、机器
压测机:3台物理机,配置 cpu: 40核 内存: 31G
被测机:1台物理机,配置 cpu: 40核 内存: 31G 被测机JVM默认配置
2、测试方式
并发数压测,并发数从低往高进行压测
2、压测结果
openresty性能图
![](https://upload-images.jianshu.io/upload_images/5304063-e28cfd0374028c8c.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
![](https://upload-images.jianshu.io/upload_images/5304063-3c2243190adca49d.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
tomcat性能图
![](https://upload-images.jianshu.io/upload_images/5304063-e110c791dad0d4bb.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
![](https://upload-images.jianshu.io/upload_images/5304063-7fd624d38fde3891.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
3、压测分析
从压测结果看,在并发数场景一致的情况下,随着压测并发数据的增加,openresty的MRT更加稳定,
始终维持到0.35左右,而tomcat的性能随着并发数的增加,性能也快速下降,openresty的MRT只有
tomcat的1/10左右。
2、情景二:
压测介绍:
1、机器
压测机:3台物理机,配置 cpu: 40核 内存: 31G;3台云主机,配置cpu: 8核 内存: 16G
被测机:1台物理机,配置 cpu: 40核 内存: 31G 被测机JVM默认配置
2、测试方式
增加请求量,
2、压测结果
openresty性能图
![](https://upload-images.jianshu.io/upload_images/5304063-cc74b5b5eb711efc.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
![](https://upload-images.jianshu.io/upload_images/5304063-108d07a65a8df4fb.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
tomcat
![](https://upload-images.jianshu.io/upload_images/5304063-5d15b579ec0fbfb2.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
![](https://upload-images.jianshu.io/upload_images/5304063-8c493b5471ed9ea5.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
3、压测分析
从对比来看随着机器增多,tomcat的TPS都有所增加,但是tomcat没有openresty增加的明显,同时openresty的MRT依然在1ms以下,比tomcat要小。
3、场景三:
压测介绍:
1、机器
压测机:3台物理机,配置 cpu: 40核 内存: 31G;3台云主机,配置cpu: 8核 内存: 16G
被测机:1台物理机,配置 cpu: 40核 内存: 31G 被测机JVM默认配置
压测结果
1、并发数300的曲线对比
![](https://upload-images.jianshu.io/upload_images/5304063-cd08fa12e8ba7baa.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
![](https://upload-images.jianshu.io/upload_images/5304063-1ff3b4b83ab7a406.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
2、对比数2000的曲线对比
![](https://upload-images.jianshu.io/upload_images/5304063-68138ba73dca8a65.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
![](https://upload-images.jianshu.io/upload_images/5304063-11a067cd6c6f9cdf.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
压测分析
从图中可以看出,在压测条件一致的情况下,openresty的TPS曲线更加稳定,稳定性更高
4、场景四:
压测介绍:
1、机器
压测机:3台物理机,配置 cpu: 40核 内存: 31G
被测机:1台物理机,配置 cpu: 40核 内存: 31G 被测机JVM默认配置
2、测试方式
交叉对比
![](https://upload-images.jianshu.io/upload_images/5304063-2ac88372c0246fc7.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
![](https://upload-images.jianshu.io/upload_images/5304063-77ae6ed8ee8b7f02.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
压测介绍:
1、机器
压测机:3台物理机,配置 cpu: 40核 内存: 31G;3台云主机,配置cpu: 8核 内存: 16G
被测机:1台物理机,配置 cpu: 40核 内存: 31G
2、测试方式
交叉对比
![](https://upload-images.jianshu.io/upload_images/5304063-7b61e9d38c3b92dd.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
![](https://upload-images.jianshu.io/upload_images/5304063-b692e83069cb4949.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
5、场景五:
1、内存使用率对比:
![](https://upload-images.jianshu.io/upload_images/5304063-a3eb72d0ffd37ff4.png?imageMogr2/auto-orient/strip|imageView2/2/w/941/format/webp)
![](https://upload-images.jianshu.io/upload_images/5304063-56a4b5abe610475d.png?imageMogr2/auto-orient/strip|imageView2/2/w/944/format/webp)
![](https://upload-images.jianshu.io/upload_images/5304063-ffebff5f24bffe06.png?imageMogr2/auto-orient/strip|imageView2/2/w/947/format/webp)
2、CPU占用率的对比
![](https://upload-images.jianshu.io/upload_images/5304063-00328267d01cccce.png?imageMogr2/auto-orient/strip|imageView2/2/w/945/format/webp)
![](https://upload-images.jianshu.io/upload_images/5304063-dc600fbbc251cf12.png?imageMogr2/auto-orient/strip|imageView2/2/w/943/format/webp)
![](https://upload-images.jianshu.io/upload_images/5304063-386f08002d37f440.png?imageMogr2/auto-orient/strip|imageView2/2/w/945/format/webp)
三、openresty性能分析报告总结
1、在并发度比较低的情况下,比如200一下,openresty和tomcat的性能差别不大,openresty的性能主要体现在占用更小的内存,性能更加稳定;
2、在并发量不断增大,请求量不断增大的情况下,openresty的处理能力更快,不但可以占用更小的内存,还可以保持很小的TPS,获取更高的QPS,性能也更加稳定;
3、openresty在内存使用率,CPU占用率等方面性能要更好;