Skip to content

Instantly share code, notes, and snippets.

@veritymissed
Created June 2, 2019 16:43
Show Gist options
  • Save veritymissed/34a17df7695e725849183b2b3ee5a17d to your computer and use it in GitHub Desktop.
Save veritymissed/34a17df7695e725849183b2b3ee5a17d to your computer and use it in GitHub Desktop.
大型網站架構與設計

Web structure

  • DNS 網域名稱系統
  • Load Balancer 負載平衡
  • Web Application Servers 網站伺服器
  • Services 網站服務拆分
  • Database Servers 資料庫伺服器
  • Caching Service 快取服務
  • Job Queue & Servers 工作佇列
  • Full-text Search Service 全文檢索
  • Data
  • Cloud storage 雲端儲存
  • CDN
  • Logs 日誌管理

DNS

DNS 網域名稱與IP位置的對照表,使用者能透過網域名稱,一個網域名稱對應一個IP位置

Load Balancer 負載平衡器

如果我們今天將網站架在五台機器上,我們不可能讓DNS server把網域名稱同時指向五台機器上。 當流量進來時,Load balancer會將流量導到不同機器上。

水平擴充

Web Application 網站伺服器

我們的網站服務,可以分為負責前端頁面處理的,以及負責接受請求的API伺服器。 API伺服器在收到前端伺服器的請求時,負責查詢資料庫,並以JSON格式回傳資料。

Services 網站服務的拆分

延續上部分,我們可以將我們的網站切分成多個服務,通常會把

  • Account service 用戶系統,包含驗證,權限管理,儲存用戶資料等 Oath
  • Content service 內容系統,儲存metadata,有個介面可供使用者下載內容與紀錄歷史紀錄
  • Payment service 金流系統
  • HTML -> PDF 看狀況吧

Database Servers

Cache 快取

key/value 形式儲存 把需要計算資源並完成的結果暫存 比方說使用者要查詢的報表,查詢完之後就存到快取,使用者用同樣查詢條件時,就可以直接從快取呼叫。

Caching Servers

  • Redis
  • Memcache

Job Queue 工作佇列

我們的網站服務可能會有一些非同步的工作,這些工作的性質是不需要即時回傳資料給用戶的。這種類型的工作就可以用工作佇列(Job Queue)來處理。佇列使用先進先出(FIFO)方法。無論哪時候網站有工作需要處理,不管是例行性的工作排程、或是對於使用者操作的臨時回覆,都可以塞進佇列。

舉例:搜尋引擎會在使用者搜尋並點擊連結之後,重新計算搜尋結果的排名,這個過程不需要在使用者搜尋後立即執行並回傳任何資料給使用者,所以可以塞進佇列裡。

Message Queue

  • Kafka
  • RabbitMQ

Full-text Search 全文檢索

許多網站服務都會提供文字搜尋的功能,使用者輸入文字,網站回傳最相關的結果。通常都是用反向索引(inverted index),是文字檢索系統常用的資料結構。有些database就有提供全文檢索,如MySQL,目前著名的雲端全文檢索服務有AWS的Elasticserach / Sphinx / Apache Solr

Data

資料如何收集、儲存、分析 三個階段

Firehose 原始資料串流服務

  1. 擷取串流資料,消化與處理資料,這邊有AWS的Firehose
  2. 經過處理調整的資料會儲存到雲端儲存中
  3. 這些在雲端儲存中的數據有需要時,會被load到資料倉庫(Data warehouse)出來處理。如果資料量級相當大,可能會用類似Hadoop的NoSQL Map Reduce方式處理分析。

Cloud storage 雲端儲存

可以不用儲存在本機的檔案系統(File system)。影片圖片音檔靜態資源使用者事件資料等。

  • AWS S3

CDN

通常用在靜態資源上:HTML/CSS/JS/圖檔,將這些資源同時放在世界上不同地區的伺服器。這些伺服器被稱為邊緣伺服器(Edge server)

Logs 日誌管理

Log level,日誌裡面記錄訊息的分級

高QPS的大流量設計

Reference

Web Architecture 101

How we scaled: 300K QPS & 3-5B requests a day

水平、垂直與功能性資料分割

Beanstalkd: 簡單快速的Job Queue

Inverted index

超高速即時處理架構-Kafka

Features of Webserver Stress Tool

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment