init git
This commit is contained in:
153
.claude/skills/sa-2-architecture/templates/data-architecture.md
Normal file
153
.claude/skills/sa-2-architecture/templates/data-architecture.md
Normal 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 |
|
||||
|---|---|---|---|---|---|
|
||||
Reference in New Issue
Block a user