0
0
Lập trình
NM

Giải Pháp Hiệu Quả Đối Phó Với Bottleneck Trong Microservices (Phần 1: Truy Vết và Phòng Ngừa)

Đăng vào 4 ngày trước

• 4 phút đọc

I. Phòng Bệnh Hơn Chữa Bệnh

Để tránh những vấn đề về hiệu suất trong hệ thống microservices, quan trọng là phải chuẩn bị trước thay vì chỉ chờ đợi sự cố xảy ra. Dưới đây là một số biện pháp phòng ngừa hiệu quả:

  • Xây Dựng Hệ Thống Log và Giám Sát: Việc triển khai hệ thống log và giám sát giúp phát hiện sự cố sớm và can thiệp kịp thời trước khi vấn đề trở nên nghiêm trọng. Trong công việc của mình, mình sử dụng các công cụ như Prometheus, Datadog và CloudWatch để theo dõi hiệu suất.
  • Khả Năng Scale Up: Xây dựng hệ thống có khả năng tự động mở rộng dựa trên metrics là chiến lược tối ưu nhằm đối phó với tải tăng đột biến và lưu lượng không ổn định.
  • Phân Phối Tải: Đảm bảo rằng công việc được phân chia đều giữa các service sẽ giúp tránh tình trạng nghẽn cổ chai tại một điểm. Ví dụ, khi sử dụng AWS, mình thường áp dụng các dịch vụ như:
    • API Gateway: Quản lý các yêu cầu HTTP và WebSocket đến các service.
    • Elastic Load Balancing (ELB): Phân phối lưu lượng đến nhiều instance EC2 hoặc container khác nhau.
    • Route 53: Dịch vụ DNS giúp phân phối tải dựa trên các chính sách như trọng số, địa lý, và độ trễ, cho phép định tuyến lưu lượng đến các endpoint khác nhau một cách thông minh.

II. Bắt Bệnh Với Quy Tắc 5 Whys

Khi gặp phải vấn đề về bottleneck, một trong những giải pháp đầu tiên có thể là nâng cấp phần cứng (scale up) hoặc mở rộng hệ thống (scale out). Tuy nhiên, đó chỉ là biện pháp tạm thời. Điều quan trọng là tìm hiểu vấn đề gốc rễ thông qua các bước sau:

  1. Phân Tích Logs và Metrics: Xác định chính xác điểm thắt cổ chai của hệ thống.
  2. Sử Dụng Công Cụ Giám Sát: Sử dụng các công cụ profiling để có cái nhìn rõ hơn về vấn đề.
  3. Phân Tích Qua Phương Pháp 5 Whys: Các bước thực hiện như sau:
    • Xác Định Vấn Đề: Tìm rõ vấn đề cụ thể mà hệ thống đang phải đối mặt.
    • Hỏi 'Tại Sao?': Đặt câu hỏi tại sao vấn đề xảy ra và ghi nhận câu trả lời.
    • Tiếp Tục Hỏi 'Tại Sao?': Nếu câu trả lời chưa làm rõ nguyên nhân, hãy tiếp tục hỏi đến khi xác định được gốc rễ.

Ví Dụ Áp Dụng Phương Pháp 5 Whys Đối Với Database

  1. Tại sao hệ thống bị nghẽn cổ chai ở database?
    • Vì database đang xử lý quá nhiều thao tác đọc và ghi đồng thời, vượt quá khả năng xử lý của nó.
  2. Tại sao phải xử lý quá nhiều thao tác đồng thời?
    • Vì có một sự kiện cập nhật dữ liệu lớn đang diễn ra đồng thời với các yêu cầu thông thường từ phía người dùng.
  3. Tại sao sự kiện cập nhật lớn lại xảy ra vào lúc này?
    • Vì một cronjob được lên lịch chạy trong giờ cao điểm.
  4. Tại sao việc cập nhật hàng loạt lại gây tải lớn?
    • Vì mỗi cập nhật kích hoạt nhiều triggers liên quan, làm tăng đáng kể khối lượng công việc trong database.
  5. Tại sao lại có nhiều triggers như vậy?
    • Vì trong giai đoạn đầu, đội ngũ phát triển chú trọng vào tốc độ ra mắt tính năng mà không xem xét đến hiệu suất dài hạn.

Nguyên Nhân Gốc Rễ: Thiếu quy trình đánh giá hiệu suất và khả năng mở rộng trong giai đoạn phát triển ban đầu.

Giải Pháp Đề Xuất

  • Tối Ưu Hóa Lịch Chạy Cronjob: Đưa ra lịch trình cho cronjob vào thời điểm có ít lưu lượng.
  • Đánh Giá Lại Sử Dụng Triggers: Chuyển một phần logic xử lý từ triggers sang application layer để giảm tải cho database.
  • Cải Thiện Kiến Trúc Hệ Thống: Cân nhắc áp dụng CQRS (Command Query Responsibility Segregation) để tách biệt các thao tác đọc và ghi.

Bằng việc triển khai phương pháp 5 Whys, chúng ta có thể nhắm đến nguyên nhân gốc rễ của vấn đề bottleneck và từ đó đưa ra giải pháp toàn diện, thay vì chỉ khắc phục triệu chứng tạm thời. Ở phần tiếp theo, mình sẽ chia sẻ thêm về cách giải quyết bottleneck ở các service trong hệ thống microservices.

Tham Khảo

Tham gia Group Discord với hơn 2.000 thành viên để cùng thảo luận về lập trình và phát triển dự án cá nhân.
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào