AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

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:379486

评论 1 条评论

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

开源| 直播推拉流2.0升级了什么

anyRTC开发者

开源 音视频 屏幕共享 视频直播 美颜滤镜

大数据培训:Flink CDC 高频面试题

@零度

大数据 flink

ko在数栈中的应用

袋鼠云数栈

Netty如何高效接收网络数据?一文聊透ByteBuffer动态自适应扩缩容机制

bin的技术小屋

网络编程 Netty nio 中间件 Java【

阳振坤:从电动汽车看分布式数据库的发展和崛起

OceanBase 数据库

数据库 OceanBase 开源 OceanBase 社区版 HTAP

《数字经济全景白皮书》数字人民币篇 重磅发布

易观分析

数字经济 数字人民币

上海市宝山区委书记陈杰一行参访旺链科技

旺链科技

区块链 产业区块链 Vone新闻

学生管理系统架构设计文档

阿卷

架构实战营

80%的软件环境管理问题,根因都在这里 | 研发效能提升36计

阿里云云效

阿里云 DevOps 云原生 持续交付 部署

一文了解如何源码编译Rainbond基础组件

北京好雨科技有限公司

Kubernetes PaaS rainbond

ModStart:拥抱新技术,率先支持 Laravel 9.0

ModStart开源

Kotlin语法手册(四)

寻找生命中的美好

android kotlin 安卓

OpenHarmony移植案例与原理:如何适配服务启动引导部件bootstrap_lite

华为云开发者联盟

OpenHarmony 移植 bootstrap_lite startup 系统服务

netty系列之:EventLoop,EventLoopGroup和netty的默认实现

程序那些事

Java Netty nio 程序那些事 2月月更

前端培训:Vue3计算属性比普通函数好的原因

@零度

Vue 前端开发

2022年2月国产数据库排行榜:冠军宝座面临挑战,OceanBase 重返 TOP3

墨天轮

数据库 tdengine TiDB 国产数据库

直播系统聊天技术(七):直播间海量聊天消息的架构设计难点实践

JackJiang

网络编程 即时通讯 IM 直播技术 音视频技术

张海宁:首个 CNCF 中国开源项目 Harbor 的修炼之道

腾源会

开源 腾源会

java培训:JVM垃圾回收

@零度

JVM JAVA开发

易观分析获评2021年度北京市专精特新“小巨人”企业

易观分析

易观新闻 “小巨人”企业

MatrixOne 0.2.0性能测试报告

MatrixOrigin

开源 MatrixOrigin MatrixOne 超融合异构云原生数据库 矩阵起源

高可用之SkybilityHA简单介绍-行云管家

行云管家

高可用 ha

网络安全:SQL 注入漏洞

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 安全漏洞

腾讯云联合信通院发布《超低延时直播白皮书》,推动直播延时降低90%以上

科技热闻

Nebula Graph 源码解读系列|客户端的通信秘密——fbthrift

NebulaGraph

数据库 图数据库

本着什么原则,才能写出优秀的代码?

AlwaysBeta

程序员 设计模式 代码规范

C++异常处理机制

正向成长

c++ 异常处理

OBCE 认证第一人莅临直播间|助你快速拿下 OBCA & OBCP 证书

OceanBase 数据库

直播 OceanBase 社区版 OBCE

福建省福州市网络安全等级测评机构名单目录看这里!

行云管家

等保 等级保护 等保测评

MatrixOne 0.2.0 发布!最快的SQL计算引擎来了!

MatrixOrigin

开源 MatrixOrigin MatrixOne 超融合异构云原生数据库 矩阵起源

技术干货 | WebRTC ADM 源码流程分析

网易云信

音视频

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