⚡ gRPC vs REST — GetPersona

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