# INF — Infrastructure & Deployment Design — | | | |---|---| | **Version** | 1.0 | | **Date** | YYYY-MM-DD | | **Author** | (skill sa-2-architecture) | | **Status** | 🟡 Draft | | **Approved by** | **SRE/Ops: —** · Tech Lead: — | | **Source** | SAD_… v1.0 · QAS_… v1.0 · TCO_… v1.0 | | **Scope** | | | **Confidence** | 🟡 | ## Change Log | Version | Date | Người sửa | Thay đổi | ADR | |---|---|---|---|---| | 1.0 | | | Bản đầu | — | > 🔴 **Tài liệu này phải khớp số với `TCO`** (quy tắc `D9`). Lệch nhau ⇒ một trong hai sai, > không có khả năng thứ ba. --- ## 1. Tóm tắt | | | |---|---| | **Cloud / vùng** | · ràng buộc lãnh thổ: `CON-05` | | **Mô hình chạy** | VM / container / K8s / PaaS / serverless · `ADR-nnn` | | **Chịu được mất gì** | một node / một AZ / một vùng | | **RTO / RPO** | … / … · **lần diễn tập gần nhất:** … | | **Chi phí/tháng ở tải dự kiến** | … *(khớp `TCO` §3)* | ## 2. Môi trường | Môi trường | Mục đích | Cấu hình so với prod | Dữ liệu | Ai truy cập được | |---|---|---|---|---| | dev | | | dữ liệu sinh | | | stg | **đo `QAS`** | | ẩn danh hoá | | | prod | | 100% | thật | | 🔴 **Câu hỏi bắt buộc trả lời:** stg khác prod ở chỗ nào, và **chỗ khác đó có làm sai lệch kết quả đo `QAS` không?** Đo hiệu năng trên máy nhỏ hơn 4 lần rồi kết luận "đạt" là tự lừa mình. | `QAS` cần đo | Đo được trên stg? | Nếu không, đo ở đâu | Sai số ước tính | |---|---|---|---| ## 3. Sơ đồ triển khai ```mermaid flowchart TB ``` **Legend:** *(bắt buộc — ranh giới mạng, ranh giới vùng/AZ, hướng lưu lượng)* | Thành phần | Loại máy/dịch vụ | Số bản | Vùng/AZ | Tự động scale | Chi phí/tháng | |---|---|---|---|---|---| | | | | | ngưỡng: … | | | **Cộng** | | | | | *(khớp `TCO` §3)* | ## 4. Tính sẵn sàng (HA) | Thành phần | Chịu được mất | Cơ chế chuyển đổi | Thời gian chuyển | Tự động? | Đã thử chưa | |---|---|---|---|---|---| | Ứng dụng | 1 node | LB bỏ node lỗi | … s | ✅ | ☐ | | CSDL | 1 AZ | failover replica | … s | | ☐ | **Điểm hỏng đơn (SPOF) còn lại** | Thành phần | Vì sao chưa dự phòng | Rủi ro | Kế hoạch | |---|---|---|---| 🔴 Hệ thống nào cũng còn SPOF. Liệt kê ra là chuyên nghiệp; giả vờ không có mới là vấn đề. ## 5. Khôi phục thảm hoạ (DR) | | | |---|---| | **Kịch bản thảm hoạ tính tới** | mất một vùng / hỏng dữ liệu / xoá nhầm / ransomware | | **RTO mục tiêu** | … *(nguồn: `QAS-nnn`, PO chấp nhận ngày …)* | | **RPO mục tiêu** | … | | **Cách khôi phục** | *(các bước, ai làm, tài liệu runbook ở đâu)* | | **RTO đo được thực tế** | … *(chưa đo ⇒ 🔴)* | | **Lần diễn tập gần nhất** | … *(chưa từng ⇒ `Confidence` 🔴 + tạo `ARISK`)* | | **Tần suất diễn tập** | | 🔴 **RTO/RPO chưa diễn tập là RTO/RPO trên giấy.** Con số duy nhất có giá trị là con số đo được trong một lần diễn tập thật. ## 6. Khả năng mở rộng | Thành phần | Scale kiểu gì | Ngưỡng kích hoạt | Giới hạn trên | Thời gian scale xong | Nút thắt kế tiếp | |---|---|---|---|---|---| | | ngang / dọc | CPU > …% trong … phút | … bản | … s | | **Nút thắt khi tải × 3** *(kịch bản B của `TCO`)* | Thứ tự | Thành phần nghẽn trước | Ở mức tải nào | Cách gỡ | Chi phí | |---|---|---|---|---| 🔴 Scale ngang tầng ứng dụng thường đẩy nút thắt xuống CSDL. Ghi rõ nút thắt kế tiếp — nếu không, việc scale sẽ tốn tiền mà không cải thiện gì. ## 7. Triển khai | | Quyết định | `ADR` | |---|---|---| | Chiến lược | blue-green / canary / rolling | | | Thời gian downtime cho phép | *(khớp ngân sách lỗi ở `QAS`)* | | | **Cách rollback** | · rollback mất bao lâu | | | Migration schema | tương thích ngược không? triển khai mấy bước? | | | Cờ tính năng (feature flag) | có/không · nơi quản lý | | | Ai được bấm deploy prod | | | 🔴 **Migration schema và deploy code phải tương thích ngược với nhau**, nếu không thì rollback code sẽ gặp schema mới và hỏng. Quy tắc: đổi schema theo hai bước (thêm trước, bỏ sau). ## 8. Quan sát được (Observability) | Loại | Công cụ | Ghi gì | Giữ bao lâu | Ai đọc | Chi phí/tháng | |---|---|---|---|---|---| | Log | | | | | | | Metric | | | | | | | Trace | | tỉ lệ lấy mẫu: … | | | | | **Cộng** | | | | | *(khớp `TCO` §3)* | **Cảnh báo** | Cảnh báo | Điều kiện | Mức | Báo cho ai | `QAS` | |---|---|---|---|---| | | | trang/ngay · vé/giờ hành chính | | | 🔴 **Cảnh báo không ai xử lý là cảnh báo sẽ bị tắt tiếng.** Mỗi cảnh báo phải có người nhận và một runbook — không có thì đừng tạo cảnh báo đó. **Correlation id** — cách truyền xuyên hệ thống: *(khớp `SAD` §9)* ## 9. Vận hành thường ngày | Việc | Ai làm | Tần suất | Tài liệu | |---|---|---|---| | Trực sự cố (on-call) | | | escalation: … | | Vá bảo mật | | | | | Kiểm tra backup khôi phục được | | | | | Rà chi phí | | hàng tháng | | **Năng lực đội vận hành** *(từ `CON-04`)*: … người · kỹ năng có · **kỹ năng còn thiếu:** … ⇒ chi phí đào tạo ghi ở `TCO` §5. ## 10. Đối chiếu với `TCO` | Hạng mục | `INF` §3+§8 | `TCO` §3 | Khớp | |---|---|---|---| | Compute | | | ☐ | | CSDL | | | ☐ | | Observability | | | ☐ | | Non-prod | | | ☐ | | **Tổng/tháng** | | | ☐ | ## 11. Giả định & Ngoài phạm vi **Giả định:** | ID | Giả định | Cách xác minh | Nếu sai | |---|---|---|---| **Ngoài phạm vi:** - *(ví dụ: không hỗ trợ multi-region active-active; DR dựa trên khôi phục backup, RTO 4 giờ)* ## 12. Open Questions | ID | Câu hỏi | Hỏi ai | Từ ngày | Chặn gì | Hệ quả nếu trả lời ngược | |---|---|---|---|---|---|