以下是「nginx到底該怎麼學?」的主題綱要。
第一點:nginx對整個架構的幫助是非常大的。
但是不管你怎麼樣做,總有點隔靴搔癢的感覺,你根本沒辦法做大幅度的優化,因為它的結構已經決定了這些問題的出現。
2023年我到了思科之後,也遇到了同樣問題,但我開始接觸nginx,發現用nginx改造伺服器之後,它大概有10倍這樣數量級的效能提公升。但對於apache,你對架構本身沒有辦法做很大的變動了。這就是我通過實際經歷想表達的第一點。
第二點:不能重複造輪子。
什麼叫不能重複造輪子?
大概2023年,我在阿里vbc網路的時候,用因特爾的dbdt技術解決方案,做了乙個叫sdn軟體自定義網路。當時我突然發現,你做一些比如網路裝置相關東西的時候,它的技術迭代非常慢,而且技術相對保守一些。
這個到底是為什麼吶?我現在想明白了,就是我們在網際網路背景下,技術是模組依賴的,比如我用nginx來開發,nginx的模組都是開放的,我可以基於別人的模組做進一步的開發。別人在 不斷迭代模組的之後,我可以享受到優化的好處,這就是所謂的「站在巨人的肩膀上」。
這也就是我想講的:千萬不要重複造輪子。如果nginx能解決,或者說任何乙個成熟的框架能解決問題的時候,不要再花時間自己做了。
第三點:還有好的架構。
什麼叫好的架構?
我是2023年10月份去的阿里雲,做了架構師。ecs當時是兩個月迭代一次版本,我們團隊全年通宵了23次,花了兩年時間,把線上的五萬台伺服器重構成乙個新的架構,大概是乙個月就可以做迭代。
好的架構真的很重要。nginx就是個好的架構。
好架構,就是你要有預見性。比如tcp協議,它在2023年的時候就創立出來了,到現在都沒有大改,依舊服務了各種各樣的場景。nginx也是一樣,從2023年推出來後基本沒多大變化。但它的模組化,是縱向的劃分的架構,最底層是事件驅動,基於ep的事件驅動,再上面是http框架,再上面是http模組,再上面是openresty的lua。再看橫向的劃分,比如說我們要做一些 waf 防火牆的限制,又比如基於ip做白名單、黑名單,那它的模組劃分很清楚,還比如其他的模組,像linit或者request只負責限速,不會自己去獲取到使用者的真實ip再去限速等等。
所以,我說nginx是乙個好的架構,而我們學習nginx,也可以獲取到非常好的架構思維。
其實,我覺得大家比我幸運很多,現在可以找到很多nginx的學習資料。但在我一開始學nginx的時候,也就是2023年吧,網上可查的資料非常少,連英文資料還都只有一本書。我大概只看了乙個10頁教你怎麼開發的文件,就開始跟著原始碼學了。
因為09年的時候我大概有五到六年的工作經驗,已經形成了一套自己的知識體系,所以對著原始碼學習相對比較容易。winter老師在直播的時候也提到了,知識體系這個點,說我們不斷地在學習新的知識點,會覺得很困難,這時候你一定要建立自己的知識體系架構。那知識體系架構最重要的是邏輯性、完備性。所謂的邏輯性,就是把乙個新的知識點羅列到之前的知識樹狀結構中的能力。在《nginx核心知識100講》的課程中,你跟著我學,也能梳理出樹狀結構的知識框架。後續新的知識點,哪怕不是nginx,只要是web伺服器類的,你都可以歸到這知識框架中。
在我看來,學習就是道與術的關係。
我認為有三個知識點一定要學:
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 學習書單整理
以下是 nginx到底該怎麼學?的主題綱要。n n n 第一點 nginx對整個架構的幫助是非常大的。n 但是不管你怎麼樣做,總有點隔靴搔癢的感覺,你根本沒辦法做大幅度的優化,因為它的結構已經決定了這些問題的出現。n2009年我到了思科之後,也遇到了同樣問題,但我開始接觸nginx,發現用nginx...
Nginx 學習書單整理
以下是 nginx到底該怎麼學?的主題綱要。第一點 nginx對整個架構的幫助是非常大的。但是不管你怎麼樣做,總有點隔靴搔癢的感覺,你根本沒辦法做大幅度的優化,因為它的結構已經決定了這些問題的出現。2009年我到了思科之後,也遇到了同樣問題,但我開始接觸nginx,發現用nginx改造伺服器之後,它...
Nginx 學習書單整理
以下是 nginx到底該怎麼學?的主題綱要。第一點 nginx對整個架構的幫助是非常大的。但是不管你怎麼樣做,總有點隔靴搔癢的感覺,你根本沒辦法做大幅度的優化,因為它的結構已經決定了這些問題的出現。2009年我到了思科之後,也遇到了同樣問題,但我開始接觸nginx,發現用nginx改造伺服器之後,它...