Rails - find_each
Hiện tượng
Alarm cảnh báo về CPU RDS tăng vượt 60%. Response time tăng mạnh.
Flow xử lý
- Check MySQL Performance Insight xem đâu là câu query bị chậm? Đang ở page nào?
- Check Kibana xem số lượng requests vào page đó có nhiều không? Có dấu hiệu bị spam không?
- Check Cloudfront xem page đó có đang được cache không? Nếu có, tại sao nó không hit vào cache mà lại truyền hết qua ALB?
Giải pháp tạm thời
- Detect ra User Agent/ IP ranges mà bọn BOT đang chạy, block nó đi.
- User Agent thì block qua ALB rules.
- IP ranges thì block qua WAF hoặc nginx. IP ranges có thể lấy từ Kibana, filter log request, sau đó download file và lấy log ips.
Giải pháp lâu dài
- Fix performance cho page bị chậm.
- Có thể sử dụng AWS Shield để xử lý