Hiệu năng và thiết bị
P95
viết đầy đủ là 95th percentile
Giá trị mà 95% lần đo nằm dưới nó — cách nhìn trải nghiệm của nhóm chậm nhất thay vì nhóm trung bình.
Trung bình che mất đúng nhóm đang khổ. Một nghìn người mở app trong 1 giây và năm mươi người mở trong 8 giây vẫn cho trung bình rất đẹp — trong khi năm mươi người kia là những người sắp gỡ app.
P95 không phải công thức thống kê cần giải thích. Nó chỉ là một vị trí trong danh sách đã sắp xếp:
Gom đủ số lần đo
mỗi lần mở app, mỗi lần gọi API là một mẫu
Sắp xếp tăng dần
từ nhanh nhất tới chậm nhất
Đếm tới vị trí 95%
1.000 mẫu thì lấy mẫu thứ 950
Đọc giá trị tại đó
95% lần đo nhanh hơn nó, 5% chậm hơn
Ba mốc thường đi cùng nhau, mỗi mốc trả lời một câu hỏi khác:
P50
một nửa số lần đo nhanh hơn mức này — "bình thường thì bao lâu"
P95
mốc đặt ngân sách hiệu năng — "lúc tệ thì tệ tới đâu"
P99
vùng cực đoan — máy yếu nhất, mạng tệ nhất, cache lạnh nhất
Ví dụ: cùng một tập dữ liệu, ba kết luận ngược nhau
Hai bản release, mỗi bản đo 100 lần cold start. Bản A: 95 lần mất 1,0s, 5 lần mất 5,0s. Bản B: 60 lần mất 0,5s, 35 lần mất 1,5s, 5 lần mất 3,0s.
Trung bình nói bản B nhanh hơn. P95 nói bản A nhanh hơn. P99 lại quay về nói bản B nhanh hơn. Không con số nào sai — chúng trả lời ba câu hỏi khác nhau về cùng một phân phối. Vì vậy ngưỡng trong tài liệu dự án luôn phải ghi rõ đo ở percentile nào: viết "cold start 2 giây" mà không nói percentile là một ngưỡng không kiểm được.
5% là bao nhiêu người
Ở quy mô dự án đang nhắm tới, phần trăm nghe thì nhỏ nhưng số người thì không:
500.000
người dùng ở quy mô mục tiêu
25.000
lần mở app mỗi ngày rơi ngoài mốc P95, nếu mỗi người mở một lần
5.000
phần ngoài P99 — đủ để kênh hỗ trợ nóng lên trong một buổi
Nhóm 5% đó không phân bố ngẫu nhiên. Nó dồn vào máy cấu hình thấp, mạng yếu, lần mở đầu tiên sau khi cài, và cold start sau khi hệ điều hành thu hồi bộ nhớ. Nghĩa là cùng một nhóm người chịu mức P95 ngày này qua ngày khác, chứ không phải mỗi ngày rơi vào một người khác.
Ba chỗ hay làm sai
Quá ít mẫu. P95 của 20 lần đo chính là mẫu thứ 19 — một lần đo xui đủ để lật kết luận. Vài trăm mẫu trở lên mới đáng đọc; dưới mức đó thì ghi kèm số mẫu để người đọc tự trừ hao.
Thiếu điều kiện đo. Một con số P95 phải đi kèm: device tier nào, mạng nào, build release hay debug, phiên bản nào. Hai P95 đo khác điều kiện thì không so với nhau được, dù cả hai đều đúng.
Nhầm mẫu số. P95 tính trên lần đo chứ không phải trên người. Một người dùng máy yếu mở app mười lần một ngày sẽ đóng góp mười mẫu chậm. Muốn trả lời "bao nhiêu người bị ảnh hưởng" thì phải đếm theo người, không đọc thẳng từ percentile.
Vì sao tail càng quan trọng khi hệ thống càng lớn
Một màn hình hiếm khi gọi đúng một API. Khi màn hình chờ nhiều lời gọi và chỉ cần một lời gọi chậm là cả màn hình chậm, xác suất cộng dồn rất nhanh: mỗi lời gọi chỉ 1% khả năng rơi vào vùng chậm, nhưng một màn hình cần 100 lời gọi thì chỉ còn 37% khả năng nhanh trọn vẹn — 63% số lần mở dính ít nhất một lời gọi chậm. Đây là kết quả trong The Tail at Scale (Dean & Barroso, 2013), và là lý do P99 phía backend không phải thứ xa xỉ để dành cho sau này.

