少於 1 分鐘閱讀

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 為機器服務
  • 提供資料方、使用資料方 參考資料