iT邦幫忙

4

活動人數是3000-5000甚至是100000人,該如何做避免同時間大量湧入網站掛點

  • 分享至 

  • xImage

先前一則關於直播串流的問題,感謝各位前輩們指路,我目前規劃500人以內的直播活動就使用自己的rtmp server+CDN,超過500人以上的活動我就直接使用AWS IVS,至於回看也直接放在S3上面,目前測試都非常順暢。

再來就是要好好想想,萬一今天的活動人數是3000-5000甚至是100000人,當活動開始前,這些人會在短時間內同時Login進入,我是否該注意那些事情~除了web server 還有db server?

前輩們有經驗通常一台server可以讓多少人同時進入呢?

謝謝

看更多先前的討論...收起先前的討論...
有如此規模的流量,應該就不會只有一兩個MIS及可憐兮兮的資訊預算可用了吧,跟老板講,不用錢解決,就不是問題了
普通一台伺服器平均百來個連接就很厲害了,如果記憶體不大,核心少少,那打折再打折,如果是想做這種大流量規劃,建議還是往雲上打算,以實際用量計算要花多少錢
manyan iT邦新手 5 級 ‧ 2021-07-13 15:13:53 檢舉
其實,程式頁面只有一頁,單純的login,大小約30KB 進入後就是直接觀看直播影片了。目前主機都是在雲端,有想過有EC2,有人數較多的活動時,就先預開多台,分散登入觀看的人流,但是不知道EC2一台可支撐多少的數量。
dragonH iT邦超人 5 級 ‧ 2021-07-13 18:01:12 檢舉
怎麼不 直接用 aws managed 的 medialive
ak02 iT邦研究生 1 級 ‧ 2021-07-14 09:09:11 檢舉
期待大大的後續執行結果發表
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
44
Ray
iT邦大神 1 級 ‧ 2021-07-13 04:56:22

先做壓力測試, 不同人寫出來的程式, 耗用資源可以相差數百倍...

我前幾個月有個客戶, 每多一人上線, 程式就需要多吃掉 60MB 的 RAM, 所以一台 8GB RAM 的主機, 只夠承載 130 人同時上線....他 RAM 爆掉的時候, 連 CPU 都還沒用到 40%....

但你寫的程式, 是吃 RAM 比較兇? 還是吃 CPU 比較兇? 分別各吃多少?
這些都要先做過壓力測試才會知道...(我知道很多開發團隊都沒做這個)
有數據才能解決真正的瓶頸, 不要自己一廂情願的蒙著眼瞎猜....

要找技術參考架構, 可以去看世界級的網路服務商,
這裡面隨便一家隨時都有千萬等級的登入, 看你能挖出多少情報:
https://stackshare.io/stacks

StackOverflow 論壇, 對它們自家架構有詳細的說明:
https://nickcraver.com/blog/2016/02/03/stack-overflow-a-technical-deconstruction/
你可以看到, 它們對自家效能數據量測得很清楚....
下面則是他的母公司 Stack Exchange 用的架構:
https://stackexchange.com/performance
(量測通常需要專人專職來做, 不是開發的人兼著做, 那是兩種不同工作)

避免同時炸機, 除了技術之外, 也有一些商業手段可用:

例如周期較長的促銷活動, 我會要求行銷不要偷懶, 想圖方便一次就把 Campaign 發給所有會員; 改成每小時發1,000人, 或者每10分鐘發1,000人, 都可以降低瞬間爆發的衝擊量....(當然, 技術部門要提供對應的工具)

直播有同時登入的需求, 跟網購不太相同, 但是可以善用 JWT 登入 Cache 的機制, 先把 Cache 時間拉長到幾小時甚至一天, 然後在真正的直播之前幾天, 先利用其他的小活動, 引誘會員提前登入驗證, 在 Browser cache 留下 JWT Token....

等到真正直播開始的時候, 這些已經有 Token 而且還在效期內的人, 就不需要重複執行登入流程, 耗費你的系統資源....(當然, Token 存留期長就會有資安風險, 要仔細討論裡面的流程和保護機制)

或開 2FA/reCaptcha/九宮格 驗證, 利用客戶的操作來減緩登入速度...
(開這個可能會被會員或行銷給幹爆, 不過你夠強勢就可以一夫當關...)

以上都是透過商業手段, 來降低技術衝擊的技巧...

若自己沒把握做到高速驗證, 也可以找第三方 SaaS 來幫你做驗證, 例如: Auth0 或 AWS 的 Cognito....如果你還在用 RDBMS 做身分比對的話, 先提醒一下: 單獨只靠 RDBMS 的架構, 要花很高成本才能應付高速驗證.....

看更多先前的回應...收起先前的回應...

/images/emoticon/emoticon33.gif

wrxue iT邦好手 1 級 ‧ 2021-07-13 09:28:10 檢舉

聽君一席話,勝讀十年書/images/emoticon/emoticon31.gif

manyan iT邦新手 5 級 ‧ 2021-07-13 15:13:29 檢舉

其實,程式頁面只有一頁,單純的login,大小約30KB 進入後就是直接觀看直播影片了。目前主機都是在雲端,有想過有EC2,有人數較多的活動時,就先預開多台,分散登入觀看的人流,但是不知道EC2一台可支撐多少的數量。

Ray iT邦大神 1 級 ‧ 2021-07-13 15:54:29 檢舉

您可能還是沒意會到, 問題不在:

一台 EC2 可以支撐多少流量?

而是在:

你的程式需要多少資源來服務一個人?

上面舉過例子了:
有的客戶一台主機只能撐 130 人,
但我也用一台主機撐過 10,000 人,
所以, 這兩台主機的規格是相同的嗎?

EC2 從 0.5GB RAM 到 24TB RAM 都有, 從 C4 到 Z1D 總共可以數出 368 種不同的規格, 光講一個 EC2, 就有 368 種不同效能的可能性:
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html

如果沒有先定義好, 什麼規格才叫: 一台? 我開的一台, 跟你開的一台, 會是相同的效能嗎? 一台 t3.micro, 會跟一台 z1d.12xlarge 相同效能嗎?

若不講規格, 我只說:能用一台 EC2 撐一萬人, 你也能辦到嗎?

關鍵在:
程式..程式..程式...
壓測..壓測..壓測...
數據..數據..數據...

旅行社叫我派一輛車來接客人, 我是要派:
雙人敞篷車? 五人小客車? 九人小巴? 20人中巴? 40人雙層大巴?

以上通通都可以稱為: 一輛車...
人家要怎麼分辨你要的是哪一輛?

石頭 iT邦高手 1 級 ‧ 2021-07-13 23:55:40 檢舉

@manyan 依照我的經驗如果會有這種大型高併發活動,一定需要作壓力測試來抓出我們目前能承受的最大容忍值(你目前已經訂了 10000人/sec目標),在利用你壓測出來的數據來把bottleneck找出來解決(不得不說有時候需要增加硬體),但如果你連測試都沒有 問的問題真的很空泛....
雷神大大已經把該做的事情很明瞭的跟你說了 只差你要不要做
假如真的還不懂 我建議你把這個特別專案外包給別人 不然到時候上面會很刺激

奈特 iT邦新手 3 級 ‧ 2021-07-16 16:05:09 檢舉

如果沒有壓力測試的經驗,可先試用別人家的服務如Loader.io,測試後可取得數據及圖表,需要更進階的服務再付費來應付這個專案.

我覺得這邊 raytracy 說得很對,在進行這麼大量的附載之前要先進行壓力測試!
沒有過壓力測試,怎麼會知道要耗費多少資源,才會知道要怎麼擴充。

而且還有一個很重要的事情,沒有經過壓力測試,是無法知道你的軟體架構是不是可以撐得住。

有時候沒有先進行一次壓力測試,說不定資源一多,耗用的資源說不定是以倍數的方式在成長,而且大型軟硬體內部的資源調控(比如說記憶體交換所導致的迴圈),也必須要經過壓力測試後才會知道。

我有經驗是因為JRD耗用大量資源(使用記憶體超過1.75GB)導致整體效能瞬間下滑,到達瓶頸點後整體幾乎陷入死當,只能將服務重開。
那時候在這樣的狀況下,本來想說只能利用Cluster架構來處理,還好後面改用load balance來分攤session.

1
nigel
iT邦見習生 ‧ 2021-07-13 17:51:54

一台server 取决于它的性能也就所谓的”specs”, 如果一个网页至少有3000-5000 的人同时进来的话, 第一:traffic 肯定很高,所以就需要bandwidth 高, 第二 :RAM 至少要16GB 以上 , 第三: CPU 要高, 至少也要12-16 cores 毕竟处理器如果不够高, 多人一次进,怕server 性能会卡机。

如果你想要好的server,你可以浏览这个网站,他们提供高specs的server及价格公道。

1
打雜工
iT邦研究生 1 級 ‧ 2021-07-17 11:09:54

銀行要開幾個窗口才能應付3000-5000甚至是100000人的湧入?窗口的辦事能力(規格),客戶要辦的事務(消耗的資源),都是必須考慮的,除了行政手段的處理(分流...等),前面提到的問題你應該會比較清楚,建議先釐清問題的範圍、可用的資源,有了相關的數據,才能有合理且具有可信度的判斷及論述基礎。

我要發表回答

立即登入回答