This commit is contained in:
Leonard-ThindPad-P50
2026-09-08 10:26:21 +07:00
commit c81f249920
169 changed files with 38726 additions and 0 deletions

View File

@@ -0,0 +1,153 @@
# DAT — Data Architecture — <PROJECT>
| | |
|---|---|
| **Version** | 1.0 |
| **Date** | YYYY-MM-DD |
| **Author** | <SA> (skill sa-2-architecture) |
| **Status** | 🟡 Draft |
| **Approved by** | Tech Lead: — · DBA: — · DPO/Legal: — |
| **Source** | SAD_… v1.0 · BR_… của BA · schema hiện tại |
| **Scope** | |
| **Confidence** | 🟡 |
## Change Log
| Version | Date | Người sửa | Thay đổi | ADR |
|---|---|---|---|---|
| 1.0 | | | Bản đầu | — |
---
## 1. Nguyên tắc: mỗi thực thể có đúng một chủ
*Quy tắc `D7`. Đồng bộ hai chiều không có chủ là cách sinh ra dữ liệu mâu thuẫn không ai gỡ được.*
| Thực thể | **Hệ thống chủ (SoT)** | Bản sao ở đâu | Cập nhật bằng cơ chế gì | Trễ tối đa cho phép | Lệch quá thì sao |
|---|---|---|---|---|---|
| | | | event / CDC / job / gọi trực tiếp | | cảnh báo `QAS-nnn` |
🔴 Thực thể có **hai** chủ ⇒ chưa quyết xong, không được qua AG2. Chọn một bên; bên kia thành
read model.
## 2. Mô hình dữ liệu mức khái niệm
*Thực thể và quan hệ, chưa phải schema. Schema chi tiết thuộc dev.*
```mermaid
erDiagram
```
| Thực thể | Ý nghĩa nghiệp vụ | Khoá tự nhiên | Ước lượng số bản ghi (năm 1 / năm 3) | Tăng trưởng |
|---|---|---|---|---|
## 3. Chọn công nghệ lưu trữ
| Kho | Loại | Chứa gì | Vì sao loại này | `ADR` |
|---|---|---|---|---|
| | quan hệ / tài liệu / khoá-giá trị / cột / tìm kiếm | | gắn với `QAS-nnn` | |
**Phương án bị loại:** *(quy tắc `D3`)*
| Loại | Loại vì | Xét lại khi |
|---|---|---|
## 4. Consistency
| Nhánh dữ liệu | Mức nhất quán | Trễ tối đa | Vì sao chấp nhận được | Ai chấp nhận | `ADR` |
|---|---|---|---|---|---|
| Số dư ví | Mạnh | 0 | `BR-0nn` không cho phép sai | PO | |
| Báo cáo tổng hợp | Eventual | ≤ 5 phút | Người dùng chấp nhận theo `QAS-nnn` | PO | |
🔴 **"Eventual consistency" không có con số trễ là câu nói suông.** Người dùng và QA cần biết
lệch bao lâu là bình thường, bao lâu là sự cố.
### 4.1 Giao dịch xuyên service
| Luồng nghiệp vụ | Cơ chế | Bù trừ khi lỗi giữa chừng | Ai phát hiện lệch | `ADR` |
|---|---|---|---|---|
| | saga / outbox / 2PC / không có | | job đối soát chạy … | |
**Nếu chọn "không có"** — ghi rõ hệ quả: luồng nào có thể để lại trạng thái nửa vời, ai dọn,
sau bao lâu.
## 5. Phân loại dữ liệu & tuân thủ
| Nhóm dữ liệu | Mức nhạy cảm | Ví dụ trường | Lưu ở đâu | Mã hoá at-rest | Che khi hiển thị | Retention | Cách xoá theo yêu cầu |
|---|---|---|---|---|---|---|---|
| | công khai / nội bộ / **PII** / nhạy cảm | | | | | | |
| Ràng buộc pháp lý | Nguồn | Hệ quả kiến trúc |
|---|---|---|
| Dữ liệu phải nằm trong lãnh thổ … | `CON-05` | Ràng buộc vùng cho mọi dịch vụ lưu trữ, kể cả backup và log |
| Quyền được xoá | | Xoá thật hay ẩn danh hoá? Ảnh hưởng tới báo cáo lịch sử? |
🔴 **Backup và log cũng chứa PII.** Ràng buộc lãnh thổ và retention áp dụng cho cả hai — đây là
chỗ bị bỏ sót nhiều nhất khi kiểm toán.
## 6. Vòng đời & lưu trữ dài hạn
| Thực thể | Dữ liệu nóng | Chuyển sang lạnh sau | Xoá sau | Ai duyệt |
|---|---|---|---|---|
## 7. Hiệu năng dữ liệu
| Truy vấn quan trọng | Tần suất | Khối lượng quét | Chỉ mục cần | `QAS` |
|---|---|---|---|---|
| Vấn đề | Quyết định | `ADR` |
|---|---|---|
| Phân mảnh (sharding/partitioning) | có/không · khoá: … | |
| Đọc/ghi tách nhau | | |
| Cache: cái gì, invalidate thế nào | | |
🔴 **Cache invalidation phải thiết kế cùng lúc với cache.** Cache không có chiến lược làm mới
là nguồn dữ liệu sai mà không ai nghi ngờ.
## 8. Migration dữ liệu legacy
*Bỏ mục này nếu hệ thống hoàn toàn mới — ghi rõ "không áp dụng", đừng để trống.*
| | |
|---|---|
| **Nguồn** | hệ thống · số bản ghi · chất lượng |
| **Cách chuyển** | một lần (big bang) / song song hai hệ thống / cuốn chiếu theo nhóm |
| **Ánh xạ trường** | *(bảng riêng bên dưới)* |
| **Cách đối chiếu sau khi chuyển** | *(truy vấn nào, ngưỡng chênh lệch chấp nhận được là bao nhiêu)* |
| **🔴 Cách rollback** | *(bắt buộc)* |
| **Dữ liệu phát sinh trong lúc chuyển** | *(xử lý thế nào)* |
| **Thời lượng cửa sổ cắt chuyển** | |
**Ánh xạ trường**
| Trường nguồn | Trường đích | Chuyển đổi | Xử lý giá trị thiếu/sai |
|---|---|---|---|
🔴 **Migration không có rollback là migration một chiều.** Phải trả lời được: sau 2 giờ phát
hiện sai thì quay lại thế nào, dữ liệu phát sinh trong 2 giờ đó xử lý ra sao. Chưa trả lời
được ⇒ chặn AG2.
## 9. Sao lưu & khôi phục
| | |
|---|---|
| Tần suất backup | |
| Giữ bao lâu | |
| **Lần khôi phục thử gần nhất** | *(chưa từng thử ⇒ `Confidence` 🔴 + `ARISK`)* |
| Thời gian khôi phục đo được | … *(khớp với RTO ở `INF`)* |
## 10. 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:**
-
## 11. 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 |
|---|---|---|---|---|---|