SRE · 負載測試報告 · synforce · 兩階段升級成果

Umami /api/send 事件收集端點壓測

量測自架 Umami(umami.holmesmind.com)在 synforce 網站上 real/cold 兩種情境的承受能力,並驗證兩次升級(機器規格 + 橫向擴展)實際帶來多少改善。

執行者 SRE 目標 website synforce umami 機器 c7g.xlarge, 4 vCPU / 8GB(CFClient) 架構 2× app 副本 + 共用 postgres + Caddy 負載平衡 k6 v2.1.0
兩次升級,兩次改善

Cold 模式 p95 延遲從 5.32 秒降到 19.72 毫秒(270×),real 模式降到 12.83 毫秒

先把機器規格從 2 vCPU 升到 4 vCPU(t4g.medium → c7g.xlarge),大幅改善 real 模式表現;接著把 umami app 橫向擴展成 2 個副本(共用同一個 postgres、Caddy 負載平衡),連 cold 模式也一併解決。兩次升級各自解決不同情境的瓶頸,疊加起來 real/cold 現在都表現健康,全程 checks 100% 通過。

總覽數據(最終狀態)

Checks 通過率
100%
real/cold 全程 100% 通過
Cold p95 延遲
19.72ms
升級前 5.32s,改善 270×
Dropped Iterations
0
real/cold 皆歸零
整體吞吐
161.8req/s
10→300 req/s 全程平穩

兩次升級

升級一

機器規格

2 vCPU / 3.7GB → 4 vCPU / 8GB
t4g.medium → c7g.xlarge

升級二

橫向擴展

1 個 app 副本 → 2 個 app 副本
共用同一個 postgres,Caddy 負載平衡

測試方法

階梯式加壓

10→50→100→150→200→250→300 req/s
每階持穩 45–75 秒,real/cold 各一輪

三階段對照 — 逐步改善

指標(real 模式)原始基準升級一後升級二後
med 延遲4.52s7.51ms6.54ms
p95 延遲9.75s1.79s12.83ms
max 延遲30.37s8.99s223.11ms
dropped_iterations18,7622010
http_reqs58,08776,64876,849
指標(cold 模式)原始基準升級一後升級二後
med 延遲7.34s13.96ms9.37ms
p95 延遲9.37s5.32s19.72ms
max 延遲10.01s5.49s280.94ms
dropped_iterations27,6946,8400
http_reqs49,15570,00976,849
PG 連線峰值161626

升級一(機器規格)讓 real 模式大幅進步;cold 模式要到升級二(橫向擴展)才真正突破——兩次升級分別針對不同瓶頸,疊加後兩種情境都達到穩定健康的狀態。

資料落地驗證

每輪測完立即查 /stats,確認 pageviews 對 http_reqs 量級相符,再 reset。

輪次pageviewshttp_reqs比例visitors
升級二後・real53,74876,84969.9%600
升級二後・cold53,83676,84970.1%600

比例對上腳本 7:3 的 pageview/自訂事件設計,visitors 對上 VU 池使用量,確認資料真的完整落地,不是被吞掉的假成功。

結論

Real/Cold 兩種情境現在都健康

10→300 req/s 全程 checks 100% 通過、dropped_iterations 歸零,real 與 cold 的延遲都壓在毫秒級,跟升級前的秒級延遲相比是量級上的改善。

兩次升級缺一不可

機器規格解決了 real 模式的算力需求;橫向擴展解決了 cold 模式需要更多資料庫併發處理能力的需求。兩個方向互補,疊加後才把兩種情境都補齊。

橫向擴展用官方原版 image,維護成本低

加開的第二個 app 副本沿用官方 ghcr.io/umami-software/umami:latest,共用同一個 postgres,之後升級 umami 版本直接換 image 即可,不用維護客製化程式碼。

順便拿到高可用性

兩個 app 副本由 Caddy 負載平衡分流,其中一個容器異常時另一個仍能繼續服務,不再是單點故障。

後續方向:目前架構(2 副本)已能穩定應付 10–300 req/s 全範圍測試。長期可考慮把「多副本+負載平衡」模式搬到 ECS,搭配 auto scaling 隨流量自動增減副本、postgres 搬去 RDS,屬於架構優化,可視流量成長節奏排入規劃。