iT邦幫忙

3

三倍卷銀行網站overloading

今日因三倍卷風潮,各大銀行推出限額優惠方案,所以很多網站都掛點~
令我想問些問題:
1.一個普通的IIS或Apache網站,正常可以負荷的流量通常為多少才需要去注意overloading的問題?1千or1萬個user?
2.假設一個IIS或Apache下如果有掛3個專案網站,且承上題一個正常web server可以負荷的流量假設為1000個user,那這3個專案網站流量是合併計算還是分開計算呢?
3.通常要解決這突然間暴量的流量的方法是什麼呢?用VM技術做分流?VM+多個web server分量?多個DB分流?多執行緒?。。。。
4.承上題,這問題目前看起來好像很少企業有解決,可能要解決所需要的硬體成本或異動系統的成本太高,所以每次遇到這種爆量的問題就是讓系統掛掉,或是在技術上要解決這問題還是有瓶頸,所以就放著沒有解決~

1. Web connection 看的是session數,不是user 數。
2. 要看你網站的架構是什麼,無法統一而論;但我的作法都是看site,因為一個site可以拉出一個process,在OS層級比較好管理。
3. 不一樣,爆量的結果通常就是沒有回應,導致這樣就要從頭查到尾,看是網路封包送出不去,卡在IPS、防火牆、還是process資源處理有問題,DB loading太重反而比較少見,DB常見的問題反而是 table locked。
4. 不是無法解決,技術是一回事,但最大的問題都是成本(錢);而且這種通常都是瞬間的問題,解決瞬間的問題去花一個固定的成本是很浪費資源的。除非系統是用IAAS這種雲端架構處理,才能針對可能造成的時間點進行資源調整,但前提是要知道問題在什麼地方才能處理。
39
raytracy
iT邦大神 1 級 ‧ 2020-07-01 14:34:57

你問的其實是個知名的問題, 叫做 C10K, 他原本是 1999 年由工程師 Dan Kegel 所觀察並給予命名的, 之後逐年修正他的觀察與發現, 並整理成一份開發注意的事項發布在網誌上: The C10K problem (中譯版)

這份網誌從 1999 年一直更新到 2011 年, 而且成為業界熱門討論的議題. 照理說, 過去 10 年在學校接受正規資訊教育的大學人才, 應該要研讀過並實地解決過這個問題才對, 很不幸的, 現在看起來, 學校並沒有把這個能力教好....

事實上, 目前的問題, 已經從當年 (1999) 的 C10K, 往上演變成 C100K, C1M, C10M 了, 想想: 為何每天上億人同時對臉書按讚, 臉書卻不會當掉? 每天有上千萬人同時在看 NetFlix, 他卻還能正常地播放?

所以這個問題當然有解, 而且人家也解得很好; 問題是, 他不是通則解, 而是特殊解, 所以不會有一個標準答案放到哪個系統都適用; 而是每一種情境會有他自己獨特的解法, 即便商業模式相同, 也會因為內部所使用的技術差異, 造成解法有很大的差異, 所以每個組織要有能力去找出自己的解法.

這也是為何, 你很少聽到, 會有人出來講這問題「如何如何解..」, 因為去聽了也沒用, 你沒有跟他一樣的環境可以模仿. 這就好像, 巴菲特說他的投資心法如何如何時, 你沒辦法模仿他的心法, 得到跟她同樣的投資結果, 因為你沒有他那麼大的資本池可以自由運用.

解決 C10K (或 C10M) 問題, 需要 1~3 位資深的系統架構師投入三年以上的設計, 現在市場上一位 Web 系統架構師的價位大約在年薪 NT$250萬~$500萬 以上, 而通常企業聘僱一位員工, 他至少要連續 10 年能夠產出本身薪資的 10~20 倍價值, 才值得企業聘用.

工程師應該知道的 C10K 問題

上一個10年,著名的C10K並發連接問題

UNIX C10K 問題和 Libevent 庫簡介

還有, C10K (C10M) 問題很少單純靠增加硬體就能解掉的; 若要把硬體容量增加到問題能夠全解 (以後不再發生), 因為他是非線性成長上去的, 那個投入的硬體資本非常驚人, 會比你聘幾位架構師十年的費用還多出十幾倍....

回到最初的問題, 你現在還不用去想 C10K, 因為你的系統連最基本的「可視度」(Visibility) 都還沒有, 凡事都在瞎猜: 多少人會當掉? 多少人要往上加? 多少xx 要多少yy?....當系統沒有可視度的時候, 所有假設都只能瞎猜. 所以請先建立你的可視度, 取得所有營運數據之後, 再來問還不遲...

我每天監測網站的數據高達數百項, 要從這數百項數據中, 找出個別的瓶頸來優化, 才能衝破 C10K 的障礙....

舉個例子: 我實測某個網頁用 PHP 寫, 每分鐘可承受 2500 人瀏覽; 但若全部改成用 HTML 撰寫, 每分鐘可承受 10 萬人瀏覽. 我光是換一種開發技術, 可承受的流量就不同; 沒有實際的測試數據和架構, 沒有辦法討論下一步該做甚麼...

看更多先前的回應...收起先前的回應...
Billour iT邦新手 5 級 ‧ 2020-07-01 14:59:51 檢舉

我學習了,感謝你的分享。

leo226 iT邦新手 5 級 ‧ 2020-07-01 15:36:06 檢舉

感謝大師指教~

eason0102 iT邦新手 5 級 ‧ 2020-07-02 11:12:31 檢舉

C10K,來去拜讀一下

ni0 iT邦新手 5 級 ‧ 2020-07-02 13:34:35 檢舉

同樓上,感謝分享

1
浩瀚星空
iT邦超人 1 級 ‧ 2020-07-01 17:42:52

1.一個普通的IIS或Apache網站,正常可以負荷的流量通常為多少才需要去注意overloading的問題?1千or1萬個user?

這個問題一般是用評估值,因為要考量的東西很多。
最大頻寬、io最大讀寫、cpu承載。再加上程式並發量及請求量。
跑的程式或網頁不同。就有可能會有3萬與3千的user承載量的差異。
所以並無法給你確定的答案。

2.假設一個IIS或Apache下如果有掛3個專案網站,且承上題一個正常web server可以負荷的流量假設為1000個user,那這3個專案網站流量是合併計算還是分開計算呢?

合併!!除非你有做vps的特性。會有些不同。

3.通常要解決這突然間暴量的流量的方法是什麼呢?用VM技術做分流?VM+多個web server分量?多個DB分流?多執行緒?。。。。

這沒有正確的答案,你上面說的都對,也都不對。

4.承上題,這問題目前看起來好像很少企業有解決,可能要解決所需要的硬體成本或異動系統的成本太高,所以每次遇到這種爆量的問題就是讓系統掛掉,或是在技術上要解決這問題還是有瓶頸,所以就放著沒有解決~

有錢就可以解決。並非是沒解決。
目前來說gcp跟aws是最好的選擇。
其負載智能規劃應用很好。但這是需要有專業的人員來調配處理的。
但也不用太擔心。現在的aws跟gcp都有其對應的套件包處理。
不需要太過專業也可以自行架設。
(雖然我不太想裝套件包都自已來)

0
arsee
iT邦新手 5 級 ‧ 2020-07-02 10:56:07

回答1:
不同網頁伺服器及不同網頁寫法,會產生該網站的「可負荷」流量不同。採用不同硬體也同時會影響可負荷程度。
⦁ 伺服器
改用Nginx 就比 Apache的流量負荷高。

⦁ 網頁寫法
要先用壓力測試工具去測「標準網頁(例如首頁)」於每秒平均可展示幾頁?(先算出該網頁總bytes,又用工具測出網站伺服器每秒可呈現多少bytes,後者再除以前者,就能算出每秒可負荷的網頁數)

⦁ 網通設備
買Load Balance (負載平衡)的網通設備,把網站架構改成Cluster架構,基本上能負荷的流量就多出很多。能多出多少,要看該硬體設備能力而定。

回答2:
這要看「3個專案網站」是否同一IP出口而定!
若3個網站接上網際網路的出口,是各自獨立的IP,那麼除了共用的 Web Server 要計算它的三合一負荷度之外(再除以3就算出三個網站各自應佔的流量),此三個網站的流量要分開算。反之,若是同一IP出口,就要一起算。另,在網站與送上網之中間,因中間的不同硬體也會有不同的負荷影響。例如,採用100Mbps HUB,流量負荷就不如 1Gbps core switch

通常要解決這突然間暴量的流量的方法是什麼呢?

回答3:
治標的都是直接插入硬體,做Load Balance 的功能。治本就必須重新規劃網站用途,並取得網站的拜訪量(例如 google GA),及壓力測出該網站的可負荷量。於整體規劃測試後,再決定要匹配的「各類硬體」。在已經「不行不行時」,採用軟體性的VM分流,它只會占更多資源,反應速度只會變慢而已。

所以每次遇到這種爆量的問題就是讓系統掛掉,或是在技術上要解決這問題還是有瓶頸,所以就放著沒有解決~

回答4:這是外行人的說法!!

結論:
⦁ 要儘量提高網站流量,建議採用NoSQL架構!

⦁ 變更網頁開發方式(捨棄傳統網站伺服器使用):用機械碼來取代傳統網站伺服器 > Web Server(Nginx, apache, IIS)

⦁ 網站上線之前,要先考慮遇到流量爆衝時之暫時解決方案(先準備好一台Load Balance網通設備,而且網站要架設成Cluster架構)。最好已早就有整體流量的規劃方案之後才上線。

我要發表回答

立即登入回答