標籤:

太狗血了,網站架構的本質居然是個時間管理問題

王二在一所大學混了 4 年,結果畢業後發現找不到好工作,看到簽了 BAT 的舍友羅小四,王二默默的留下屈辱的淚水。為了不讓自己給母校的求職率抹黑,王二隻好去了一個小公司。

小公司只有2個人,老闆給王二了一個伺服器,於是王二把文件、資料庫和程序全部塞到伺服器里,然後甩開膀子幹活了。

有朋友可能會問,王二為什麼把文件、資料庫和程序全部裝到同一台伺服器里?這樣很不好找啊,為什麼不能像垃圾一樣分門別類?

其實我們可以用做產品的思維來看待王二的這個網站架構。比如我們想做個 App,可以先做個微信公眾號,此為MVP ,目的是為了快速驗證想法是否靠譜。當我們發現用戶對公眾號的內容非常感興趣,而公眾號已經無法滿足用戶的互相交流慾望,此時才決定搞 App。

網站架構同理,當一台伺服器已經無法滿足網站業務的時候,此時再把文件、資料庫和程序拎出來,給它們單獨找一個伺服器。從三室的合租,變成一室的單身公寓,改善一下居住環境,這就是「應用和數據分離」。

這樣找東西就方便多了,但並非一勞永逸。

繼續上面的例子,在運營 App 的過程中,我們發現用戶對某幾類文章特別感興趣,於是在 App 首頁弄了個欄目叫「編輯推薦」,把有可能「火」起來的文章,主動呈現給用戶,這樣用戶就不用費心費力的自己去找了。同樣,當王二把應用和數據分離後,發現大部分用戶都只會訪問一部分數據,那麼完全可以把這一部分數據丟到緩存里,這樣可以給現有的伺服器騰出更多的空間。

把數據丟到緩存里,那麼緩存是個什麼東西呢?

緩存分為本地緩存和遠程緩存,它們都需要有個容器來裝。本地緩存可以和應用程序一起,放在應用伺服器里;而遠程緩存則放在專門的分散式緩存伺服器里。

如果經過了以上改造,伺服器空間還是不夠用,怎麼辦?

一個水池,只有一個排水口,要讓水位下降的再快一點,可以多搞幾個排水口。網站架構也一樣,多搞幾個應用伺服器,類似並聯的電路,完全可以解決交通擁擠堵塞的問題。「不患寡而患不均」,為了讓這幾個伺服器都能認真幹活,王二弄了個調度室,去平均分配它們的工作任務,這個調度室,就是複雜均衡調度伺服器。

雖然緩存可以分擔資料庫伺服器的壓力,但緩存也會過期,所以資料庫伺服器還是得 24 小時待命,不能出門逛個街約個會什麼的。如果很不幸網站數據喜人,那麼資料庫伺服器又要繼續以前加班狗的苦逼生活了。前面說應用伺服器可以並聯好幾個,那麼資料庫伺服器也可以玩並聯,一個主伺服器,專門用來寫數據,另一個從伺服器,專門用來讀數據,這就是「讀寫分離」。

資料庫的從伺服器就是主伺服器的腦殘粉,主伺服器留什麼髮型從伺服器留什麼髮型,它們之間是腦殘的 ctrl +c、ctrl+v 的關係。但是應用伺服器不知道啊,為了讓應用伺服器能愉快的和數據伺服器交流,一個很有前途的翻譯工作崗位誕生了,這就是應用伺服器裡面的「資料庫訪問模塊」。

準備步行去公交車站,我們肯定會選擇離自己近的那一站。到了站牌前,如果有三個站牌,我們肯定先看離自己最近的那個站牌。網站訪問也一樣,用戶的一個訪問請求過來了,離用戶最近的那個網路提供商的機房搶先接到了請求(CDN),然後把這個請求丟給網站的中心機房。而網站的中心機房也不想動彈離開座位去另一個辦公室找緩存伺服器,於是它原地翻出離自己手最近的緩存(反向代理),然後把數據返回給用戶。

分散式緩存伺服器一口氣並聯了好幾個,資料庫伺服器也從一人單打獨鬥變成了主從腦殘粉,其實這個時候文件伺服器相當不爽,三人明明同一天入職,現在應用伺服器、資料庫伺服器都不是一個人在戰鬥了,文件伺服器不並聯,天理難容啊!

文件伺服器也給自己弄了幾個並聯伺服器,然後改名叫分散式文件伺服器。

資料庫伺服器坐不下去了,它也要搞個分散式緩存伺服器,王二如果不給搞它就要離職。於是王二把資料庫伺服器叫到辦公室里,端了一碗心靈雞湯:年輕人啊,要學會時間管理,來一份郵件就處理一份郵件肯定效率極其低下的,你完全可以每天抽出半小時專門處理郵件,這樣效率更高一點啊。

資料庫伺服器覺得王二說的對,於是它把手頭的業務重新分了一下,不同的業務放在不同的物理伺服器上,頓時發現空間大了許多。

業務越來越複雜,搜索伺服器也加進來了,NoSQL 伺服器也加進來了,於是「資料庫訪問模塊」這個翻譯的工作量也增加了。

老闆發財了,變成了一個土豪,王二也走上了人生巔峰,這個時候來找應用伺服器的遠方親戚也越來越多了,什麼應用伺服器2008,應用伺服器2013,應用伺服器2017,應用伺服器2042……每天應接不暇,連刷朋友圈的時間都沒有,於是應用伺服器讓它們排了一個隊,這樣接待起來不至於秩序混亂,這個隊就是消息隊列。和搜索一樣,消息隊列也有自己的伺服器,叫做消息隊列伺服器。

後來應用伺服器發現2008、2013、2017、2042……這幾個親戚和自己一樣,都有膽結石,都要吃消炎利膽片,沒必要來一個親戚買一瓶啊,重複勞動太浪費時間了。於是應用伺服器索性把消炎利膽片單獨抽出來,放在分散式應用伺服器里,然後自己和那群數字親戚,想吃藥的時候,直接去裡面拿消炎利膽片就行了。

所以,網站架構說到底,本質依然是個時間管理問題——作者,你出來我保證不打你。
推薦閱讀:

產品流程圖畫法——畫出更清晰準確的流程圖
互聯網簡訊-20180325
阿里巴巴產品經理實習生標準?
初次了解PM
參加一場產品相關LIVE的想法

TAG:產品經理 |