如何建立大型雲端網站

閱讀時間約 6 分鐘
最近看到這篇文章Design a system that scales to millions of users on AWS,覺得很有趣,想說把他的概念整理下來。他整個流程約略是如圖一所示
圖1. 架構一個大型雲端網站的步驟
在規劃一個雲端網站系統之前,首先要做的就是了解該系統會有多少使用量。基本上都是要先推估未來三年的可能使用量。假設如果這個系統可能有的資料量如下:
  • 每個月會有1TB的新資料湧入網站,每筆寫入封包占1KB的資料量,且每個月有10億的寫入封包筆數。這樣預估三年累積下來就會有36TB的資料量(我們假設每一筆寫入封包都是全新資料,而不是部分內容更新。)。
  • 假設每秒鐘平均需要處理有400筆寫入封包和4萬筆讀取封包(讀寫的比例為100:1)。
因為對一個網站來說,每秒鐘處理一個封包,就相當於每個月需要處理2500萬個封包。每秒400筆寫入封包就相當於每個月1億筆寫入封包量,每秒4萬筆寫入封包就相當於每個月10億筆讀取封包量。緊接著,根據預估的使用量來規畫需要的硬體設備,部署到雲端。早期在虛擬機器時代的步驟就是A到F的步驟,而在現在容器化的時代,就是步驟G。容器化時代的思維就只是把網站的功能再切割成更細微,劃分成更多層面來做管理。以下的文章敘述省略安全性的管理,因為我覺得那是另外一個議題。
圖1. 雲端網站擴充方案A到D
1. 方案A - 基本配備
系統初期只有1到2個使用者,因此只需要一個最簡單的基本設備就可以了,就是一個網站伺服器搭配一個DNS服務。因此,使用者只要在雲端上建立一個虛擬主機,再搭配一個Storage,和資料庫(如MySQL)即可。記得要隨時監控系統狀態(如CPU,記憶體,IO,網路等),確認何時需要擴充設備。
初期的系統僅需要採取垂直擴充(Vertical Scaling)的方式,擴充硬體的大小即可(垂直擴充就是擴充硬體的大小,舉例將1Core的CPU增加成3Core的CPU。關於Scaling相關的議題之後,再補充介紹)。
2. 方案B - 增加Object Storage
當網站流量增加的時候,開始將資料庫中的靜態資料(如使用者的設定檔,JS,CSS,圖片和影片)轉移到放在物件導向的儲存設備(如AWS S3)。
使用像AWS RDS的服務來管理MySQL,做簡單的擴充性管理,或者配置在AWS多個Availability Zone上(AZ),當然多加設備就是多燒錢。
3. 方案C - 增加負載平衡策略
由於網站伺服器無法應付尖峰時間的流量,因此要採用水平擴充(Horizontal Scaling)的方式來處理尖峰時刻的流量(水平擴充就是增加硬體數目,如一台伺服器變三台伺服器)。這個時期需要做的處理如下:
  • 配置網站伺服器在多個AZ中,分散網站的流量。
  • 設定一個像AWS ELB或者是HAProxy那樣的負載平衡器(Load Balancer),設定讓配置在不同AZ的網站伺服器皆可服務使用者的流量。
  • 增加多個MySQL資料庫的副本(Replica),並配置在不同AZ上來增加系統可用性,防止萬一有一個資料庫副本掛掉,還有其他的資料庫副本可以提供服務。
  • 將網站切割成一個反向伺服器(Reverse Proxy)跟兩個應用伺服器(Application Servers)。其中,一個應用伺服器專門處理讀取的API,另一個處理寫入的API。
  • 靜態的內容搬到像AWS CloudFront那樣的內容傳遞網路(Content Delivery Network)來減少負載跟減輕存取延遲。
4. 方案D - 改善資料庫讀取速度
  • 增加像Elasticsearch那樣的記憶體快取(Cache)在減輕資料庫的負擔和降低存取延遲。
  • 利用像AWS Autoscaling的水平自動擴充(Horizontal Autoscaling)服務,來動態根據目前流量增加網站伺服器數目,因應臨時大量的流量需求。
  • 增加MySQL資料庫的讀取複本來減輕資料庫的讀取流量負擔。
圖3. 根據不同流量需求擴充設備
5. 方案E - 導入自動化管理
  • 利用水平自動擴充的方式和透過CloudWatch的監控,動態根據當前流量,自動增加或減少網站伺服器和應用伺服器的數目。當流量增加的時候,自動增加伺服器數目來提供服務給使用者;當流量減少的時候,自動減少伺服器數目來節省開機的成本(其實這個水很深阿><,哀)。
  • 利用如Ansible那種部署應用服務的工具做自動化部屬。
6. 方案F - 改善資料庫寫入速度
  • 當資料庫的資料越來越大,開始要把資料庫中的資料再作切割跟轉移。
  • 擴充像Elaticsearch這樣記憶體快取系統的方式來減低讀取流量的負載。
  • 把寫入應用程式伺服器在切分成同步和非同步兩種應用伺服器,並且增加像Kafka那樣的訊息處理系統來加快封包處理速度。
  • 利用切片(Sharding)等資料庫水平擴充的技術來擴充資料庫。
  • 將合適的資料轉移到更利於水平擴充的非關聯式資料庫(NoSQL)。
圖4. 將應用程式部署到Kubernetes
7. 方案G
  • 轉移到像Kubernetes那種容器化的系統,根據網站各種應用程式的功能,將不同應用程式部署在不同的namespace上做管理。
  • 好處是管理的粒度越小,因為將原本部署在虛擬機器(Virtual Machine,VM)上的應用程式切割成更小的容器(Container);但缺點就是更複雜。
  • 想看看,假設原本網站部署在10台VM上,每台VM假設有10個應用程式,所以總用有100個應用程式。現在換成用Kuberntes做部署在5台VM上,100個應用程式就變成100個容器。表面上看起來比較省錢,因為原本要花10台VM的錢變成只要5台VM就好了,但卻變得比較難維護。
  • 因為以前工程師只要系統有問題,就登入相關應用程式的VM去檢查哪邊有問題就好了。但在Kubernetes系統,100個應用程式副本是隨機分布在每個VM上,彼此透過網路互相溝通,而且我們又啟動自動化水平擴充功能和自動化垂直擴充的方式來管理應用。一但有狀況發生,問題發生的原因就變得更複雜了。
參考資料
  1. System design primer
  2. System design
  3. Awesome system design
即將進入廣告,捲動後可繼續閱讀
為什麼會看到廣告
    7會員
    3內容數
    雖然說採用Kubernetes系統已經是IT界趨勢,但是你知道Kubernetes有多坑嗎?筆者以過來人的經歷,整理和分享之前在Kubernetes種種踩坑血淚史﹐希望可以降低大家的失敗機率。
    留言0
    查看全部
    發表第一個留言支持創作者!
    你可能也想看
    Thumbnail
    八十-二十法則提到,在多數生活的現象中,約80%的效果是來自於20%的原因,除了經濟學、學習理論外,這個法則同樣也可以應用在生活中的幸福感上。 我們需要認知到擁有的越多不一定會越快樂,反而有可能會因為無法專注在少數事物上而產生空虛、迷茫的感覺。「極簡」精神最重要的一點在於放下對於「多」的執著,將有
    Thumbnail
    1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
    Thumbnail
    近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
    Thumbnail
    可能包含敏感內容
    每一次淫狐到泰國玩樂的時候,除了去探索新開張的店、試試新的妹子之外,也會抽出一些時間約一些以往曾經找過的妹子。曾經有同好問,為什麼淫狐總是有那麼多配合度好的妹子可以找,其實這都是透過每一次前往泰國玩樂的過程中不斷的累積。這些會被淫狐重複約的妹子,淫狐都會紀錄在自己的夜遊人材庫中。
    Thumbnail
    本篇教學將教你如何建立和使用 textbutton,讓你可以使用文字快速建立玩家可以點擊的按鈕,並提供瞭如何更改按鈕文字和自訂點擊按鈕後的動作。
    弄清楚自己的投資目標、方式、工具,才有助於提升獲利率。
    Thumbnail
    這篇文章探討了職業生涯中的職涯安全性,從市場需求的角度出發,討論了穩定避風港和萌芽新趨勢等選擇。並提出瞭如何增進職涯安全感的建議,如開放的思維、重視過程多於結果,跨域能力和資源整合等。最後邀請讀者分享自己為增進職涯安全感所做的努力。
    汽車貸款是許多急需用錢的人取得資金的重要途徑,究竟該如何提升自己的貸款額度,需要貸款時又該如何選擇適合自己的汽車貸款方案? 類似的問題一再困擾許多有資金困難的朋友,擔心因為不熟悉貸款條件、流程,導致東奔西跑準備的文件,最後都因資格不符而付諸流水😭 貸先生聽見大家的心聲💓,統整了2021汽車貸款
    Thumbnail
    每個單月的25號,都是我期待錢從天上掉下來的日子,總是迫不急待拿出一疊發票,全神貫注加上臨場感的對獎,然而,你是不是也常忙到忘記對獎,有可能不小心的與財神爺擦身而過呢?
    Thumbnail
    隨著疫情及數位趨勢發展,服務業品牌開始紛紛導入預約排程管理工具,像是:美容美髮業、運動健身、旅遊導覽、課程體驗或是電商取貨及預約試穿等,各行各業都希望透過系統化 24 小時自動接單,同時落實防疫實聯制,提昇消費者預約到店的體驗。
    Thumbnail
    2022 年 7 月開始,Google 雲端硬碟教育方案將不再享有無限量儲存空間;還是那套Google的養套,單一機構分享100 TB。 你現在可以做的是「轉移您的內容」、匯出雲端相片 等...,究竟下一步該如何因應呢~
    Thumbnail
    有了展品內容與展示單元後,空間配置往往是最難啟動的第一步。如果你有過展覽專案的經驗,應該會知道,前期工作主要是確認「展示內容」,像是展陳大綱為何?展品有幾件?展示單元有幾個...等。但到了中期,需開始安排單元與空間的配置、考量動線的關係,又是另一門學問了...
    Thumbnail
    八十-二十法則提到,在多數生活的現象中,約80%的效果是來自於20%的原因,除了經濟學、學習理論外,這個法則同樣也可以應用在生活中的幸福感上。 我們需要認知到擁有的越多不一定會越快樂,反而有可能會因為無法專注在少數事物上而產生空虛、迷茫的感覺。「極簡」精神最重要的一點在於放下對於「多」的執著,將有
    Thumbnail
    1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
    Thumbnail
    近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
    Thumbnail
    可能包含敏感內容
    每一次淫狐到泰國玩樂的時候,除了去探索新開張的店、試試新的妹子之外,也會抽出一些時間約一些以往曾經找過的妹子。曾經有同好問,為什麼淫狐總是有那麼多配合度好的妹子可以找,其實這都是透過每一次前往泰國玩樂的過程中不斷的累積。這些會被淫狐重複約的妹子,淫狐都會紀錄在自己的夜遊人材庫中。
    Thumbnail
    本篇教學將教你如何建立和使用 textbutton,讓你可以使用文字快速建立玩家可以點擊的按鈕,並提供瞭如何更改按鈕文字和自訂點擊按鈕後的動作。
    弄清楚自己的投資目標、方式、工具,才有助於提升獲利率。
    Thumbnail
    這篇文章探討了職業生涯中的職涯安全性,從市場需求的角度出發,討論了穩定避風港和萌芽新趨勢等選擇。並提出瞭如何增進職涯安全感的建議,如開放的思維、重視過程多於結果,跨域能力和資源整合等。最後邀請讀者分享自己為增進職涯安全感所做的努力。
    汽車貸款是許多急需用錢的人取得資金的重要途徑,究竟該如何提升自己的貸款額度,需要貸款時又該如何選擇適合自己的汽車貸款方案? 類似的問題一再困擾許多有資金困難的朋友,擔心因為不熟悉貸款條件、流程,導致東奔西跑準備的文件,最後都因資格不符而付諸流水😭 貸先生聽見大家的心聲💓,統整了2021汽車貸款
    Thumbnail
    每個單月的25號,都是我期待錢從天上掉下來的日子,總是迫不急待拿出一疊發票,全神貫注加上臨場感的對獎,然而,你是不是也常忙到忘記對獎,有可能不小心的與財神爺擦身而過呢?
    Thumbnail
    隨著疫情及數位趨勢發展,服務業品牌開始紛紛導入預約排程管理工具,像是:美容美髮業、運動健身、旅遊導覽、課程體驗或是電商取貨及預約試穿等,各行各業都希望透過系統化 24 小時自動接單,同時落實防疫實聯制,提昇消費者預約到店的體驗。
    Thumbnail
    2022 年 7 月開始,Google 雲端硬碟教育方案將不再享有無限量儲存空間;還是那套Google的養套,單一機構分享100 TB。 你現在可以做的是「轉移您的內容」、匯出雲端相片 等...,究竟下一步該如何因應呢~
    Thumbnail
    有了展品內容與展示單元後,空間配置往往是最難啟動的第一步。如果你有過展覽專案的經驗,應該會知道,前期工作主要是確認「展示內容」,像是展陳大綱為何?展品有幾件?展示單元有幾個...等。但到了中期,需開始安排單元與空間的配置、考量動線的關係,又是另一門學問了...