- DNS 網域名稱系統
- Load Balancer 負載平衡
- Web Application Servers 網站伺服器
- Services 網站服務拆分
- Database Servers 資料庫伺服器
- Caching Service 快取服務
- Job Queue & Servers 工作佇列
- Full-text Search Service 全文檢索
- Data
- Cloud storage 雲端儲存
- CDN
- Logs 日誌管理
DNS 網域名稱與IP位置的對照表,使用者能透過網域名稱,一個網域名稱對應一個IP位置
如果我們今天將網站架在五台機器上,我們不可能讓DNS server把網域名稱同時指向五台機器上。 當流量進來時,Load balancer會將流量導到不同機器上。
水平擴充
我們的網站服務,可以分為負責前端頁面處理的,以及負責接受請求的API伺服器。 API伺服器在收到前端伺服器的請求時,負責查詢資料庫,並以JSON格式回傳資料。
延續上部分,我們可以將我們的網站切分成多個服務,通常會把
- Account service 用戶系統,包含驗證,權限管理,儲存用戶資料等 Oath
- Content service 內容系統,儲存metadata,有個介面可供使用者下載內容與紀錄歷史紀錄
- Payment service 金流系統
- HTML -> PDF 看狀況吧
key/value 形式儲存 把需要計算資源並完成的結果暫存 比方說使用者要查詢的報表,查詢完之後就存到快取,使用者用同樣查詢條件時,就可以直接從快取呼叫。
Caching Servers
- Redis
- Memcache
我們的網站服務可能會有一些非同步的工作,這些工作的性質是不需要即時回傳資料給用戶的。這種類型的工作就可以用工作佇列(Job Queue)來處理。佇列使用先進先出(FIFO)方法。無論哪時候網站有工作需要處理,不管是例行性的工作排程、或是對於使用者操作的臨時回覆,都可以塞進佇列。
舉例:搜尋引擎會在使用者搜尋並點擊連結之後,重新計算搜尋結果的排名,這個過程不需要在使用者搜尋後立即執行並回傳任何資料給使用者,所以可以塞進佇列裡。
- Kafka
- RabbitMQ
許多網站服務都會提供文字搜尋的功能,使用者輸入文字,網站回傳最相關的結果。通常都是用反向索引(inverted index),是文字檢索系統常用的資料結構。有些database就有提供全文檢索,如MySQL,目前著名的雲端全文檢索服務有AWS的Elasticserach / Sphinx / Apache Solr
資料如何收集、儲存、分析 三個階段
Firehose 原始資料串流服務
- 擷取串流資料,消化與處理資料,這邊有AWS的Firehose
- 經過處理調整的資料會儲存到雲端儲存中
- 這些在雲端儲存中的數據有需要時,會被load到資料倉庫(Data warehouse)出來處理。如果資料量級相當大,可能會用類似Hadoop的NoSQL Map Reduce方式處理分析。
可以不用儲存在本機的檔案系統(File system)。影片圖片音檔靜態資源使用者事件資料等。
- AWS S3
通常用在靜態資源上:HTML/CSS/JS/圖檔,將這些資源同時放在世界上不同地區的伺服器。這些伺服器被稱為邊緣伺服器(Edge server)
Log level,日誌裡面記錄訊息的分級