0
0
Lập trình
TT

Giải Quyết Các Vấn Đề Hệ Thống Khi Gặp Tình Trạng Quá Tải: Những Điều Cần Biết

Đăng vào 3 tuần trước

• 5 phút đọc

Nguồn: https://www.tuanh.net/blog/devops/the-behavior-of-a-service-under-heavy-load

Một sự tăng đột biến lưu lượng truy cập đột ngột có thể gây ra rất nhiều vấn đề cho dịch vụ, từ suy giảm hiệu suất cho đến tình trạng quá tải hệ thống. Việc hiểu rõ các kịch bản này sẽ giúp bạn chuẩn bị tốt hơn và triển khai giải pháp nhằm duy trì sự ổn định cho dịch vụ. Bài viết này sẽ đi sâu vào các nguyên nhân, hậu quả tiềm ẩn của lưu lượng truy cập tăng, và cung cấp một số gợi ý để xử lý chúng.

1. Câu Chuyện Của Mary

Mary là một nhân viên trẻ, đầy nhiệt huyết và luôn đặt tâm huyết vào công việc. Cô không ngại làm việc từ 8 giờ sáng đến 8 giờ tối, cố gắng hoàn thành nhiệm vụ và vượt qua kỳ vọng của sếp. Tuy nhiên, cô thường cảm thấy mệt mỏi nhưng hình ảnh về một tương lai tươi sáng luôn thúc đẩy Mary tiếp tục. Cô có thể chưa nhận ra rằng việc cân bằng giữa công việc và cuộc sống là vô cùng quan trọng.

Sếp của Mary lại là một người hà khắc, thường xuyên giao thêm dự án cho cô, bất chấp khối lượng công việc đã gấp ba lần so với nhân viên trung bình. Cuối cùng, sau nhiều ngày làm việc không ngừng nghỉ, Mary kiệt sức và bị ốm nặng. Thay vì được hỗ trợ, công ty lại quyết định chấm dứt hợp đồng, khiến Mary không chỉ kiệt quệ về thể chất mà còn vô cùng thất vọng và tổn thương.

2. Tại Sao Câu Chuyện Này Quan Trọng Đối Với Chủ Đề Hôm Nay?

Câu chuyện của Mary tương đồng với những thách thức mà một dịch vụ phải đối mặt khi bị quá tải. Giống như Mary phải đối mặt với khối lượng công việc ngày càng tăng, dịch vụ cũng gặp phải áp lực từ lưu lượng truy cập quá mức. Cả Mary và dịch vụ đều phải hoạt động vượt quá giới hạn thiết kế của mình.

Sếp của Mary, luôn giao thêm việc, giống như một vòi nước không ngừng chảy. Dịch vụ không thể đáp ứng nhu cầu tăng lên, và cũng giống như Mary, càng nhiều nhiệm vụ được giao, cô càng bị quá tải và hiệu suất công việc bắt đầu giảm.

Khi Mary phải đối mặt với khối lượng công việc quá tải, cô quyết định đa nhiệm để đáp ứng các deadline. Điều này đòi hỏi cô phải tập trung cao độ. Nếu chỉ làm một dự án, cô có thể hoàn thành trong 4 giờ. Tuy nhiên, khi phải nghiên cứu 2 dự án cùng lúc, thời gian hoàn thành kéo dài từ 6 đến 7 giờ. Tình huống này tương tự với một dịch vụ phải xử lý quá nhiều yêu cầu đồng thời. Khi có quá nhiều yêu cầu, tài nguyên hệ thống như CPU và bộ nhớ phải chia sẻ, dẫn đến thời gian xử lý tăng lên, và hậu quả là các yêu cầu mới có thể không nhận đủ tài nguyên và cần phải chờ đợi lâu hơn.

Sự phân bổ tài nguyên không hợp lý này dẫn đến một chu trình luẩn quẩn: các yêu cầu càng khó đáp ứng, hệ thống trở nên kém hiệu quả và hiệu suất ngày càng giảm. Càng nhiều dự án Mary phải đảm nhận, cô càng dễ lâm vào tình trạng không thể hoàn thành tất cả công việc đúng hạn, tương tự như các yêu cầu bị timeout.

3. Giải Thích Tình Huống Quá Tải

Giả sử bạn có một máy ảo mô phỏng khả năng của Mary với 1 CPU (điện toán 2 luồng ảo) và 8 GB RAM. Dưới đây là cách CPU và các worker-thread hoạt động khi Mary phải xử lý nhiều tác vụ:

  • Trường hợp 1: Khi có 2 tác vụ, Mary có thể xử lý đồng thời mà không gặp vấn đề.
  • Trường hợp 2: Khi có 4 tác vụ, các tác vụ sẽ phải xử lý tuần tự, dẫn đến thời gian hoàn thành tăng lên.
  • Trường hợp 3: Khi có 6 tác vụ, tình trạng lại tiếp tục xảy ra, khiến hệ thống giảm hiệu suất và quá tải xử lý.

Trong mỗi trường hợp, sự chia sẻ tài nguyên giữa các tác vụ càng nhiều, thời gian xử lý càng kéo dài. Điều này phản ánh tình trạng quá tải mà hệ thống có thể gặp phải khi phải xử lý nhiều yêu cầu đồng thời.

4. Thí Nghiệm Với Tải Trọng

Tôi đã thử nghiệm tải trọng trên GCS (Google Cloud Storage). Tôi đã tạo một module để gọi yêu cầu tải lên tệp. Dưới đây là cách tôi cấu hình dịch vụ vào thời điểm đó:

Copy
Pod:
    Request:
        Memory: 10G
        CPU: 100m
    Limit:
        Memory: 10G
        CPU: 15

Tổng cộng có 10 pod và kích thước tệp là 3KB. Qua ba lần thử nghiệm khác nhau, cho thấy rằng số lượng worker-thread không phải lúc nào cũng tỷ lệ thuận với hiệu suất.

5. Giải Pháp Đối Phó Với Tình Trạng Quá Tải

Để giải quyết vấn đề quá tải, tôi đề xuất các giải pháp sau:

  1. Áp dụng fault tolerance để xử lý tắc nghẽn.
  2. Đưa ra các kỹ thuật tự động mở rộng thông minh dựa trên Chỉ số Tùy chỉnh (Custom Metrics).
  3. Tối ưu hóa mã nguồn để giảm thời gian thực hiện.

6. Kết Luận

Việc tối ưu hóa hiệu suất hệ thống yêu cầu một quá trình đồng bộ và toàn diện, từ chỉnh sửa worker-thread đến quản lý tài nguyên CPU và bộ nhớ. Bằng cách triển khai các giải pháp cụ thể, bạn có thể nâng cao khả năng xử lý và giảm thiểu lỗi. Cảm ơn bạn đã đọc bài viết này. Hy vọng sẽ gặp lại bạn trong các bài viết tiếp theo!
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