Giới thiệu
Trong phần 6 của loạt bài về Thiết kế Hệ thống, chúng ta sẽ khám phá những trụ cột quan trọng của độ tin cậy và bảo mật hệ thống, giúp các dịch vụ hoạt động trơn tru và an toàn.
Mục tiêu chính
Chúng ta sẽ đề cập đến:
- AuthN & AuthZ – OAuth2, JWT, RBAC/ABAC
- Khả năng phục hồi – Bộ ngắt mạch, thời gian chờ, thử lại
- Khả năng quan sát – Nhật ký, chỉ số, theo dõi, SLI/SLO
- Kiểm tra sức khỏe – Phát hiện lỗi, tự động thay thế
- Dự phòng – Tránh điểm thất bại đơn lẻ (SPOFs); đa vùng/đa khu vực
1. AuthN & AuthZ
Tóm tắt: Xác thực chứng minh danh tính, Ủy quyền kiểm tra quyền truy cập.
- OAuth2: Ủy quyền ủy quyền, hữu ích cho các ứng dụng bên thứ ba.
- JWT (JSON Web Tokens): Token không trạng thái, đã ký để xác thực danh tính.
- RBAC (Kiểm soát truy cập dựa trên vai trò): Quyền truy cập dựa trên vai trò.
- ABAC (Kiểm soát truy cập dựa trên thuộc tính): Kiểm soát chi tiết dựa trên thuộc tính.
👉 Ví dụ: Người dùng đăng nhập → nhận JWT → Truy cập vào điểm cuối /orders được xác minh qua các tuyên bố trong JWT.
👉 Liên hệ phỏng vấn: "Bạn sẽ thiết kế xác thực cho một ứng dụng SaaS đa khách hàng như thế nào?" — Sử dụng OAuth2 + JWT có phạm vi.
2. Khả năng phục hồi
Tóm tắt: Hệ thống cần thất bại một cách duyên dáng.
- Bộ ngắt mạch: Ngừng gọi dịch vụ gặp lỗi để ngăn chặn sự cố dây chuyền.
- Thời gian chờ: Không chờ mãi mãi cho một phản hồi.
- Thử lại: Thử lại các lỗi tạm thời với thời gian chờ tăng dần.
👉 Ví dụ: Dịch vụ thanh toán gọi đến cổng thanh toán bên thứ ba; sử dụng bộ ngắt mạch để tránh các lỗi lặp lại.
👉 Liên hệ phỏng vấn: "Điều gì xảy ra khi một dịch vụ hạ tầng không hoạt động?" — Bộ ngắt mạch mở, trả về thất bại hoặc lỗi.
3. Khả năng quan sát
Tóm tắt: Nếu bạn không thể đo lường, bạn không thể cải thiện.
- Nhật ký: Để gỡ lỗi chi tiết
- Chỉ số: Các số đo định lượng (ví dụ: QPS, tỷ lệ lỗi)
- Theo dõi: Luồng yêu cầu từ đầu đến cuối (theo dõi phân tán)
- SLI (Chỉ số mức dịch vụ): Chỉ số đã đo (ví dụ: 99.9% yêu cầu < 200ms)
- SLO (Mục tiêu mức dịch vụ): Mục tiêu (ví dụ: 99.9% yêu cầu < 200ms)
👉 Ví dụ: Bảng điều khiển Grafana hiển thị tỷ lệ lỗi và percentiles độ trễ.
👉 Liên hệ phỏng vấn: "Bạn theo dõi kiến trúc dựa trên microservice như thế nào?" — Kết hợp nhật ký, chỉ số và theo dõi.
4. Kiểm tra sức khỏe
Tóm tắt: Phát hiện sớm các vấn đề và phục hồi tự động.
- Kiểm tra sống: Quy trình có đang hoạt động không?
- Kiểm tra sẵn sàng: Nó có thể xử lý yêu cầu không?
👉 Ví dụ: Kubernetes kiểm tra các dịch vụ mỗi vài giây và khởi động lại nếu không khỏe.
👉 Liên hệ phỏng vấn: "Bạn làm gì để ngăn chặn lưu lượng truy cập đến các dịch vụ không khỏe?" — Sử dụng các probe sẵn sàng + phát hiện dịch vụ.
5. Dự phòng
Tóm tắt: Không có SPOFs. Triển khai đa AZ hoặc đa khu vực để tăng khả năng phục hồi.
👉 Ví dụ: Cơ sở dữ liệu chính ở us-east-1, bản sao ở us-west-1.
👉 Liên hệ phỏng vấn: "Bạn xử lý sự cố trung tâm dữ liệu như thế nào?" — Sao chép đa khu vực, cơ chế chuyển đổi dự phòng.
✅ Những điểm chính
- Thiết kế luồng xác thực với sự an toàn và khả năng mở rộng.
- Xây dựng khả năng phục hồi bằng bộ ngắt mạch, thời gian chờ, thử lại.
- Triển khai khả năng quan sát: nhật ký, chỉ số, theo dõi, SLI/SLO.
- Kiểm tra sức khỏe ngăn chặn việc phục vụ yêu cầu từ các phiên bản không khỏe.
- Sử dụng dự phòng để tránh SPOFs và cho phép phục hồi thảm họa.
💡 Câu hỏi thực hành:
"Thiết kế một hệ thống xác thực cho một cổng API trong kiến trúc microservices. Bạn sẽ thực thi kiểm soát truy cập theo dịch vụ và theo dõi yêu cầu từ đầu đến cuối như thế nào?"