簡單理解如何在高流量下守住網站

更新 發佈閱讀 5 分鐘

恭喜你成爲了政府網站的後端工程師,你的第一份工作很簡單

明天有 2300 萬人要同時進去普發 1 萬網站,不要讓網站掛掉
先不要急得辭職,我們可以先分析一些簡單的方法

分析問題

寫任何程式的第一步就是分析你要解決什麼問題,在你眼前擺著三座大山

1. 瞬間流量峰值
當所有人在同一時間點湧入,伺服器的 CPU、記憶體、網路頻寬都會瞬間達到極限。

2. 資料庫瓶頸
無論你有多少台應用伺服器,最終所有請求都要訪問同一個資料庫。資料庫的讀寫速度成為整個系統的致命瓶頸。

3. 資料一致性問題
2300 萬人不只是查詢資料,還要登記、查詢餘額、確認資格。如何在高併發情況下保證資料的正確性?這是最困難的挑戰。

一、首先,分而治之「身分證尾碼分流」

我想大家都遇到過演唱會訂票、剛開學的搶課、電商促銷時
如果人流很大,那些網站很容易直接掛掉,那就不要讓他們同時進來

透過身份證尾號,把全國人口平均分成十組。尾碼 0 和 1 的人星期一進來,2 和 3 的星期二,以此類推。原本一天要承受 2300 萬人的壓力,現在分散到五天,每天只需要處理約 460 萬人。這個數字看起來還是很嚇人,但至少比一次處理全部要可行得多。

二、再來,不要讓單一伺服器累死「負載平衡」

我之前用我家的電腦開網站,人少的時候是沒什麼事情
但人一多,回頭一看你的電腦正在著火

該怎麼辦呢?多買兩塊電腦
今天有流量進來,我把它會交給比較閒的每台,大幅降低單台電腦的工作量

當然電腦再多,資料庫終就只有一個
聰明如你馬上想到用 Redis,做一個快取大大降低資料庫的壓力

但 2300萬人不是只看資料,他們還要寫進去登記、查詢餘額、確認資格,更不用說同時更改了,你要怎麼保證資料一致呢?

三、快取系統

開發快取系統,眼前又有三座大山需要解決

快取穿透:當有人一直查詢一個根本不存在的資料,比如身分證號碼「Z999999999」。因為資料不存在,快取裡當然也沒有,所以每次查詢都會直接打到資料庫。如果有惡意使用者不斷送出這種請求,資料庫就會被拖垮。解決方法是即使查詢結果是「不存在」,也在快取裡記錄這個結果,避免重複查詢。

快取擊穿:當一個超熱門的資料剛好過期時,會有大量請求同時發現快取沒有這個資料,於是全部衝向資料庫。這就像演唱會門票剛開賣的那一瞬間,所有人同時按下購買鍵。解決方法是使用「互斥鎖」機制,確保同一時間只有一個請求去資料庫更新快取。

快取雪崩:如果大量快取資料同時過期,就會造成資料庫瞬間被大量請求淹沒。解決方法是讓快取的過期時間隨機化,避免集體失效。

四、將整個資料庫切成10塊小倉庫,「資料庫分片」

即便有了快取系統,使用者還是需要寫入資料的。
這時候就需要資料庫分片技術了。簡單說,就是把一個大資料庫切成很多小資料庫。

還是用身分證尾碼來舉例。我們可以建立十個小資料庫,尾碼是 0 或 1 的人,資料存在第一個資料庫;2 或 3 的存在第二個;以此類推。原本 2300 萬筆資料擠在一個資料庫裡,現在分散到十個資料庫,每個只管理約 230 萬筆資料。

這樣做的好處是什麼?當尾碼 3 的使用者在查詢他的申請進度時,他只會去第二個資料庫查詢,不會跟尾碼 7 的使用者搶資源。

但分片也帶來了新的挑戰。比如說,如果政府想要統計「目前總共有多少人完成登記」,就必須去十個資料庫分別查詢,再把結果加總起來。這比從單一資料庫查詢複雜多了。

五、訊息佇列,創建緩衝區

想像一家熱門餐廳,如果同一大堆人點餐,廚房肯定會大亂。
聰明的做法是什麼?讓客人在櫃台點餐,服務生把訂單寫下來依序交給廚房,廚房按照順序一份一份做。這就是訊息佇列的概念,寫一堆「待處理的訂單」,慢慢處理。

對於普發現金網站,當使用者送出「我要登記領取現金」的請求時,系統不需要立刻完成所有處理。它可以先告訴使用者「收到了,請稍候」,然後把這個請求放進佇列裡,後端系統再慢慢處理。

這樣做有幾個好處:首先,使用者不用傻傻等待,提交完就可以關掉網頁去做別的事。其次,後端系統可以按照自己的節奏處理請求,不會因為瞬間湧入太多請求而崩潰。最後,如果處理過程中出現錯誤,系統可以重試,不會讓使用者的申請就這樣消失了。

訊息佇列就像是一個緩衝墊,把「瞬間的超大流量」轉換成「持續的穩定處理」。原本一秒鐘內湧入的一萬個請求,可能會讓系統直接掛掉;但如果用訊息佇列接住,系統可以用一分鐘甚至更長時間慢慢處理完這些請求。

恭喜你,你現在可以從從容容、游刃有餘的休息了,你用你聰明的大腦成功守住你的工作

你可以在我得部落格中看到這篇文章

https://blog.ray-realms.com/article/beginner-guide-high-traffic-website


留言
avatar-img
留言分享你的想法!
avatar-img
Ray 貓 Realms
1會員
5內容數
Ray 貓 - 全端網頁工程師、遊戲開發師 這邊會分享一些科技相關、視覺藝術、前端的最新資訊 - 台灣大學課程網全端工程師 Ziphus 獨立開發者 - 喜歡挑戰也喜歡冒險 電子郵件 ray948787@gmail.com
Ray 貓 Realms的其他內容
2025/10/28
想讓 AI 助手存取你的本地筆記、檔案或資料庫?本文從實際痛點出發,完整解析 MCP如何成為 AI 與工具溝通的標準協定。帶你打造第一個 MCP Server,讓 ChatGPT 或 Claude 能自動讀取你的個人知識庫。讓你快速掌握 AI Agent 開發的核心技術。
Thumbnail
2025/10/28
想讓 AI 助手存取你的本地筆記、檔案或資料庫?本文從實際痛點出發,完整解析 MCP如何成為 AI 與工具溝通的標準協定。帶你打造第一個 MCP Server,讓 ChatGPT 或 Claude 能自動讀取你的個人知識庫。讓你快速掌握 AI Agent 開發的核心技術。
Thumbnail
2024/05/10
我投了 Jamie's Gap Year,只要你有非做不可的目標,不論是創業還是建立一個組織並且年紀小於 21 歲便可以投遞。我面試的過程中學到了很多寶貴的經驗與教訓,包括如何更好地向投資人展示我的商業價值和決策能力。這些都是非常重要的,希望我的分享對其他有類似經驗的人也有幫助。
Thumbnail
2024/05/10
我投了 Jamie's Gap Year,只要你有非做不可的目標,不論是創業還是建立一個組織並且年紀小於 21 歲便可以投遞。我面試的過程中學到了很多寶貴的經驗與教訓,包括如何更好地向投資人展示我的商業價值和決策能力。這些都是非常重要的,希望我的分享對其他有類似經驗的人也有幫助。
Thumbnail
2024/05/09
如果你曾經撰寫過網頁,那你一定接觸過 JavaScript 無論是在 NodeJs 或是瀏覽器中運行。 但你有沒有想過,我們寫下的 JS 程式碼,這些看似單純的英文和符號,是如何被轉化為機器能夠理解和執行的程式呢? 今天,讓我們一起深入了解其中的核心主角 ——Google 開發的開源 Java
Thumbnail
2024/05/09
如果你曾經撰寫過網頁,那你一定接觸過 JavaScript 無論是在 NodeJs 或是瀏覽器中運行。 但你有沒有想過,我們寫下的 JS 程式碼,這些看似單純的英文和符號,是如何被轉化為機器能夠理解和執行的程式呢? 今天,讓我們一起深入了解其中的核心主角 ——Google 開發的開源 Java
Thumbnail
看更多
你可能也想看
Thumbnail
臺灣獨立調香師品牌 Sunkronizo,Friday : Sexy Vibe 淡香精,揉合威士忌、菸草、皮革、蜂蜜與花香的多層次魅力,讓知性自信與內斂的從容態度,從視覺、嗅覺都充分表現。
Thumbnail
臺灣獨立調香師品牌 Sunkronizo,Friday : Sexy Vibe 淡香精,揉合威士忌、菸草、皮革、蜂蜜與花香的多層次魅力,讓知性自信與內斂的從容態度,從視覺、嗅覺都充分表現。
Thumbnail
使台劇得以突破過往印象中偶像劇、鄉土劇等範疇,產製更多類型,甚至紅到國外、帶動台灣觀光的最重要原因,便是「隨選串流平台」服務在近十年的蓬勃發展,台灣人愛看串流的程度或許比你我想像中都高,高到連美國電影協會(MPA),都委託Frontier Economics進行研究
Thumbnail
使台劇得以突破過往印象中偶像劇、鄉土劇等範疇,產製更多類型,甚至紅到國外、帶動台灣觀光的最重要原因,便是「隨選串流平台」服務在近十年的蓬勃發展,台灣人愛看串流的程度或許比你我想像中都高,高到連美國電影協會(MPA),都委託Frontier Economics進行研究
Thumbnail
本文探討串流平臺(VOD)如何徹底改變好萊塢和臺灣影視產業的生態。從美國電影協會(MPA)的數據報告,揭示串流服務在臺灣的驚人普及率與在地內容的消費趨勢。文章分析國際作品如何透過在地化元素開拓新市場。同時,作者也擔憂政府過度監管可能扼殺臺灣影視創新自由,以越南為鑑,呼籲以開放態度擁抱串流時代的新機遇
Thumbnail
本文探討串流平臺(VOD)如何徹底改變好萊塢和臺灣影視產業的生態。從美國電影協會(MPA)的數據報告,揭示串流服務在臺灣的驚人普及率與在地內容的消費趨勢。文章分析國際作品如何透過在地化元素開拓新市場。同時,作者也擔憂政府過度監管可能扼殺臺灣影視創新自由,以越南為鑑,呼籲以開放態度擁抱串流時代的新機遇
Thumbnail
本文介紹了 Vibe Coding 的概念、重要性、實作方法以及如何有效運用。Vibe Coding 透過自然語言與 AI 協作,改變了傳統的程式開發流程,將工程師的角色從「編寫程式碼」轉向「描述問題、審查解法」。
Thumbnail
本文介紹了 Vibe Coding 的概念、重要性、實作方法以及如何有效運用。Vibe Coding 透過自然語言與 AI 協作,改變了傳統的程式開發流程,將工程師的角色從「編寫程式碼」轉向「描述問題、審查解法」。
Thumbnail
雙橡園開發攜手多家知名品牌共同贊助,將於8/22-8/31在頂粵吉品星光盛宴大殿舉辦「2025灣聲七夕音樂節」。除邀知名影評人藍祖蔚深情導聆外,更特別安排由灣聲樂團與傳奇音樂人陳明章帶來「灣聲點唱機」互動演出,共譜七夕浪漫樂章!
Thumbnail
雙橡園開發攜手多家知名品牌共同贊助,將於8/22-8/31在頂粵吉品星光盛宴大殿舉辦「2025灣聲七夕音樂節」。除邀知名影評人藍祖蔚深情導聆外,更特別安排由灣聲樂團與傳奇音樂人陳明章帶來「灣聲點唱機」互動演出,共譜七夕浪漫樂章!
Thumbnail
BDD是什麼 BDD 是 Behavior-Driven Development(行為驅動開發) 的縮寫,是一種軟體開發方法論,結合了 TDD(測試驅動開發) 和 DDD(領域驅動設計) 的概念,主要目的是讓開發團隊、測試人員與非技術的業務人員(如產品經理)能用共同的語言協作,確保開發的系統功能符
Thumbnail
BDD是什麼 BDD 是 Behavior-Driven Development(行為驅動開發) 的縮寫,是一種軟體開發方法論,結合了 TDD(測試驅動開發) 和 DDD(領域驅動設計) 的概念,主要目的是讓開發團隊、測試人員與非技術的業務人員(如產品經理)能用共同的語言協作,確保開發的系統功能符
Thumbnail
如果你是一位開發者,正在尋找一款 速度快、支援多人協作、還內建 AI 助手 的新世代編輯器,那你一定不能錯過 Zed。 Zed 是由 Atom 編輯器與 Tree-sitter 團隊成員共同開發的新一代程式碼編輯器。它不只強調極速與極簡的使用體驗,更重要的是:現在可以免費使用 Claude 模型
Thumbnail
如果你是一位開發者,正在尋找一款 速度快、支援多人協作、還內建 AI 助手 的新世代編輯器,那你一定不能錯過 Zed。 Zed 是由 Atom 編輯器與 Tree-sitter 團隊成員共同開發的新一代程式碼編輯器。它不只強調極速與極簡的使用體驗,更重要的是:現在可以免費使用 Claude 模型
Thumbnail
「拓樸導體」是一個相對新興且複雜的物理學概念,要理解它,我們需要先了解一些基礎知識: 1. 拓樸學的概念: 拓樸學是數學的一個分支,研究的是物體在連續形變(如拉伸、彎曲)下保持不變的性質。你可以想像一個甜甜圈和一個咖啡杯,在拓樸學上它們是等價的,因為可以通過連續形變互相轉換。但一個球體就不同,它
Thumbnail
「拓樸導體」是一個相對新興且複雜的物理學概念,要理解它,我們需要先了解一些基礎知識: 1. 拓樸學的概念: 拓樸學是數學的一個分支,研究的是物體在連續形變(如拉伸、彎曲)下保持不變的性質。你可以想像一個甜甜圈和一個咖啡杯,在拓樸學上它們是等價的,因為可以通過連續形變互相轉換。但一個球體就不同,它
Thumbnail
踏上 Android 開發成功之路!2025 學習路線圖,從 Kotlin 程式語言基礎起步,逐步深入進階學習。掌握架構設計,利用豐富學習資源,設定短期與長期目標。遵循本指南,打造出令人驚艷的 Android 應用程式。
Thumbnail
踏上 Android 開發成功之路!2025 學習路線圖,從 Kotlin 程式語言基礎起步,逐步深入進階學習。掌握架構設計,利用豐富學習資源,設定短期與長期目標。遵循本指南,打造出令人驚艷的 Android 應用程式。
Thumbnail
最近幾年,「無程式碼」(Nocode) 平台的崛起正改變著我們對軟體開發的認知。在這個視覺化、直觀的操作環境下,即使沒有技術背景的人也能參與到軟體開發中。就像智慧型手機時代用語音和手勢操控一樣,Nocode 旨在使商業系統設計變得輕而易舉。
Thumbnail
最近幾年,「無程式碼」(Nocode) 平台的崛起正改變著我們對軟體開發的認知。在這個視覺化、直觀的操作環境下,即使沒有技術背景的人也能參與到軟體開發中。就像智慧型手機時代用語音和手勢操控一樣,Nocode 旨在使商業系統設計變得輕而易舉。
Thumbnail
本文章記錄了我在2023年8月透過Finlab課程和自己的研究開發出的一個量化投資策略程式,回測顯示年化報酬率達到99%。該策略在大盤不穩或空頭時期具有避免持股的特性,並在8年的回測中實現了驚人的資產增長。從2024年開始,我將開始實際將這一策略應用於市場,並在文章中記錄相關的實際操作。
Thumbnail
本文章記錄了我在2023年8月透過Finlab課程和自己的研究開發出的一個量化投資策略程式,回測顯示年化報酬率達到99%。該策略在大盤不穩或空頭時期具有避免持股的特性,並在8年的回測中實現了驚人的資產增長。從2024年開始,我將開始實際將這一策略應用於市場,並在文章中記錄相關的實際操作。
Thumbnail
本範例主要說明如何運用Flutter 繪圖與動態相關的API並搭配provider套件進行實作輪盤賭選擇 ( Roulette Wheel Selection ) 程式。
Thumbnail
本範例主要說明如何運用Flutter 繪圖與動態相關的API並搭配provider套件進行實作輪盤賭選擇 ( Roulette Wheel Selection ) 程式。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News