Nhóm ứng dụng phải hiểu trải nghiệm khách hàng của họ như thế nào. Điều này đúng không chỉ từ góc độ chung (về khả năng sử dụng và khả năng phản hồi) mà còn đúng trên cơ sở hàng ngày, từng phút.
Đặc biệt, khi bạn làm việc với hệ thống phân tán, sai sót là điều không thể tránh khỏi. Lưu lượng truy cập trang web biến động suốt cả ngày và bất kỳ phần phụ thuộc nào của hệ thống cũng có thể gặp sự cố bất kỳ lúc nào.
Trong bài viết này, chúng tôi sẽ sử dụng bảng điều khiển ma thuật để giúp theo dõi và giải quyết các vấn đề về hiệu suất trong ứng dụng Ruby on Rails.
Nhưng trước khi đi sâu vào bảng điều khiển ma thuật, hãy xem những gì chúng ta nên chú ý khi thiết kế ứng dụng của mình.
Những điều cần cân nhắc khi xây dựng ứng dụng Ruby
Với tư cách là chủ sở hữu ứng dụng hoặc thành viên nhóm, bạn sẽ muốn biết liệu có bất kỳ vấn đề nào với ứng dụng của mình trước khi khách hàng biết hay không. Điều này cho phép bạn thực hiện hành động khắc phục ngay lập tức và hy vọng tránh được mọi gián đoạn đối với người dùng của bạn.
Có một số câu hỏi quan trọng trong đơn đăng ký mà bạn cần có khả năng trả lời bất kỳ lúc nào:
- Thời gian phản hồi của trang có được chấp nhận không? Theo Google, ngày nay bất cứ điều gì chậm hơn hai giây sẽ khiến khách hàng rời khỏi trang web của bạn và đi nơi khác.
- Người dùng của bạn có gặp phải bất kỳ lỗi nào không? Nếu vậy, những loại lỗi? Tỷ lệ lỗi là bao nhiêu?
- Có bất kỳ vấn đề vận hành nào đang diễn ra ảnh hưởng đến ứng dụng của bạn không? Điều này có thể xảy ra với các dịch vụ mạng, lưu trữ hoặc bảo mật. Như chúng ta đều biết, các nhà cung cấp đám mây cũng gặp phải tình trạng ngừng hoạt động và ảnh hưởng đến tình trạng hoạt động của ứng dụng.
Khả năng quan sát là yếu tố then chốt nhưng thường là điều cuối cùng mà các kỹ sư nghĩ tới. Ngoài ra, đã có sẵn thời gian trong lịch trình để sẵn sàng hoạt động. Gọi là cuối tuần trước ngày ra mắt sản phẩm!
Nói đùa sang một bên, bạn phải xây dựng ứng dụng của mình trước khi có thứ gì đó tồn tại để được quan sát. Điều này dẫn đến việc trì hoãn việc kiểm tra hiệu suất cho đến gần cuối vòng đời phát triển. Bạn không muốn mất quá nhiều thời gian để kiểm tra hiệu suất khi sản phẩm chưa hoàn thiện về mã, vì sau đó bạn sẽ phải làm lại tất cả.
Điều này cũng đúng đối với việc kiểm tra bảo mật. Nếu bạn tiến hành quá sớm, lỗ hổng vẫn có thể xuất hiện sau khi thử nghiệm nhưng trước khi sản phẩm được đưa vào sản xuất.
Vì vậy, chúng tôi biết việc giám sát là rất quan trọng, nhưng tất cả những lo ngại này đều có lý. Việc giám sát không nhận được sự quan tâm xứng đáng cho đến giai đoạn cuối của quá trình. Đó là lý do tại sao AppSignal tạo ra các trang tổng quan kỳ diệu.
Bảng điều khiển ma thuật trong AppSignal
AppSignal hiểu tầm quan trọng của các chỉ số, trang tổng quan và hiệu suất ứng dụng của bạn — nhưng đồng thời, các kỹ sư cũng có rất ít thời gian để làm việc trên những vấn đề này trước khi ra mắt.
Trang tổng quan ma thuật của chúng tôi được gọi là "ma thuật" vì bộ sưu tập số liệu và trang tổng quan liên quan được tạo tự động cho bạn, chỉ khi bạn kết nối ứng dụng của mình và các thành phần tích hợp.
Magic Dashboard:Một ví dụ về ứng dụng Ruby on Rails
Hãy tìm hiểu cách chúng ta có thể theo dõi và giải quyết các vấn đề về hiệu suất trong ứng dụng Ruby on Rails bằng cách sử dụng bảng điều khiển ma thuật.
Ứng dụng của chúng tôi sử dụng mô hình học máy (ML) đơn giản để dự đoán giá tiền điện tử. Công việc không đồng bộ cập nhật mô hình hàng ngày với dữ liệu giá mới nhất và cải thiện độ chính xác theo thời gian. Ứng dụng Rails này có cả trang web và API REST, như minh họa trong sơ đồ kiến trúc bên dưới.

Sau khi chúng tôi triển khai ứng dụng Rails, bảng điều khiển ma thuật sẽ tự động được tạo cho máy chủ web Rails Puma và các công việc không đồng bộ của Sidekiq. Các tích hợp được hỗ trợ khác cho bảng điều khiển ma thuật bao gồm MongoDB và máy ảo Erlang.
Bạn có thể sử dụng bảng điều khiển ma thuật Puma để đánh giá hiệu suất dựa trên các luồng, dung lượng nhóm và nhân viên puma. Bảng điều khiển ma thuật Sidekiq giám sát độ dài hàng đợi, độ trễ hàng đợi, thời lượng công việc, trạng thái công việc và mức sử dụng bộ nhớ.
Bảng điều khiển ma thuật được phát hiện và tạo dựa trên việc sử dụng các số liệu dựa trên sự kiện, chẳng hạn như lần chạy công việc Sidekiq cũng như các cuộc thăm dò chi tiết. Tính năng thăm dò chi tiết cho phép bạn đăng ký khối hoặc lớp Ruby để gửi số liệu tùy chỉnh tới AppSignal. Trang tổng quan Magic cung cấp khả năng tích hợp ngay lập tức cho các thành phần được hỗ trợ nhưng bạn có thể tận dụng cơ chế này để gửi số liệu tùy chỉnh của mình tới AppSignal.
Một ví dụ về thăm dò chi tiết tùy chỉnh
Tích hợp Sidekiq đã được tích hợp sẵn, nhưng hãy tưởng tượng bạn muốn giám sát cơ chế công việc nền độc quyền. Bạn có thể sử dụng ví dụ lớp sau. Lớp thăm dò nhận được kết nối, sau đó được sử dụng trong mỗi cuộc gọi để nhận số liệu mong muốn.
Cuộc gọi đến Appsignal::Minutely.probes.register có hai tham số — tên cho thăm dò và cách triển khai nó, có thể là lambda hoặc lớp triển khai phương thức gọi.
Yêu cầu về cấu hình và hệ thống cho AppSignal
Chỉ cần sử dụng AppSignal với ứng dụng Rails của bạn để có được bảng điều khiển kỳ diệu. Nếu bạn chưa cài đặt AppSignal, hãy đưa đá quý appssignal vào Gemfile của bạn và chạy cài đặt gói.
Sau đó chạy appsignal install lệnh để cấu hình môi trường của bạn. Cấu hình này có thể được lưu trữ trong tệp cấu hình hoặc biến môi trường và kết nối ứng dụng của bạn với tài khoản AppSignal và trang tổng quan.
Sau khi cài đặt và chạy máy chủ của mình, bạn sẽ thấy một vài email tương tự như sau.

Yêu cầu hệ thống cho ví dụ này là:
- AppSignal gem 2.9.0 trở lên, bao gồm hỗ trợ cho việc thăm dò chi tiết.
- Tích hợp Puma - yêu cầu phiên bản 3.11.4 trở lên.
- Tích hợp Sidekiq - yêu cầu Redis gem 3.3.5 trở lên. Đối với sự tích hợp này, nên sử dụng đá quý AppSignal 2.9.5 trở lên.
Kiểm tra hiệu suất API dự đoán giá của chúng tôi
Ứng dụng ví dụ trên sử dụng mạng thần kinh đơn giản được triển khai bằng đá quý Ruby FANN để dự đoán giá Bitcoin của ngày hôm sau. Phần trăm thay đổi giá trong 10 ngày qua được sử dụng làm đầu vào cho mô hình.
API REST không lấy bất kỳ tham số nào vì hiện tại nó chỉ dự đoán giá cho ngày mai. Đầu ra là một tài liệu JSON đơn giản, như hiển thị bên dưới.
Công việc Sidekiq lấy giá thị trường vào đầu mỗi ngày và cập nhật mô hình ML. Công việc này được lên lịch chạy 5 phút một lần, giúp công việc có thể nhanh chóng xử lý mọi sự cố ngừng hoạt động hoặc lỗi.
Bạn có thể tìm thấy tất cả mã từ bài viết này trên GitHub. Xin lưu ý rằng không có nội dung nào trong bài viết này hoặc phần mềm cấu thành lời khuyên đầu tư. Hãy tham khảo ý kiến của cố vấn tài chính trước khi đưa ra bất kỳ quyết định đầu tư nào liên quan đến tiền điện tử.
Chúng tôi sẽ sử dụng JMeter để mô phỏng tải trên API REST nhằm kiểm tra hiệu suất. Điều này cho phép chúng tôi tạo lưu lượng truy cập và đánh giá hiệu suất bằng bảng điều khiển kỳ diệu của mình. Thử nghiệm đầu tiên của chúng tôi sử dụng 5 máy khách đồng thời, mỗi máy thực hiện 100 yêu cầu.
Số liệu thống kê cho thấy phạm vi thời gian phản hồi khá cao, trung bình là 342ms nhưng P99 là 852ms. Có vẻ như chúng ta có thể làm tốt hơn.

Cải thiện hiệu suất ứng dụng Rails bằng Bảng điều khiển Puma Magic
Bảng điều khiển ma thuật Puma của chúng tôi bao gồm một biểu đồ về dung lượng nhóm luồng và chúng tôi có thể thấy rằng nó chạm đến 0 trong quá trình chạy thử nghiệm của chúng tôi. Điều này giải thích tại sao một số yêu cầu mất nhiều thời gian hơn những yêu cầu khác, vì vậy chúng tôi sẽ tăng số lượng chủ đề puma lên 10.
Hãy nhớ rằng chúng tôi không làm gì để tạo trang tổng quan hoặc biểu đồ này. AppSignal đã tự động tạo điều này cho chúng tôi.

Sau khi chạy thử nghiệm với số lượng luồng puma tăng lên, thời gian phản hồi ổn định hơn nhiều và trang tổng quan xác nhận rằng dung lượng nhóm vẫn ở mức chấp nhận được.

Bây giờ là lúc để quay số lên. Số lượng máy khách đồng thời của JMeter được tăng lên 50, với thời gian tăng tốc là 5 giây. Thử nghiệm này cho thấy thời gian phản hồi kém và một số lỗi API. Bảng điều khiển ma thuật của Puma một lần nữa hiển thị các chuỗi puma có sẵn đạt đến mức 0.
Nhìn vào mã API, chúng tôi thấy rằng mô hình đang được tải từ cơ sở dữ liệu mỗi lần. Điều này không hiệu quả lắm, vì vậy chúng tôi thay đổi công việc Sidekiq để không chỉ lấy giá hàng ngày mới mà còn chạy mô hình ML và lưu dự đoán vào cơ sở dữ liệu.
Chúng tôi triển khai thay đổi này.
Hiệu suất API tốt hơn với Magic Dashboard của Sidekiq
Bây giờ hãy kiểm tra bảng điều khiển ma thuật Sidekiq của chúng tôi. Thật không may, có một lỗi trong mã, nhưng ít nhất chúng ta có thể xác định và sửa nó nhanh chóng.

Với Sidekiq PriceUpdateJob hiện đang hoạt động, API được sửa đổi để chỉ cần truy xuất giá dự đoán từ cơ sở dữ liệu. Điều này cải thiện hiệu suất API nhưng chúng tôi vẫn thấy một số lỗi API và thời gian phản hồi lâu.
Quay lại Bảng điều khiển Puma Magic
Nhìn lướt qua bảng điều khiển nổi bật là chúng tôi chưa định cấu hình Puma để sử dụng thêm nhân viên. Một nhân viên Puma là một quy trình cấp hệ điều hành có thể chạy một số luồng. Tổng số luồng được tính bằng số lượng công nhân nhân với số luồng tối đa. Đầu tiên, chúng tôi sử dụng 2 công nhân, nhưng các luồng có sẵn vẫn chưa hết. Vì vậy chúng ta sẽ tăng số lượng lên 4 công nhân.

Hiệu suất API của chúng tôi hiện rất tốt. Thời gian phản hồi trung bình là 419 mili giây và không có lỗi API.

Bảng điều khiển ma thuật xác nhận rằng vẫn còn dung lượng luồng.

Bảng điều khiển kỳ diệu của AppSignal cung cấp cho chúng tôi thông tin chi tiết tức thì về năng lực của máy chủ web Puma. Trang tổng quan Sidekiq và Active Worker cung cấp thông tin chi tiết tương tự về các công việc không đồng bộ trong ứng dụng của chúng tôi.
Những điều chúng tôi đã học được từ Magic Dashboards
Trong quá trình kiểm tra hiệu suất ứng dụng Rails của chúng tôi, bảng điều khiển ma thuật Puma đã giúp chúng tôi dễ dàng xác định rằng số lượng luồng không đủ cho mức thông lượng mong muốn của chúng tôi. Nó hiển thị dung lượng nhóm luồng, số lượng công nhân theo thời gian và tổng số luồng.
Mặc dù công việc Sidekiq không có bất kỳ vấn đề nào về hiệu suất nhưng bảng điều khiển kỳ diệu đã giúp chúng tôi nhanh chóng xác định rằng có lỗi sau khi triển khai, từ đó chúng tôi có thể khắc phục và triển khai lại nhanh chóng. Tất cả các khả năng giám sát này đều được AppSignal thiết lập tự động cho chúng tôi.
Tính năng bảng điều khiển của AppSignal dành cho ứng dụng Ruby và Rails
Bảng thông tin trong AppSignal có các không gian tên, chẳng hạn như ứng dụng "web" hoặc công việc "nền", do đó bạn có thể tạo nhiều chế độ xem giám sát cho ứng dụng của mình. Trang tổng quan tóm tắt tích hợp hiển thị thông tin tổng quan về tình trạng ứng dụng của bạn, bao gồm thông lượng, thời gian phản hồi và các lỗi mới nhất.
Xin lưu ý rằng, giống như bất kỳ trang tổng quan nào, bạn có thể chỉnh sửa biểu đồ và chỉ số nào được hiển thị cũng như thay đổi bố cục và cấu hình của các biểu đồ đã chọn.
Phát hiện bất thường là một tính năng mạnh mẽ. Nó cho phép bạn xác định ngưỡng gửi thông báo khi giá trị số liệu vượt quá hoặc thấp hơn một giá trị nhất định, chẳng hạn như bộ nhớ trống hoặc tỷ lệ lỗi.
Kết thúc:Giám sát ứng dụng Ruby của bạn ngay hôm nay bằng AppSignal
Khả năng quan sát và hiệu suất rất quan trọng đối với sự thành công của các ứng dụng của chúng tôi. Tuy nhiên, chúng ta thường đợi đến phút cuối mới giải quyết những chủ đề này.
Bảng thông tin ma thuật của AppSignal cung cấp các số liệu, bảng chỉ số và thông tin chuyên sâu có sẵn được thiết lập tự động. Điều này cho phép bạn nhanh chóng điều chỉnh hiệu suất của ứng dụng và đạt đến trạng thái sẵn sàng hoạt động.
Đọc thêm về AppSignal dành cho Ruby.
Cho đến lần sau, chúc bạn viết mã vui vẻ!