系統設計核心觀念 (3) - 安全性
Security
雖然系統設計中不會討論到太細節,但還是會進行討論,所以知道一些基本的會有很大的幫助
Authentication / Authorization
Authentication 是指身份驗證,這一步的目的是查看“你是誰”,而 Authorization 是權限,這一步的目的是看你“能做什麼”,通常我們會用 API Gateway 或是專門的服務像是 Auth0 來處理,雖然面試官可能會希望討論更詳細的細節,但通常回答「我的 API Gateway 會處理身分驗證和授權」就足夠了
當前社群常見的選項有 Traefik、Kong、AWS API Gateway、Apigee
Encryption
簡單來說,就是確保資料在各個環節都是加密的,不論是在傳輸上、儲存時都確保是加密的,HTTP(s) 本身就有加密,而 gRPC 也有提供 SSL/TLS 的選項,對於敏感資料來說,讓每個用戶擁有各自的專屬密鑰來加密這些資料是必要的。
安全相關的議題可以延伸很多,可以參考這一篇
Data Protection
確保數據免受未經授權的訪問、使用或洩露的過程,在某些系統中,可能會有敏感數據暴露的風險,即使這些數據不在授權路徑內。
這類數據暴露通常是通過端點抓取(scraping)發現的。端點抓取是一種自動化技術,黑客或惡意用戶通過大量發送請求來嘗試從 API 中提取信息。因此,建議對這些端點實施某種形式的速率限制或請求限流(rate limiting 或 request throttling),以防止濫用和暴露敏感數據。
像是過去 Instagram 就曾被大量撈取隱私資料(來源),這都跟 data protection 沒做好有關。
當初赫赫有名的劍橋分析事件似乎也算是 data protetction 一個失敗的案例(來源)
Monitoring
隨著系統越來越龐大跟成熟,你會需要維運跟監控,監控一般來說有三個層級
-
Infrastructure Monitoring
基礎設施的運作狀況,像是 CPU、記憶體、硬碟空間、網路使用率
-
Service-Level Monitoring
監控服務的健康狀況跟效能,包括 request latency、error rates、throughput
-
Application-Level Monitoring
監控 APP 的健康狀況跟效能,包括使用者在線人數、active session 數量、active connections 數量,以及業務指標,通常也是系統設計面試最重要的討論層級
Service 是指以 API 提供服務的服務,而 Application 是調用 API 的服務,你可以視為
- service = server-side, application = client-side
- application 為使用者服務,servivce 為機器服務
- 提供資料方、使用資料方 參考資料