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

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ầnYêu cầu
ProducerMỗ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
GatewayNhận qua TLS, kiểm tra chữ ký HMAC, không giải mã payload
Khử trùngBloom filter theo id ở gateway, trúng Bloom thì kiểm lại trong kho (không bỏ nhầm)
ConsumerGiải mã, xử lý cửa sổ 1 phút, ghi kết quả
KhoKhó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

  1. 20 producer, tổng 20.000 sự kiện/giây trong 5 phút. 3% sự kiện gửi trùng.
  2. 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.
  3. 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ỗiKỳ vọng
Giết consumer 30 giâyHàng đợi tăng, consumer lên lại xử lý hết, không mất
Gateway chậm 500 msProducer retry có backoff, không bão request
Sửa 1 byte payload trên đườngConsumer phát hiện sai tag, ghi vào rejected/
Chứng chỉ gateway hết hạnProducer 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 grep không tìm thấy khóa trong repo.

❓ Câu hỏi ôn tập

  1. Streaming khác batch ở đâu?
  2. E2E nghĩa là ai đọc được?
  3. Bloom filter nhầm theo hướng nào?
  4. 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.

Bớt paste mù, hiểu sâu từng dòng mình viết.

180 Days Challenge. 180 ngày cai nghiện vibe code.