2/8 SRE 讀書會共筆


場地提供:PIXNET

第十九章:Load Balancing at the Frontend - by 91APP 黃冠維

Frontend Load Balancer - 流量要怎麼從用戶傳導到 Load Balancer

負載平衡的一些考量

  • 再強大的硬體都有極限
  • 負載平衡系統 用來決定 哪些機器處理某個請求
  • 架構考量 / 技術考量 / 使用者流量的屬性

搜尋請求 - 快速反應
影片上傳 - 大頻寬

  • 使用 DNS 來進行負載平衡
    • DNS 是最簡單、最有效的負載平衡機制
    • 一個 Load Balancer 有很多個 IP,根據流量來作延展

AWS 的 ELB,最多解析 8 個 IP
壓測工具,如果解出的 IP 是同一個,Load Balancer 很快就被打掛了
假設全世界的使用者,都會指到不同 IP

使用傳統 ELB,如果預期會有大量流量,需要開 support ticket 給 AWS,作 warm up 的工作

  • 使用虛擬 IP 處理負載平衡 (NLB)
    • 對用戶來說,解析到同一個 IP
    • 對封包來說,要怎麼知道要傳的目的地機器?
      id(packet) mod N
    • 用 MAC address 的解法
    • 用 NAT 的解法
    • 用 GRE 封包包裝的解法 => 可以跨機房

第二十章:Load Balancing in the Datacenter - by 91APP 黃冠維

  • 理想狀況:每一台 server 一樣的 loading
  • 實際狀況:每一台 loading 有差別

如果沒有平均,那 1000 台就沒辦法正常的 Load Balance

流量控制、健康管理

健康、拒絕連接、跛腳鴨狀態

例如:Server 升級的時候,可以宣告自己是「跛腳鴨狀態」,拒絕新連線的連入

子集劃分

Healthy Check,Server數太多的時候,不是好的分散式系統
例如:一個 Load Balancer 節點,負責三十個 Server 的 Healthy Check,前端 Connection 太多

建連線成本很大

用 Random 的結果,會不夠平均
套了神秘的演算法,就可以平均分配囉!

寫 Python 程式來驗證

用 random 是 C(300, 90) 的概念

連線分配

  • 輪詢 (Simple Round-Robin)
    • 子集太小
    • 每個 Request 成本不同
    • 不同等級的後端 Server
    • 其他因素
  • Least-Loaded Round-Robin
    • Server 很快回錯誤,比正常消化快,Load Balancer 會一直丟給這個有問題的 Server
    • 不知道其他 Load Balancer 有丟給節點的數量
  • Weighted Round-Robin
    • 混合各種系統健康速度,來作加權,決定要丟給哪個節點

討論

  • jnlin (PIXNET):遇過 DDoS 攻擊,後來用 DNS 來解決,把從越南、中國來的攻擊流量進行阻擋或 Filter
  • Rick (91APP):可以用 Route53 的 GeoDNS 來解決
    • 某些店被競品競爭,會被 DDoS
  • Raix (PIXNET):Virtual IP 如何 Route 到特定的機器
    • 硬體可以做得到
  • 小明:有沒有一個方式,可以在各國有自己的 8.8.8.8

第二十一章:Handling overload - by PIXNET Dennis

系統總是會過載

  • 服務降級

    • 只搜尋小部分的回傳結果
    • 存取非即時的 Cache 資料
  • QPS 陷阱

  • 限制服務端用量

    • 針對「異常」,返回錯誤訊息
    • 對服務配置額度
  • 服務端節流機制

    • 配額不足回應過多,應自己限制 request
    • Request 可以分重要性
      • 重要性可以繼承
  • 資源利用信號

    • 以 CPU 為指標
    • 由執行器負載均值來決定
  • 過載錯誤處理

    • 大部分資源過載
      • 停止 retry
    • 小部分資源過載
      • 快速拒絕,快速 retry
      • 可能是 load balancer 不完美造成的
  • Retry 的次數

    • 次數限制 < 3 次
    • 觀察 retry 比例 < 10%
    • 過載情況下,不需要 retry
      • 由可用資源拒絕

將過載極限值盡量提升到很難發生的程度

正瑋:降級服務,有人曾經作過這樣設計嗎?

Rick (91APP):作開關,例如廣告拿掉。
Rick (91APP):有在做容量 Control 嗎?
正瑋:跟容量規劃有點像
Rick (91APP):nginx 有內建,API Gateway 有類似的機制

Select a repo