Xây dựng chuỗi Lazy Generator Pipeline xử lý Server Log
Hệ thống AI Serving tại AI Empire Academy ghi nhận hàng triệu dòng log truy cập mỗi giờ. Để phân tích các lỗi và phát hiện các IP gây nghẽn hệ thống mà không làm cạn kiệt RAM của m…
Tiến độ của tôi ở bài này
Điểm được lưu vào tài khoản sau khi chấm bài.
Đang tải điểm của bạn…
Kiến thức và chủ đề
Kiến thức tiên quyết: generator functions, yield keyword, string parsing.
Nội dung đề bài
Mục tiêu kiến thức
- Hiểu và ứng dụng hàm Generator (
yield) để xử lý luồng dữ liệu lớn với bộ nhớ O(1). - Xây dựng kiến trúc đường ống xử lý lười (Lazy Evaluation Data Pipeline) theo phong cách Pythonic.
- Tránh cạm bẫy chuyển đổi toàn bộ luồng thành danh sách (List Materialization) gây tràn RAM.
Mô tả bài toán
Hệ thống AI Serving tại AI Empire Academy ghi nhận hàng triệu dòng log truy cập mỗi giờ. Để phân tích các lỗi và phát hiện các IP gây nghẽn hệ thống mà không làm cạn kiệt RAM của máy chủ, ta cần xây dựng một chuỗi xử lý generator gồm 3 hàm độc lập:
parse_log_stream(lines: Iterable[str]) -> Generator[dict, None, None]- Nhận một iterable chứa các chuỗi log dạng raw.
- Mỗi dòng log có định dạng chuẩn:
"<ip> [<timestamp>] "<method> <path>" <status_code> <latency_ms>" - Ví dụ:
"192.168.1.1 [2026-09-07T10:00:00] "GET /api/v1/predict" 200 45" - Tách và yield ra từng dictionary:
{"ip": str, "timestamp": str, "method": str, "path": str, "status": int, "latency": int}
- Bỏ qua các dòng rỗng hoặc không đúng định dạng (không ném ngoại lệ làm gián đoạn luồng).
filter_errors(records: Iterable[dict], min_status: int = 400) -> Generator[dict, None, None]- Nhận iterable các dictionary log.
- Chỉ yield ra các bản ghi có
status >= min_status.
extract_slow_ips(records: Iterable[dict], min_latency: int = 100) -> Generator[str, None, None]- Nhận iterable các dictionary log.
- Chỉ yield ra chuỗi
ipcủa các bản ghi cólatency >= min_latency.
Toàn bộ các hàm trên phải là Generator, tuyệt đối không được nạp toàn bộ dữ liệu vào list hay cấu trúc nạp sẵn.
Input
lines: Iterable các dòng log text.min_status: Số nguyên ngưỡng HTTP status (mặc định 400).min_latency: Số nguyên ngưỡng thời gian phản hồi theo ms (mặc định 100).
Output
Từng phần tử được yield ra qua từng tầng generator theo mô tả trên.
Ràng buộc
- Bộ nhớ phụ trợ: O(1) cho mỗi bước pipeline.
- Dòng hợp lệ luôn có
statusvàlatencylà số nguyên không âm. - Thời gian chạy tối đa: 1000ms.
- Giới hạn bộ nhớ: 256MB.
Ví dụ 1
Input
lines = [
'10.0.0.1 [2026-09-07T10:00:01] "POST /api/v1/infer" 200 120',
'10.0.0.2 [2026-09-07T10:00:02] "GET /health" 500 15',
'10.0.0.3 [2026-09-07T10:00:03] "POST /api/v1/infer" 404 250',
'invalid line without quotes',
'10.0.0.4 [2026-09-07T10:00:04] "POST /api/v1/train" 503 310'
]Output
`['10.0.0.3', '10.0.0.4']`Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
