03.04 闖蕩Linux帝國:nginx的創業故事

闖蕩Linux帝國:nginx的創業故事

前情回顧

NextStep帝國推出的web服務,迅速風靡比特宇宙,各星系帝國均蠢蠢欲動,想在這一波浪潮中掘一桶金。

詳情參見:萬維網的誕生

1 初出茅廬

小馬哥和他的小夥伴小黑、大黃來到陌生的Linux帝國,準備在這裡闖出一片天地。

闯荡Linux帝国:nginx的创业故事

不久,他們成立了一家Web服務器公司,小黑負責網絡接待,進來的客戶交給大黃,大黃負責處理請求,讀取HTML文件交給客戶,小馬哥當總管,開始了他們的創業之旅。

雖然人少,但大家分工合作,齊心協力,小公司也還是慢慢走上正軌。

闯荡Linux帝国:nginx的创业故事

2 fork分身術

公司的發展出乎他們的意料,瀏覽網頁的請求越來越多,小黑開始抱怨大黃處理太慢。大黃也很無奈,明明自己已經很努力了。小黑催的緊,一著急數據處理錯誤,把整個進程都搞崩潰了。

晚上的總結會上,小黑表達了不滿:大黃你還得加把勁啊,你看我這隊列裡都接待了這麼多客戶進來,他們都等著你辦業務,你也太慢了。而且忙起來也不能亂啊,把進程搞崩潰,這不是連累大家嘛!

大黃心裡委屈,可是今天確實因為自己把進程搞崩潰了,連累大家。面對小黑的數落,只好默不作聲。

闯荡Linux帝国:nginx的创业故事

小馬哥看在眼裡,打破沉默:這事不能怪大黃,業務量大了,他一個人忙不過來。我聽說Linux帝國有一個fork大法,大黃你從小黑那裡拿到請求後就使用fork大法,去一個單獨的進程的處理這個請求吧。

闯荡Linux帝国:nginx的创业故事

大黃抬起頭來:fork不是叉子的意思嗎,fork大法是什麼?

小馬哥:我也瞭解不太多,聽說這叫分身術,執行fork可以把當前進程複製一份。

大黃聽得迷迷糊糊:這麼神奇?

小馬哥:聽行業巨頭Apache公司的人說的,他們就是用的fork大法,你去研究下。

第三天,大家按照新的辦法來運行,果然見效,小黑接進來的客戶,大黃馬上就拿過來執行fork,產生一個分身,在新的進程中處理。彷彿長了三頭六臂,效率高了不少,即便偶爾還會處理出錯,也只是把那個獨立進程弄崩潰,主進程還是穩穩當當運轉,不影響業務。

闯荡Linux帝国:nginx的创业故事

3 驚群效應

就這樣過了一段時間,小馬哥注意到大黃每次都要去磁盤讀取網頁文件,費時費力,於是召開公司會議,宣佈了兩項決定:

1、調小黑去成立新的緩存管理部門,原來小黑負責的網絡接待工作交給大黃一起做。

2、提前執行fork,分身出幾個進程準備著,而不在客戶來臨時才執行分身。

很快,大黃接過原來小黑的活,開始獨挑大樑。

闯荡Linux帝国:nginx的创业故事

不過新的麻煩又來了!剛工作半天,大黃又來到小馬哥辦公室。

大黃:馬哥,這網絡接待這活不好乾啊,以前是小黑一個人處理,接待完我來服務,沒啥問題。但現在換我來接待,我有多個分身,每個分身都在執行accept函數等客戶來,結果就是每來一個客戶,所有分身都來接待,實際只有一個接待成功,其他幾個分身白跑一趟,浪費表情!

闯荡Linux帝国:nginx的创业故事

小馬哥:唉,你看我這腦袋,忘了叮囑你了。前幾天去Apache公司技術交流時提到過這事,這是Linux帝國的缺陷,叫驚群效應,已經有好幾家公司聯名向帝國反映了。目前沒有什麼好的辦法,你在執行accept前加一把鎖來同步你的多個分身進程吧!

大黃:嗯,也只好這樣了,帝國要是出了新政修復這個問題,記得告訴我聲哈!

闯荡Linux帝国:nginx的创业故事

4 多路複用

隨著公司業務的快速發展,大黃的工作壓力也越來越大,雖然fork多進程可以多派人手,但這一招也不是包治百病,畢竟帝國資源有限,進程多了以後頻繁的線程切換,大量的時間花在線程調度上,大黃真正處理業務的時間反而變少了。

小馬哥看到了大黃的窘迫,找到大黃說:你看,現在業務很多,你分身出來的這些進程,卻有好多都是閒著的,這不浪費資源嗎?

闯荡Linux帝国:nginx的创业故事

大黃:這沒辦法啊,這些進程接待上一個客戶還沒接待完呢,客戶沒有斷開連接,只能繼續等著,等他下一步的請求。

小馬哥:這就是明顯的人力浪費嘛,新的客戶來了沒辦法接待,而你卻還在乾等著,這不行。

大黃:額,這個······

小馬哥:我聽隔壁Apache的員工說他們用一個叫select的多路複用技術,不用幹等著,有消息會自動通知你們來處理,你們就可以騰出手來處理其他客戶的請求了。

大黃:好的,我去研究下。

闯荡Linux帝国:nginx的创业故事

又過了幾天後。。。

大黃:馬哥,我研究了下那個select多路複用,確實不錯,但是有個缺點,當我添加了多個需要關注的客戶後,有消息來了的時候,select它不告訴我到底是哪個客戶來請求了,我還得一個個檢查,客戶多了,浪費太多時間。

小馬哥:那還是比你乾等著不能接待其他客戶強吧,先用起來,別挑了。

大黃:馬哥別急,我還從Apache公司打聽到,他們還在用一個叫epoll的多路複用技術,這個比select好多了,它不僅告訴我有消息來了,還告訴我哪些客戶有消息,不用我去一個個檢查,省事!

小馬哥:你小子還給我藏一手,既然這麼好,趕緊用起來。

闯荡Linux帝国:nginx的创业故事

很快,大黃用上了新的技術,處理起網絡請求效率成倍提高,工作越發的得心應手。

公司的業務也是發展迅速,公司規模不斷擴張,招了不少新人,連隔壁Apache公司都眼紅了起來。

這天,小馬哥召集大家開會,宣佈了一項決定:公司發展迅猛,為了公司的品牌形象,決定起一個響亮的名字,我已經想好了,就叫nginx

未完待續·······

彩蛋

一天,小馬哥的辦公司來了一位美女。

“馬總你好,我叫小雪,是tomcat公司市場部的,現在動態網頁技術這麼火,貴司不考慮拓展下業務嗎?”

“動態網頁技術?這是什麼東西”

欲知後事如何,請關注後續精彩......

闯荡Linux帝国:nginx的创业故事
闯荡Linux帝国:nginx的创业故事

我是一個explorer的線程

我是一個殺毒軟件線程

我是一個IE瀏覽器線程

比特宇宙-TCP/IP的誕生

產品vs程序員:你知道www是怎麼來的嗎?

我是一個流氓軟件線程

遠去的傳說:安全軟件群雄混戰史

一個HTTP數據包的奇幻之旅

闯荡Linux帝国:nginx的创业故事闯荡Linux帝国:nginx的创业故事


分享到:


相關文章: