谈到Redis缓存,我们描述其性能时会这么说:支持1万并发连接,几万QPS。而我们描述Nginx的高性能时,则会宣示:支持C10M(1千万并发连接),百万级QPS。Redis与Nginx同样使用了事件驱动、异步调用、Epoll这些机制,为什么Nginx的并发连接会高出那么多呢?(本文不讨论Redis分布式集群) 这其实是由进程架构决定的。为了让进程占用CPU的全部计算力,Nginx充分利用了分时操作系统的特点,比如增加CPU时间片、提高CPU二级缓存命中率、用异步IO和线程池的方式回避磁盘的阻塞读操作等等,只有清楚了Nginx的这些招数,你才能将Nginx的性能最大化发挥出来。 为了维持Worker进程间的负载均衡,在1.9.1版本前Nginx使用互斥锁,基于八分之七这个阈值维持了简单、高效的基本均衡。而在此之后,使用操作系统提供的多ACCEPT队列,Nginx可以获得更高的吞吐量。 本文将会沿着高性能这条主线介绍Nginx的Master/Worker进程架构,包括进程间是如何分担流量的,以及默认关闭的多线程模式又是如何工作的。同时,本文也是Nginx开源社区基础培训系列课程第一季,即6月18日晚第3次直播课的部分文字总结。
在这里,NGINX 创始人 Igor Sysoev 将亲述 NGINX 的诞生史
2020 年 5 月 20 日,一场 NGINX 在国内的盛会、一个所有 NGINX 用户 & 爱好者朝圣的最佳场所,F5 线上技术峰会 - NGINX 专场将以线上直播的形式面向所有开发者召开。届时各位 NGINX 开发者心目中的偶像 NGINX 创始人 Igor Sysoev 以及国内 NGINX 技术专家陶辉老师将空降大会现场,从 NGXIN 创始人的成长经历出发,帮助每一位开发者来重新理解 NGINX 的前世今生。
如果想让产品在支持高并发请求的同时保持高效的服务,NGINX 可能是最好的选择。这并非一句玩笑话,而是经过全球技术人多年来技术实践后所得出的结论。NGINX 就像一个万能药,在任何存在性能需求的场合都能找到它的身影,它可以在百万并发链接中实现高吞吐量的 Web 服务。然而即便是这样,NGINX 却至今缺少一个能够将所有 NGINX 用户聚集起来的官方场所,这对于像这样一个如此受欢迎的开源产品来说是很不常见的,而这也是此次大会之下的重头戏之一。扫描下图二维码或点击阅读原文链接即可免费报名!
这16年来我是如何做系统性能优化的
2019年下半年,极客时间总编辑郭蕾从北京飞来杭州,问我有什么特别想分享给大家的技术。我回顾了下自己这16年来的工作经历,发现无论在华为、腾讯、思科、阿里,我都在与海量数据打交道,这个过程中对性能优化有许多思考,但一直没有系统的写下来。于是我就跟郭蕾说,那就针对分布式系统,讲讲我心中的性能优化方法论吧。这就是《系统性能调优必知必会》这门课的诞生过程。
HTTP性能极限优化
(英文版链接) 无论你在做前端、后端还是运维,HTTP都是不得不打交道的网络协议。它是最常用的应用层协议,对它的优化,既能通过降低时延带来更好的体验性,也能通过降低资源消耗带来更高的并发性。 可是,学习HTTP不久的同学,很难全面说出HTTP的所有优化点。这既有可能是你没好好准备过大厂的面试😊,也有可能你没有加入一个快速发展的项目,当产品的用户量不断翻番时,需求会倒逼着你优化HTTP协议。 这篇文章是根据我在2019年GOPS全球运维大会上海站的演讲PPT,重新提炼文字后的总结。我希望能从四个全新的维度,带你覆盖绝大部分的HTTP优化技巧。这样,即使还不需要极致方法去解决当前的性能瓶颈,也会知道优化方向在哪,当需求来临时,能够到Google上定向查阅资料。 第一个维度,是从编码效率上,更快速地把消息转换成更短的字符流。这是最直接的性能优化点。
巧用 Nginx 实现大规模分布式集群的高可用性
本文是我对2019年GOPS深圳站演讲的文字整理。这里我希望带给各位读者的是,如何站在整个互联网背景下系统化地理解Nginx,因为这样才能解决好大流量分布式网络所面临的高可用问题。