UAT benchmark · cust_5b90942f · powered by k6 · 2026-04-29T11:16:00.344Z
Peak load summary (200 concurrent users)
gRPC — Typical response time
510.39 ms
Worst case (1-in-100): 1149.89 ms
REST — Typical response time
708.68 ms
Worst case (1-in-100): 2539.09 ms
Requests per second at peak
375.5 req/s gRPC
REST: 269.25 req/s · Higher is better
Failure rate at peak
0% gRPC
REST: 0% · Lower is better
⚠ Network path note:
gRPC hits the internal AWS ELB directly over plaintext — shorter network path, no TLS overhead.
REST hits uat-api.spyne.xyz over public HTTPS, which adds TLS + potential CDN/proxy hops.
A latency gap favouring gRPC partly reflects this network difference, not purely protocol efficiency.
gRPC response payloads are also ~2.4× larger (Protobuf binary vs JSON).
Single-user baseline — no load (1 VU × 30s) ✅ = winner for that column
Transport
Fastest
Average
Typical (median)
Slow (1-in-20)
Worst Case (1-in-100)
Slowest
Total Reqs
Failure %
gRPC
230.42 ms
237.76 ms
233.32 ms
249.64 ms
312.48 ms
316.51 ms
43
0%
REST
314.97 ms
332.41 ms
320.14 ms
390.03 ms
461.02 ms
821.13 ms
89
0%
Stress test — latency under concurrent load Concurrent users simulate real traffic spikes · each stage runs for 60s
Concurrent Users
Transport
Typical (median)
Slow (1-in-20)
Worst Case (1-in-100)
Throughput
Failure Rate
10 users
gRPC
234.37 ms
248.63 ms
254.93 ms
14.28 req/s
0%
REST
298.76 ms
335.96 ms
373.14 ms
33.09 req/s
0%
50 users
gRPC
243.58 ms
282.72 ms
317.31 ms
69.58 req/s
0%
REST
294.48 ms
358.06 ms
421.73 ms
169.2 req/s
0%
100 users
gRPC
282.33 ms
391.4 ms
425.53 ms
128.77 req/s
0%
REST
378.99 ms
524.24 ms
587.28 ms
256.71 req/s
0%
200 users
gRPC
510.39 ms
694.69 ms
1149.89 ms
375.5 req/s
0%
REST
708.68 ms
973.56 ms
2539.09 ms
269.25 req/s
0%
REST failure reasons by stage Request-level classification from the updated k6 script
Stage
Total Failures
Transport
Non-200
Invalid JSON
Missing Data
Status Breakdown
warmup-rest
0
0
0
0
0
—
rest-10vu
0
0
0
0
0
—
rest-50vu
0
0
0
0
0
—
rest-100vu
0
0
0
0
0
—
rest-200vu
0
0
0
0
0
—
"Slow" latency (1-in-20) under load Lower is better · ms
Requests per second Higher is better
Failure rate under load Lower is better · 0% = no failures