互聯(lián)網(wǎng)系統(tǒng)應(yīng)用架構(gòu)基礎(chǔ)分析
在互聯(lián)網(wǎng)系統(tǒng)中包含許多的工具,每個(gè)企業(yè)都有自己的架構(gòu),正如沒有完美的程序一樣,也不會(huì)有完美的架構(gòu)。
本節(jié)分析的架構(gòu)嚴(yán)格來說并不嚴(yán)謹(jǐn),但是卻包含了互聯(lián)網(wǎng)的思想,互聯(lián)網(wǎng)架構(gòu)如圖 1 所示。

圖 1 互聯(lián)網(wǎng)架構(gòu)
這不是一個(gè)嚴(yán)謹(jǐn)?shù)募軜?gòu),但是它包含了互聯(lián)網(wǎng)的許多特性。對于防火墻,無非是防止互聯(lián)網(wǎng)上的病毒和其他攻擊,正常的請求通過防火墻后,最先到達(dá)的就是負(fù)載均衡器,這是關(guān)注的核心。
負(fù)載均衡器有以下幾個(gè)功能:
-
對業(yè)務(wù)請求做初步的分析,決定分不分發(fā)請求到 Web 服務(wù)器,這就好比一個(gè)把控的關(guān)卡,常見的分發(fā)軟件比如 Nginx 和 Apache 等反向代理服務(wù)器,它們在關(guān)卡處可以通過配置禁止一些無效的請求。
- 比如封禁經(jīng)常作弊的 IP 地址,也可以使用 Lua、C 語言聯(lián)合 NoSQL 緩存技術(shù)進(jìn)行業(yè)務(wù)分析,這樣就可以初步分析業(yè)務(wù),決定是否需要分發(fā)到服務(wù)器。
提供路由算法,它可以提供一些負(fù)載均衡的算法,根據(jù)各個(gè)服務(wù)器的負(fù)載能力進(jìn)行合理分發(fā),每一個(gè) Web 服務(wù)器得到比較均衡的請求,從而降低單個(gè)服務(wù)器的壓力,提高系統(tǒng)的響應(yīng)能力。
限流,對于一些高并發(fā)時(shí)刻,如雙十一、新產(chǎn)品上線,需要通過限流來處理,因?yàn)榭赡苣硞€(gè)時(shí)刻通過上述的算法讓有效請求過多到達(dá)服務(wù)器,使得一些 Web 服務(wù)器或者數(shù)據(jù)庫服務(wù)器產(chǎn)生宕機(jī)。
當(dāng)某臺(tái)機(jī)器宕機(jī)后,會(huì)使得其他服務(wù)器承受更大的請求量,這樣就容易產(chǎn)生多臺(tái)服務(wù)器連續(xù)宕機(jī)的可能性,持續(xù)下去就會(huì)引發(fā)服務(wù)器雪崩。
因此在這種情況下,負(fù)載均衡器有限流的算法,對于請求過多的時(shí)刻,可以告知用戶系統(tǒng)繁忙,稍后再試,從而保證系統(tǒng)持續(xù)可用。
如果順利通過了防火墻和負(fù)載均衡器的請求,那么負(fù)載均衡器就會(huì)通過設(shè)置的算法進(jìn)行計(jì)算后,將請求分發(fā)到某一臺(tái) Web 服務(wù)器上,由 Web 服務(wù)器通過分布式的 NoSQL 和數(shù)據(jù)庫提供服務(wù),這樣就能夠高效響應(yīng)客戶端的請求了。
從上面的分析可以知道,系統(tǒng)完全可以在負(fù)載均衡器中進(jìn)行初步鑒別業(yè)務(wù)請求,使得一些不合理的業(yè)務(wù)請求在進(jìn)入 Web 服務(wù)器之前就被排除掉,而為了應(yīng)對復(fù)雜的業(yè)務(wù),可以把業(yè)務(wù)存儲(chǔ)在 NoSQL(往往是 Redis)上,通過 C 語言或者 Lua 語言進(jìn)行邏輯判斷,它們的性能比 Web 服務(wù)器判斷的性能要快速得多。
通過這些簡單的判斷就能夠快速發(fā)現(xiàn)無效請求,并把它們排除在 Web 服務(wù)器之外,從而降低 Web 服務(wù)器的壓力,提高互聯(lián)網(wǎng)系統(tǒng)的響應(yīng)速度