Capstone: hệ thống lớn có mật mã và streaming
Capstone 5: tổng hợp lớn nhất — pipeline streaming mã hóa E2E, cache phân tán, index Bloom, chaos test, báo cáo kiến trúc hệ thống.
Chuyên giaThuật toán ~120 phút
Ôn lại trước khi học
Giới thiệu
Bạn xây pipeline xử lý liên tục có mã hóa. Dữ liệu chạy qua mà không lộ.
Kiến thức cần nhớ
Streaming pipeline
- Streaming xử lý từng mẩu dữ liệu ngay khi tới.
- Ví dụ đời thường: giống băng chuyền sushi ra món nào ăn món đó.
- Khác batch gom đủ mẻ mới xử lý.
- Cần chịu được khi một nút bị hỏng.
Mã hóa E2E
- Mã hóa E2E là chỉ người gửi và nhận đọc được.
- Định nghĩa: máy chủ trung gian chỉ thấy chữ đã mã hóa.
- Ví dụ đời thường: giống thư niêm phong chỉ người nhận mở được.
- Không bao giờ ghi khóa cùng chỗ với dữ liệu.
Bloom filter và chaos test
- Bloom filter kiểm tra nhanh món đồ có thể đã thấy.
- Ví dụ đời thường: giống danh sách đen ghi nháp, có thể nhầm.
- Nó có thể báo nhầm có, không bao giờ báo nhầm không.
- Chaos test là cố tình phá một phần để tập chịu đựng.
# kiểm tra trùng bằng tập đã thấy
da_thay = set() # nơi nhớ món đã qua
def la_trung(mon):
if mon in da_thay: # đã gặp rồi
return True
da_thay.add(mon) # nhớ lại
return False
Ví dụ
- Tin nhắn mã hóa -> máy chủ chỉ thấy ký tự lạ.
- Link độc đã biết -> Bloom chặn trước khi hiển thị.
💻 Bài tập
Ngôn ngữ: Python 3 (hoặc Go). Gom code ngày 30, 105, 106, 142, 143. Nộp vào day-155-capstone/.
Khóa bí mật chỉ nằm trong biến môi trường hoặc file ngoài repo. Kiểm tra bằng
git grep trước khi push.Bài 1: Hệ thống nhận sự kiện có mã hóa
producer (N tiến trình) --TLS--> gateway --> hàng đợi --> consumer --> kho lưu
| Thành phần | Yêu cầu |
|---|---|
| Producer | Mỗi sự kiện {id, ts, payload}. payload mã hóa đầu cuối bằng AES-GCM, khóa chỉ producer và consumer biết |
| Gateway | Nhận qua TLS, kiểm tra chữ ký HMAC, không giải mã payload |
| Khử trùng | Bloom filter theo id ở gateway, trúng Bloom thì kiểm lại trong kho (không bỏ nhầm) |
| Consumer | Giải mã, xử lý cửa sổ 1 phút, ghi kết quả |
| Kho | Khóa mã hóa không lưu cùng chỗ với dữ liệu |
Bài 2: Tải và trùng lặp
- 20 producer, tổng 20.000 sự kiện/giây trong 5 phút. 3% sự kiện gửi trùng.
- In: thông lượng, độ trễ đầu cuối p50/p99, số trùng bị loại, số lần Bloom báo nhầm.
- Kiểm tra: không mất sự kiện nào, không xử lý trùng sự kiện nào (đếm theo
id).
Bài 3: Chaos test (nâng cao)
Viết script gây lỗi và ghi lại hành vi hệ thống:
| Lỗi | Kỳ vọng |
|---|---|
| Giết consumer 30 giây | Hàng đợi tăng, consumer lên lại xử lý hết, không mất |
| Gateway chậm 500 ms | Producer retry có backoff, không bão request |
Sửa 1 byte payload trên đường | Consumer phát hiện sai tag, ghi vào rejected/ |
| Chứng chỉ gateway hết hạn | Producer từ chối kết nối, báo lỗi rõ |
REPORT.md: sơ đồ, bảng số liệu, bảng chaos, 3 điểm yếu còn lại.
✅ Tiêu chí hoàn thành
- Gateway không đọc được
payload(có test). - Không mất, không trùng dưới tải 20.000 sự kiện/giây.
- Bảng chaos 4 kịch bản có kết quả thật.
-
git grepkhông tìm thấy khóa trong repo.
❓ Câu hỏi ôn tập
- Streaming khác batch ở đâu?
- E2E nghĩa là ai đọc được?
- Bloom filter nhầm theo hướng nào?
- Chaos test để làm gì?
🌕 Bạn đã hoàn thành ngày 155. Làm hết bài tập phía trên rồi sang ngày tiếp theo.