Trong bài viết trước, chúng tôi đã giới thiệu về việc mở rộng quy mô (scaling) lớn với MongoDB. Việc scaling thường mang tính phản ứng, dẫn đến các vấn đề như giảm hiệu suất ứng dụng, thậm chí là downtime hoàn toàn. Những vấn đề này cuối cùng dẫn đến trải nghiệm khách hàng tiêu cực, ảnh hưởng đến doanh nghiệp. Vậy làm thế nào để biết đúng lúc scale cơ sở dữ liệu Mongo để không ảnh hưởng đến lợi nhuận?
Tìm ngưỡng phù hợp cho ứng dụng của bạn
Để đảm bảo ứng dụng của bạn vượt qua được bão tăng trưởng sử dụng và các đợt tăng traffic đột ngột, điều bắt buộc là load test hệ thống để xác định ngưỡng mà ứng dụng có thể chịu đựng trước khi áp dụng các thay đổi như scaling vào hệ thống production. Thường thì quy trình này bị bỏ qua và dẫn đến các tình huống "cháy nhà" khi gặp sự cố do tăng traffic.
Con đường đến một bài test tải MongoDB thành công nên bao gồm các cân nhắc sau:
- Metric nào cần theo dõi để tìm bottleneck?
- Ngưỡng nào nên dùng để quyết định khi nào scale?
- Công cụ nào nên dùng để phân tích metric?
- Nên chạy load test ở đâu?
Nên theo dõi metric nào để tìm bottleneck?
Trước tiên, bạn cần xác định tiêu chí để tìm các yếu tố giới hạn cho ứng dụng cụ thể. Mỗi ứng dụng đều khác nhau. Việc nắm rõ các yêu cầu này sẽ giúp bạn xác định metric phù hợp để theo dõi từ phía database.
Dưới đây là một số ví dụ:
- Ứng dụng yêu cầu X insert/giây khi traffic tăng.
- Dữ liệu phải trả về người dùng trong vòng 100ms.
- Có giới hạn số lượng kết nối đồng thời.
- Có giới hạn tài nguyên server, như CPU cao hoặc load average cao.
Khi đã xác định được metric phía ứng dụng, bạn có thể quyết định theo dõi gì ở phía database.
Ví dụ, nếu yêu cầu là số lượng request insert nhất định, hãy tập trung vào write metric như:
- Server I/O
- Database locking
- opcounters về active writes
- Available write tickets (nếu dùng WiredTiger storage engine)
Công cụ phân tích metric
Sau khi xác định metric cần theo dõi, bạn cần thu thập dữ liệu từ database. Dưới đây là các tiện ích có thể dùng:
- mongostat - hiển thị metric realtime về locking, read/write queue.
- db.currentOp() - xác định các operation đang active.
- mongotop - xem top collection hoạt động nhiều nhất.
- Tiện ích server như top, sar, iostat - hiển thị CPU utilization, disk throughput.
Ngoài phân tích realtime, bạn cũng có thể khai thác MongoDB logs để lấy chi tiết hoạt động database và error condition. Mặc định MongoDB log các query chạy quá 100ms - công cụ tốt để xác định query kém hiệu suất.
Xác định nơi chạy load test
Sau khi xác định công cụ thu thập dữ liệu, bạn đã sẵn sàng load test. Lẽ thường cho thấy không bao giờ load test trên production. Đôi khi điều này thành rào cản vì khó spin up môi trường đủ nhanh. Nếu chưa dùng ObjectRocket, bạn có thể spin up MongoDB test cluster rất nhanh.
Cần hỗ trợ?
Việc biết khi nào scale MongoDB có thể phức tạp. Khách hàng ObjectRocket được hưởng hỗ trợ scaling và sharding tốt nhất. DBA của chúng tôi hỗ trợ mọi khía cạnh scaling cluster và luôn miễn phí. Liên hệ ngay hôm nay để bắt đầu.
Bây giờ bạn đã biết khi nào scale MongoDB, bài viết tiếp theo sẽ nói về cách scale các instance MongoDB.