Giám sát hiệu suất là một phần quan trọng để chạy một ứng dụng thành công. Một trong những cách cơ bản nhất để biết hiệu suất của something là đo lường thời lượng mỗi lần nó xảy ra và chắt lọc số liệu thống kê từ đó.
Nghiêm túc
Giá trị trung bình hoặc trung bình của một tập hợp các giá trị là một khởi đầu tốt để xem một thứ nào đó hoạt động tốt hay xấu như thế nào. Nó được tính bằng cách tính tổng tất cả các giá trị đang được xem xét rồi chia cho số lần xuất hiện.
Trong Ruby, đây là cách tính thời gian phản hồi trung bình:
Lưu ý :Trong ví dụ, để có kết quả chính xác hơn khi chia, chúng tôi chuyển tổng giá trị thời lượng thành Float. Nếu không, Ruby sẽ làm tròn xuống Số nguyên gần nhất, trả về 4 thay vào đó.
Một thống kê hữu ích khác là số trung vị. Mặc dù nghe có vẻ giống nhau nhưng có sự khác biệt giữa giá trị trung bình và trung vị của một tập hợp các giá trị.
Trung vị là giá trị ngăn cách nửa trên của tập hợp với nửa dưới của tập hợp.
Đối với tập dữ liệu có số lượng giá trị lẻ, bạn sẽ có được số trung vị bằng cách sắp xếp các giá trị trước tiên, sau đó chọn số ở giữa. Đối với tập hợp có số giá trị chẵn, sau khi sắp xếp chúng, số trung vị sẽ là trung bình cộng của hai số ở giữa.
Thống kê này là một cách hay để xem liệu có sự sai lệch lớn về dữ liệu hay một cái đuôi dài hay không.
Giá trị trung bình của các khoảng thời gian trên sẽ là 335.83 vì ngoại lệ duy nhất là 2000ms. Trung vị chỉ là 3.5 , cho biết có sự sai lệch.
Bằng cách tính toán cả giá trị trung bình và trung vị của một tập dữ liệu, bạn có thể biết liệu có bất kỳ giá trị ngoại lệ lớn hay phần đuôi dài nào hay không.
Vấn đề về ý nghĩa
Mặc dù giá trị trung bình và trung vị là những chỉ số tốt về hiệu suất nhưng chúng không nói lên toàn bộ câu chuyện. Nếu bạn yêu cầu một trang web mười lần thì giá trị trung bình có thể rất thấp nhưng một hoặc nhiều yêu cầu vẫn có thể mất một thời gian rất dài để hoàn thành.
Hình ảnh bên dưới hiển thị phần trăm thứ 99 (xanh dương) và 90 (xanh lục) cũng như giá trị trung bình (đỏ) cho một hành động nhất định trong AppSignal. Bạn có thể thấy rằng số 99 và 90 khá xa so với giá trị trung bình và có một số điểm tăng đột biến. Điều này có nghĩa là mặc dù khách hàng bình thường của bạn có trải nghiệm tốt nhưng thỉnh thoảng vẫn có một người dùng phải chờ gần gấp đôi thời gian để trang hiển thị. Lý tưởng nhất là bạn muốn có được tất cả các giá trị này càng gần nhau càng tốt, tạo ra trải nghiệm nhất quán hơn cho tất cả người dùng của bạn.

Ví dụ:với khoảng thời gian sau được đặt trong đó 10 khách hàng yêu cầu một trang có thời lượng từ 100 mili giây đến 1 giây.
Điều này sẽ dẫn đến giá trị trung bình chỉ là 190ms trong khi một người dùng có trải nghiệm rất tệ về thời gian phản hồi 1 giây. Khi chỉ theo dõi giá trị trung bình, bạn sẽ dễ dàng nghĩ rằng trang web của mình có hiệu suất tuyệt vời, trong khi trên thực tế, đôi khi người dùng lại có trải nghiệm tồi tệ.
Ví dụ trên chỉ dành cho 10 yêu cầu, nhưng hãy tưởng tượng nếu bạn có một nghìn yêu cầu mỗi ngày, điều đó có nghĩa là 100 người dùng trong số đó đã có trải nghiệm tồi tệ.
Phần trăm
Để đưa ra ý tưởng tốt hơn về việc phân phối các giá trị, chúng tôi sử dụng phần trăm. Phần trăm tương tự như số trung vị - một số biểu thị một điểm trong tập dữ liệu trong đó một nửa tập hợp nằm dưới số và một nửa trong số đó ở trên. Phân vị tương tự nhau ở chỗ phân vị thứ 20 có nghĩa là 20% số trong tập dữ liệu nằm dưới con số đó.
Cho tập hợp (đã sắp xếp) sau:
Nếu muốn biết phân vị thứ 20, chúng ta có thể tính nó theo cách sau:Có 10 giá trị trong tập hợp. Giá trị mong muốn ở vị trí 1 (20.0 / 100 * 10 - 1 ) vì mảng của chúng tôi bắt đầu từ số 0. Vì mảng này chứa số lượng mục chẵn nên chúng ta phải tính giá trị trung bình giữa chỉ mục (2 ) và chỉ mục + 1 (3 ). Điều này sẽ dẫn đến giá trị 150 cho phân vị thứ 20.
Việc triển khai Ruby rất đơn giản sẽ trông như thế này:
percentile này chức năng trông rất giống với median của chúng tôi tính toán và trên thực tế, median giống với 50th phần trăm.
AppSignal sử dụng số liệu thống kê ở trên để tạo số liệu hiệu suất cho Ứng dụng của bạn. Chúng tôi không chỉ dựa vào giá trị trung bình/trung bình mà còn tính toán phân vị thứ 90 và 95 để hiển thị các giá trị ngoại lệ giúp hiểu rõ hơn về việc phân phối yêu cầu của bạn. Tìm hiểu thêm trên trang tham quan buổi biểu diễn của chúng tôi.
Những điều kỳ lạ
Do cách tính phần trăm và giá trị trung bình, đôi khi có thể có phần trăm thứ 90 giảm xuống dưới giá trị trung bình, chẳng hạn như dựa trên tập dữ liệu sau:
Điều này sẽ cho chúng ta một mean của 182.73 , và phân vị thứ 90 chỉ là 1 .
Nếu hệ thống thu thập số liệu của bạn chỉ hiển thị phân vị thứ 90 và giá trị trung bình thì bạn vẫn có thể suy ra rằng có một ngoại lệ rất lớn ở đâu đó trong tập dữ liệu của bạn nếu phân vị thứ 90 giảm xuống dưới mức trung bình.
👋 Nếu bạn thích bài viết này, chúng tôi còn viết nhiều hơn nữa về hiệu suất của Ruby (on Rails), hãy xem danh sách kiểm tra giám sát hiệu suất Ruby của chúng tôi.
Bạn gần như đã hoàn thành 100% bài đăng này
Bây giờ chỉ vậy thôi! Trong một bài đăng khác, chúng ta sẽ nói về cách chúng ta lưu trữ và tính toán phần trăm một cách hiệu quả cho tất cả các yêu cầu của khách hàng bằng cách sử dụng Quantiles. Nếu bạn có bất kỳ câu hỏi hoặc nhận xét nào về số liệu thống kê và APM, theo dõi lỗi hoặc giám sát hiệu suất, hãy liên hệ với chúng tôi trên Twitter @AppSignal hoặc qua email.
Robert Beekman
Với tư cách là người đồng sáng lập, Robert đã viết ra cam kết đầu tiên của chúng tôi. Anh ấy cũng là hình mẫu hỗ trợ của chúng tôi và biết tất cả về những chi tiết nhỏ trong mã. Du lịch và chụp ảnh (cùng lúc).
Tất cả bài viết của Robert Beekman