百万并发下的 Nginx 性能优化之道

百万并发下的 Nginx 性能优化之道,第1张

Nginx很火,因为它就像一个万能药,在任何存在性能需求的场合总能找见它的身影。它可以轻松在百万并发连接下实现高吞吐量的Web服务,同时诸多应用场景下的问题都可以通过种种Nginx模块得以解决。

Nginx天生就适合在linux服务器上处理百万、千万级的并发连接,且优秀的架构使得它未来不需要重构,所以它的生态圈内的第三方模块长期有效。而长年的发展下日益增多的第三方模块进一步赋能Nginx,使Nginx适用于更多的场景,甚至渗透到LVS的领域与F5这样的硬件产品竞争!同时,如OpenResty或者Tengine这样的第三方模块群,进一步发展出了新生态,使Nginx的应用进一步向应用防火墙、CDN等领域扩展。

所以,学好Nginx可以让你在工作中获得立竿见影的效果。

网络上关于Nginx的使用介绍非常多,但往往有两个问题 :

1、仅从如何使用层面介绍,没有把离散的知识点串成线,这导致大家难以应对未出现过的、个性化的定制场景;

2、没有成体系的性能优化知识介绍,在企业生产环境下我们需要从应用到系统的完整优化方案 。

最近看到极客时间上线的视频课程《Nginx核心知识100讲》,涉及到了Nginx的基本用法、http模块、反向代理与负载均衡、OpenResty等各方面的综合知识,很系统化。最值得一提,这个课程的作者--陶辉老师,应该算是Nginx领域的专才了。 有着近10年Nginx方面的研究经验,曾出版过京东热销书籍《深入理解Nginx:模块开发与架构解析》。

简单介绍下这个课程的内容规划,主要分为六个部分

第1部分初识Nginx: 帮助对Nginx还不熟悉的同学快速了解Nginx的背景,熟悉Nginx的基本用法;

第2部分是Nginx的架构基础: 在这里我们开始探讨Nginx的进程模型以及数据结构,它为后续深入学习打下基础;

第3部分我们开始详解http模块: 这一部分我们先讲清楚Nginx是如何处理http请求的,再按照请求的处理流程来讲解常用http模块中指令、变量的用法,学完后可以帮助我们触类旁通,理解所有http模块的共同逻辑及用法。

第4部分是反向代理与负载均衡: 这一部分以七层负载均衡为主,兼顾四层负载均衡,学完这一部分,你可以搭建出多种不同上游协议的反向代理,并理解如何配置才能高效的处理上下游流量的交互。

第5部分是Nginx的系统层优化: 学完该部分可以有效的调节linux操作系统下cpu、内存、网络、磁盘等配置,与Nginx.conf中的指令相配合,使Nginx的性能最大化。

第6部分是从源码视角深入使用Nginx与OpenResty: 这一部分我们会从Nginx的实现层面,打通前5部分中的知识,帮助大家深刻理解Nginx的机制与能力模型,并介绍OpenResty是如何与Nginx有效搭配使用的。

不多说了,直接附上陶辉出品的“Nginx核心知识框架图”,非常系统地梳理了学好Nginx所需要的知识点。

福利一:限时优惠价¥68(原价¥129),接近半价优惠,11月17日恢复原价;最近两天有啥福利?

福利二:每邀请一位好友购买,可获得24元现金返现,多邀多得,上不封顶,随时提现。

1.总的老说,优化方案中只有两种,一种是给查询的字段加组合索引。另一种是给在用户和数据库中增加缓存

2.添加索引方案:面对1~2千的并发是没有压力的,在往上则限制的瓶颈就是数据库最大连接数了,在上面中我用show global status like 'Max_used_connections’查看数据库可以知道数据库最大响应连接数是5700多,超过这个数tomcat直接报错连接被拒绝或者连接已经失效

3.缓存方案:在上面的测试可以知道,要是我们事先把数据库的千万条数据同步到redis缓存中,瓶颈就是我们的设备硬件性能了,假如我们的主机有几百个核心CPU,就算是千万级的并发下也可以完全无压力,带个用户很好的。

4.索引+缓存方案:缓存事先没有要查询的数据,在一万的并发下测试数据库毫无压力,程序先通过查缓存再查数据库大大减轻了数据库的压力,即使缓存不命中在一万的并发下也能正常访问,在10万并发下数据库依然没压力,但是redis服务器设置最大连接数300去处理10万的线程,4核CPU处理不过来,很多redis连接不了。我用show global status like 'Max_used_connections'查看数据库发现最大响应连接数是388,这么低所以数据库是不会挂掉的。雷达下载更专业。

5.使用场景:a.几百或者2000以下并发直接加上组合索引就可以了。b.不想加索引又高并发的情况下可以先事先把数据放到缓存中,硬件设备支持下可解决百万级并发。c.加索引且缓存事先没有数据,在硬件设备支持下可解决百万级并发问题。d.不加索引且缓存事先没有数据,不可取,要80多秒才能得到结果,用户体验极差。

6.原理:其实使用了redis的话为什么数据库不会崩溃是因为redis最大连接数为300,这样数据库最大同时连接数也是300多,所以不会挂掉,至于redis为什么设置为300是因为设置的太高就会报错(连接被拒绝)或者等待超时(就算设置等待超时的时间很长也会报这个错)。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/308868.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存