写点什么

Nginx 学习书单整理

  • 2019-01-29
  • 本文字数:2742 字

    阅读完需:约 9 分钟

Nginx 学习书单整理

大家好,我是陶辉,之前在华为、阿里、腾讯、思科等公司工作过,现在是杭州智链达公司的联合创始人兼 CTO。我从 09 年开始接触 Nginx,至今已经有 10 年了,对 Nginx 有一些自己独特的见解,分享自己学习 Nginx 的经历与经验,及梳理重难点等等。


以下是“Nginx 到底该怎么学?”的主题纲要。


作为工程师的我们,为什么要学 Nginx?

第一点:Nginx 对整个架构的帮助是非常大的。

2007 年,我从华为来到了腾讯的 QQ 空间,在数据开发组工作。当时 QQ 空间小组也就是十来个人,大概有一亿多用户,同时在线大约在三百万用户,承载在 Apache 和 C++开发的服务器上。因为当时腾讯有蛮低的 ARPO 值(每用户平均收入),每个用户贡献的收入是很少的,所以我们需要每台服务器尽量能够带来更多的价值,能服务更多的用户,就需要在 Apache 上做大量的优化。比如说把它的多进程改成多线程,很多初始化能一次解决的就不要初始化多次、调用多次等等。


但是不管你怎么样做,总有点隔靴搔痒的感觉,你根本没办法做大幅度的优化,因为它的结构已经决定了这些问题的出现。


2009 年我到了思科之后,也遇到了同样问题,但我开始接触 Nginx,发现用 Nginx 改造服务器之后,它大概有 10 倍这样数量级的性能提升。但对于 Apache,你对架构本身没有办法做很大的变动了。这就是我通过实际经历想表达的第一点。

第二点:不能重复造轮子。

什么叫不能重复造轮子?


大概 2014 年,我在阿里 VBC 网络的时候,用因特尔的 DBDT 技术解决方案,做了一个叫 SDN 软件自定义网络。当时我突然发现,你做一些比如网络设备相关东西的时候,它的技术迭代非常慢,而且技术相对保守一些。


这个到底是为什么呐?我现在想明白了,就是我们在互联网背景下,技术是模块依赖的,比如我用 Nginx 来开发,Nginx 的模块都是开放的,我可以基于别人的模块做进一步的开发。别人在 不断迭代模块的之后,我可以享受到优化的好处,这就是所谓的“站在巨人的肩膀上”。


这也就是我想讲的:千万不要重复造轮子。如果 Nginx 能解决,或者说任何一个成熟的框架能解决问题的时候,不要再花时间自己做了。

第三点:还有好的架构。

什么叫好的架构?


我是 2012 年 10 月份去的阿里云,做了架构师。ECS 当时是两个月迭代一次版本,我们团队全年通宵了 23 次,花了两年时间,把线上的五万台服务器重构成一个新的架构,大概是一个月就可以做迭代。


好的架构真的很重要。Nginx 就是个好的架构。


好架构,就是你要有预见性。比如 TCP 协议,它在 1995 年的时候就创立出来了,到现在都没有大改,依旧服务了各种各样的场景。Nginx 也是一样,从 2014 年推出来后基本没多大变化。但它的模块化,是纵向的划分的架构,最底层是事件驱动,基于 EP 的事件驱动,再上面是 HTTP 框架,再上面是 HTTP 模块,再上面是 OpenResty 的 lua。再看横向的划分,比如说我们要做一些 WAF 防火墙的限制,又比如基于 IP 做白名单、黑名单,那它的模块划分很清楚,还比如其他的模块,像 linit 或者 Request 只负责限速,不会自己去获取到用户的真实 IP 再去限速等等。


所以,我说 Nginx 是一个好的架构,而我们学习 Nginx,也可以获取到非常好的架构思维。

我是怎么学 Nginx?

其实,我觉得大家比我幸运很多,现在可以找到很多 Nginx 的学习资料。但在我一开始学 Nginx 的时候,也就是 2009 年吧,网上可查的资料非常少,连英文资料还都只有一本书。我大概只看了一个 10 页教你怎么开发的文档,就开始跟着源码学了。


因为 09 年的时候我大概有五到六年的工作经验,已经形成了一套自己的知识体系,所以对着源码学习相对比较容易。Winter 老师在直播的时候也提到了,知识体系这个点,说我们不断地在学习新的知识点,会觉得很困难,这时候你一定要建立自己的知识体系架构。那知识体系架构最重要的是逻辑性、完备性。所谓的逻辑性,就是把一个新的知识点罗列到之前的知识树状结构中的能力。在《Nginx核心知识100讲》的课程中,你跟着我学,也能梳理出树状结构的知识框架。后续新的知识点,哪怕不是 Nginx,只要是 Web 服务器类的,你都可以归到这知识框架中。


在我看来,学习就是道与术的关系。

学习 Nginx 有哪些好书推荐?

我认为有三个知识点一定要学:


1、第一个知识就是 HTTP 学习,《HTTP 权威指南》是一本很好的书;


2、第二个是 TCP 协议一定要学习,因为 Nginx 在处理的是性能,所以我们一定要了解 TCP 协议。有一本书叫《TCP/IP 详解卷一:协议》,其实它有三卷,第二卷、第三卷比较长,大家如果没有时间就不要看了。但大家一定要看卷一,重点是看 TCP 协议,大概也就是八、九章的样子。


3、第三个是一定要了解 Linux 的内核。大定不要一听到内核就觉得好恐怖啊,推荐一本书叫《深入理解 Linux 内核》,这本书对于前端同学来说,就比较恐怖了,学起来会非常的吃力,甚至一些后端同学第一次学也会感到吃力。


我再推荐一本书,叫做《Lniux 内核设计与实现》,讲的是比较浅,但一定要从第一章开始看,从进程、内存开始讲。你大概看完一半的时候,就会对一套体系非常的熟悉了。


其实,如果你真的要学 Nginx 的话,我首要推荐的是一个英文网站:Nginx.org


虽然不是中文,但大家不要怕,因为网站上没有什么大段的内容,就是一个一个分析它的指令,大部分指令还是讲的很到位的。不过有些指令讲得也非常的浅,你也可以结合我的课程《Nginx 核心知识 100 讲》来学习,我会专门扩展去讲解一些指令。


但总而言之,对于 Nginx 学习者来说,吃透这个网站是很重要的。


第二个是 Nginx.com,就是 Nginx PLUS 那个官网,它有一个,那个中间有个叫 Blog,叫博客那栏,那里面有很多很好的文章,像关于 NginxPlus,的就不用管了,因为它是广告,它就像你买那个 Nginx Plusd。但 Nginx 又不开源,这个就比较糟糕,那种的就不用看,但是就是关于它的一些新的特性的,这个一定要好好看一看。


第三个就是我的书《深入理解 Nginx;模块开发与架构解析》。这本书主要讲的是模块开发,因为我当时工作要写模块开发,但市面上没有任何一本书来讲模块开发,于是就有了这本书。我为了讲清楚模块开发,又讲了一些架构的东西,这个是有参考意义的。但我建议大家一定要先看完《HTTP 权威指南》、《Linux 内核设计与实现》,再去看这本书,会更容易轻松一点。


最后就是源码一定要看。



《Nginx核心知识100讲》的第六部分课程中,我会有大概会有 10 节课去讲 OpenResty。结合了之前的 Nginx 基础架构、HTTP 模块、反向代理与负载均衡等学习,掌握 OpenResty 会很简单。OpenResty 的官网上有很多错误的,主要在 Github 上有些指令的错误。但因为你有之前的知识认知,你会发现 Github 上没有讲到的东西,你也会用。


Nginx 的知识架构也就是这四个点:HTTP 框架、进程架构、变量、Openresty。OpenResty 是我认为非常重要的一点。


戳我看直播原版视频。


2019-01-29 14:379396

评论 1 条评论

发布
用户头像
ARPU
2019-01-29 14:59
回复
没有更多了
发现更多内容

软件测试/测试开发丨Python 内置库 多线程threading

测试人

Python 程序员 软件测试 自动化测试 测试开发

一键登录和短信验证登录,到底有什么区别?

MobTech袤博科技

前端 App 前端开发 APP开发

面部表情识别的未来发展趋势

数据堂

基于Pair-wise和CrossEncoder训练单塔模型

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 8 月 PK 榜

火爆全球的AI艺术二维码到底是怎么做的?

Ricky

二维码 个性化推荐 二维码生成

Observable设计模式简介

树上有只程序猿

Java java-API Observable

直播预告 | 博睿学院:浅析windows Hook原理和机制

博睿数据

可观测性 智能运维 博睿数据 直播预告 博睿学院

超好用的数据可视化工具——Grafana

云原生应用市场

监控 数据 Grafana 告警

软件测试/测试开发丨Python 内置库 pythonlogging

测试人

Python 程序员 软件测试 自动化测试 测试开发

RR有幻读问题吗?MVCC能否解决幻读?

王磊

Java Java 面试题

全球优秀的架构师都在关注什么?

用友BIP

架构师 数智底座

AI技术赋能,引领行业变革 | 百度营销创新打造“信息流AI投放”

科技热闻

瓴羊Quick BI跻身Gartner魔力象限挑战者行列

夜雨微澜

软件测试/测试开发丨Python 内置库 正则表达式re

测试人

Python 正则表达式 程序员 软件测试 测试开发

浪潮海岳云原生平台技术分享丨轻松解决数据库备份痛点

inBuilder低代码平台

云原生 低代码平台

MRS大企业ERP流程实时数据湖加工最佳实践

华为云开发者联盟

大数据 后端 华为云 华为云开发者联盟 企业号 8 月 PK 榜

基于Java开发的企业级数字化采购系统(SRM)

金陵老街

srm 采购系统 招投标系统

数字时代的生产力工具:低代码开发平台

力软低代码开发平台

IOS上架流程

智慧生活的下半场,从全屋智能4.0接入未来

这不科技

华为 鸿蒙系统

面部表情识别在社交媒体中的应用

数据堂

时序数据库 TDengine SQL 查询语法规则汇总,官方教程奉上!

爱倒腾的程序员

数据库

HarmonyOS NEXT新能力,一站式高效开发HarmonyOS应用

极客天地

何时使用MongoDB而不是MySql

越长大越悲伤

MySQL 数据库 mongodb

面部表情识别技术的挑战与前景

数据堂

HarmonyOS系统级推送服务,打造消息通知新体验

极客天地

隆重介绍!为啥它让智能制造有了“芯”能力?

用友BIP

制造

Nginx 学习书单整理_语言 & 开发_陶辉_InfoQ精选文章