| Thông tin tài liệu | Giá trị |
|---|---|
| Mã tài liệu | AD-MKTPLACE-AIGEN-v1.1 |
| Loại | Architecture Document (AD) — cấp hệ thống (1 file / hệ thống) |
| Phiên bản | 1.1.0 |
| Trạng thái | ☐ Draft for review |
| Ngày tạo | 2026-06-22 |
| Cập nhật lần cuối | 2026-06-22 |
| Dự án / Hệ thống | Marketplace-AiGen (E-commerce Marketplace, multi-merchant) |
| Mức độ bảo mật | ☑ Internal |
| Quy tắc viết | STD-DOC-v1.11 — docs/stds/QuyTac-AD-va-TechSpec.md |
| Neo chuẩn | ISO/IEC/IEEE 42010:2022 · arc42 · C4 · DDD Context Mapping |
| Sơ đồ | Mermaid (toàn bộ) |
| Ngoài phạm vi | Architecture-as-Code (sinh view từ model, fitness function, drift detection, pipeline) — chuẩn hóa ở tài liệu riêng sau. Xem docs/QuyTac-AD-ArchitectureAsCode.md. |
Lịch sử thay đổi
| Phiên bản | Ngày | Tác giả | Mô tả thay đổi | Người duyệt |
|---|---|---|---|---|
| 1.0.0 | 2026-06-22 | [Tác giả] | Tạo mới theo STD-DOC-v1.11; template đầu mục theo SAD |
[Duyệt] |
| 1.1.0 | 2026-06-22 | [Tác giả] | Bỏ §3 "Các thành phần" (trùng bảng BC §2.2 — capability gom về §2.2; con trỏ Tech Spec ở Phụ lục A.4; Edge/Gateway nêu trong §2.2). Bỏ §6.2 ERD & §6.3 Schema (header rỗng — bất biến no-FK gộp vào §6.1, ERD/schema → Tech Spec). Đánh số lại §3–§10 cho liền mạch. | [Duyệt] |
Mô hình tài liệu (R-0 của
STD-DOC-v1.11): hệ thống có đúng 01 AD này + 01 Tech Spec / bounded context (BC), không phụ thuộc số lượng BC. AD giữ thứ ổn định (ranh giới giữa BC, liên kết, quyết định cấp hệ thống); chi tiết hiện thực (schema cột, field/mã lỗi, framework từng BC) đẩy xuống Tech Spec/contract. Bảng ánh xạ AD ↔ Tech Spec ở Phụ lục A.
Marketplace-AiGen là sàn TMĐT multi-merchant: một Buyer mua từ nhiều Merchant trong một phiên; hệ thống tự tách đơn theo Merchant, giữ tiền qua escrow đến khi giao hàng hoàn tất, rồi đối soát & chi trả tự động.
| # | Mục tiêu | Mô tả | Quality goal (đo được) |
|---|---|---|---|
| M1 | Vận hành sàn multi-merchant | Buyer mua từ nhiều Merchant; hệ tự tách đơn | ≥ 10.000 Merchant; tách đơn chính xác 100% |
| M2 | Thanh toán an toàn qua escrow | Giữ tiền đến khi đơn hoàn tất | 0 sự cố mất/lệch tiền; đối soát khớp 100% |
| M3 | Đối soát & chi trả tự động | Phí sàn/hoa hồng; payout Merchant | Payout đúng hạn ≥ 99%; chứng từ bất biến |
| M4 | Catalog là nguồn sự thật sản phẩm | Source of truth cho hiển thị/tìm kiếm | Duyệt < 24h; search P95 < 200 ms |
| M5 | Chịu tải cao điểm | Flash sale, sự kiện | 3.000 RPS sustained; checkout P99 < 800 ms |
Quy tắc (R-A2): AD nêu quality goal đo được; KPI vận hành chi tiết → dashboard (ngoài AD). Hành vi & SLO từng BC → Tech Spec tương ứng.
Quy tắc (D.1): L1 chỉ "nối ai, để làm gì" — không protocol, không lộ BC.
| Hệ thống ngoài | Loại tương tác | Mô tả |
|---|---|---|
| Cổng thanh toán | API + Webhook | Thu tiền Buyer; callback kết quả |
| Ngân hàng Merchant | API | Payout sau đối soát |
| Đơn vị vận chuyển | API | Tạo vận đơn; theo dõi giao hàng |
| Email/SMS provider | API | Thông báo trạng thái đơn |
| Bên liên quan | Vai trò | Loại | Kỳ vọng (concern) |
|---|---|---|---|
| Buyer | End user | External | Mua nhanh; tiền an toàn (escrow) |
| Merchant | End user | External | Nhận đơn kịp thời; payout đúng & đủ |
| Platform Admin | Operator | Internal | Kiểm duyệt; xử lý vận hành |
| Finance team | Interested | Internal | Đối soát khớp; chứng từ bất biến |
| Security team | Interested | Internal | Cô lập tenant; audit đầy đủ; Zero-Trust |
| SRE / Ops | Interested | Internal | Dễ vận hành; quan sát được; phục hồi nhanh |
| Loại | Ràng buộc | Tác động thiết kế |
|---|---|---|
| Kỹ thuật | PostgreSQL chuẩn org; Kafka làm event bus | DB-per-context; không FK xuyên BC |
| Pháp lý | NĐ 13/2023 (PII); chứng từ tài chính lưu bất biến | WORM/Object Lock cho result bucket; data residency |
| Tài chính | Tiền escrow là tiền thật của khách | Idempotency + audit bắt buộc cho mọi thao tác tiền |
| Tổ chức | Multi-tenant (nhiều Merchant) | Tenant isolation xuyên suốt authz |
Quy tắc (R-A3 / R-C1): giá trị cấu hình cụ thể (TTL, sizing, threshold, secret) → Tech Spec/config/Vault, không ở AD.
⚠️ Open item (TBD): IAM policy chi tiết cho S3 result bucket (chứng từ đối soát) — nguyên tắc đã chốt (write-once, deny overwrite/delete), policy literal chờ ADR riêng. Xem §5.2.3, §6.3.
| Kiểu | Lý do | Trade-off |
|---|---|---|
| Microservices theo Bounded Context (DDD) + Orchestration (Checkout) + Event-Driven | Mỗi BC scale & deploy độc lập; Checkout điều phối luồng tiền phức tạp; event cho liên kết lỏng | Phức tạp phân tán: saga/compensation, distributed tracing, eventual consistency |
merchant_id; Merchant chỉ thấy dữ liệu của mình.Phân loại công nghệ (R-C3 / R-C11): ghi năng lực (sản phẩm) — năng lực là cái binding, sản phẩm là hiện thực.
- Binding (load-bearing toàn hệ thống — ràng buộc chất lượng/khả mở rộng): event bus / async (Kafka) · relational store per-context (PostgreSQL) · immutable doc store / WORM (S3 Object Lock) · search index (Elasticsearch) · cache & phiên ephemeral (Redis).
- Indicative (đẩy xuống Tech Spec): runtime/framework từng BC → quyết định polyglot (Java/Spring, Go, Node.js, Python tùy BC), không liệt kê như ràng buộc ở AD.
Quy tắc (R-0 + R-D2 + R-D5 + R-D6 + R-C9): mỗi BC là một hộp đục trong vùng bao ranh giới hệ thống — không vẽ ruột (service/datastore/framework); decompose nội bộ là L3 → Tech Spec của team sở hữu. Sơ đồ chỉ thể hiện quan hệ giữa BC + hợp đồng/đảm bảo trên mỗi cạnh (ý định + protocol + sync/async; cấm tên RPC method — thuộc contract §4). Quyền-sở-hữu-datastore không ở đây → §5 (sở hữu logic) & §2.4 (deployment, dạng rule). View không phình theo số BC: thêm BC = thêm một hộp.
Legend: ▢ vùng bao = ranh giới hệ thống · 🟦 Bounded Context (hộp đục) · ▭ API Gateway (edge/PEP) · 🟨 hệ ngoài. Nét liền = đồng bộ (sync, gRPC/HTTPS); nét đứt = event bất đồng bộ (Published Language). Nhãn cạnh = ý định · protocol · đảm bảo.
Công nghệ binding (ràng buộc kiến trúc — R-C9/R-C11, ghi
năng lực (sản phẩm)): event bus / async (Kafka) là kênh của mọi cạnh nét đứt (xem §2.1.1 & §2.4). Các hạ tầng binding khác — relational store per-context (PostgreSQL), immutable doc store / WORM (S3 Object Lock), search index (Elasticsearch), cache & phiên ephemeral (Redis) — thể hiện ở §2.4 Deployment (rule hạ tầng) & §5 (sở hữu logic), không vẽ trong sơ đồ này. Framework/runtime từng BC là indicative → Tech Spec, không nêu ở AD.
| BC (hộp) | Trách nhiệm / capability | Bề mặt giao tiếp (cung cấp · tiêu thụ) |
|---|---|---|
| Identity | Authn (OIDC/JWT), RBAC 3 vai trò, cấp SVID workload | Cung cấp: xác thực JWT/SVID (sync) |
| Catalog | Sản phẩm/biến thể/SKU (source of truth), kiểm duyệt, search | Cung cấp: lấy giá (sync); ProductCreated (event) |
| Inventory | Tồn kho, reservation, trừ kho khi đơn hoàn tất | Cung cấp: giữ/giải phóng tồn kho (sync) · Tiêu thụ: ProductCreated, OrderCompleted (event) |
| Checkout | Orchestrator: tách đơn, điều phối saga | Cung cấp: POST /v1/checkout · Tiêu thụ: giá, reserve, tạo đơn, escrow (sync) |
| Order (OMS) | State machine đơn; snapshot giá | Cung cấp: tạo/hủy pending order (sync); OrderCompleted (event) · Tiêu thụ: PaymentReceived (event) |
| Payment | Escrow, đối soát, payout, chứng từ WORM | Cung cấp: init escrow (sync), webhook; PaymentReceived (event) · Tiêu thụ: OrderCompleted (event) |
| Notification | Thông báo đa kênh (email/SMS) | Tiêu thụ: PaymentReceived, OrderCompleted & trạng thái đơn (event) |
Edge — API Gateway / BFF (hạ tầng, không phải BC): định tuyến · verify JWT · rate-limit & WAF · gắn tenant scope · TLS termination. Là PEP biên (cơ chế ở §6), không phải một bounded context.
Quy tắc (§6 của
STD-DOC-v1.11): mục này optional; bắt buộc nếu team dùng DDD, bỏ được nếu không (chiều phụ thuộc đã có ở bảng §2.2). Nó thể hiện hai lớp: (a) quan hệ cộng tác giữa các team sở hữu BC (Conway's law — Customer–Supplier, Partnership, Conformist, Shared Kernel) và (b) ngữ nghĩa tích hợp dữ liệu tại biên (ACL, OHS, Published Language). §2.2 cho topology + hợp đồng; §2.3 cho quan hệ đội + kiểu dịch dữ liệu. U = upstream, D = downstream.
| Quan hệ | Kiểu DDD | Ghi chú |
|---|---|---|
| Catalog → Checkout (giá) | Open Host Service / Customer–Supplier | Checkout dùng ACL: chỉ lấy snapshot giá, không phụ thuộc model nội bộ Catalog |
| Inventory → Checkout (reserve) | Customer–Supplier | Checkout là Customer; Inventory là Supplier |
| Checkout → Order / Payment | Customer–Supplier | Checkout điều phối; Order/Payment cung cấp capability |
| Catalog/Payment/Order → subscribers | Published Language (event schema) | Event là hợp đồng công khai (AsyncAPI), không phải phụ phẩm publisher |
| Identity → mọi BC | Conformist | JWT (user) + SVID (workload); BC tuân theo định dạng danh tính |
| Môi trường | Hạ tầng | Đặc điểm |
|---|---|---|
| Development | Docker Compose | Dữ liệu giả |
| Staging | K8s namespace | Mirror prod, dữ liệu ẩn danh |
| Production | K8s multi-AZ | HA, auto-scaling, full monitoring |
Quy tắc (R-D4): mỗi hộp là node hạ tầng HOẶC instance của một BC/container đã định nghĩa ở §2.2 — không hộp "lửng".
Rolling update mặc định; Canary cho Checkout/Payment (rủi ro cao); Feature flag cho khuyến mãi; Blue/Green khi đổi schema breaking. (YAML/IaC literal, số sizing → Tech Spec/IaC — R-C1.)
Quy tắc (R-A7 / R-D7 / R-D9): AD chỉ giữ kịch bản xuyên nhiều BC; flow nội bộ một BC → Tech Spec. Sequence là mặc định cho thứ tự thời gian — flow rất đơn giản thì mô tả prose (vd §3.1.2, §3.1.3), không ép vẽ. DFD (§3.2) bổ trợ khi cần thấy dữ liệu chảy đi đâu, ở mức loại dữ liệu (không field/schema). Pseudocode/log không thuộc AD.
Cổng thanh toán → Payment webhook (verify chữ ký) → Payment giữ tiền (escrow) → phát PaymentReceived → Order chuyển "To Ship" → Notification báo Merchant.
Buyer xác nhận nhận hàng → Order "Completed" → phát OrderCompleted → Inventory trừ kho vĩnh viễn; Payment tính hoa hồng → release escrow → payout về ngân hàng Merchant → sinh chứng từ đối soát (ghi bất biến lên S3 WORM).
Quy tắc (D.4 / R-D9–R-D11): DFD ở mức loại dữ liệu — nhãn flow là loại dữ liệu/ý định, không field/cột/DDL. Process = BC (đã định nghĩa §2.2); datastore = store BC sở hữu (khớp §5). Legend: 🟨 external entity · 🟦 process (BC) · 🟪 datastore. Flow đánh số theo trình tự dữ liệu di chuyển.
Quy tắc (R-C3): event là Published Language — hợp đồng công khai (AsyncAPI), không phải phụ phẩm publisher. Schema field đầy đủ → contract artifact.
| Event | Publisher | Subscriber(s) | Đảm bảo (delivery / ordering / idempotency) |
|---|---|---|---|
| ProductCreated | Catalog | Inventory | at-least-once · per productId · consumer idempotent |
| PaymentReceived | Payment | Order, Notification | at-least-once · per orderId · consumer idempotent |
| OrderCompleted | Order | Inventory, Payment | at-least-once · per orderId · consumer idempotent |
Quy tắc (R-A15 / R-C6): AD nêu interface ở mức capability + đảm bảo; đặc tả đầy đủ field/method/mã lỗi → OpenAPI/proto (sync) và AsyncAPI + schema registry (async). AD trỏ tới, không sao chép.
Quy tắc (R-D8 — không sơ đồ trùng): mục này dùng bảng (inventory capability + bảng đảm bảo §4.1.4), không vẽ sơ đồ trust-boundary/PEP — bức tranh biên & cơ chế enforce thuộc §6 Kiến trúc bảo mật (xem sơ đồ ZTA ở đó). Bảng §4.1.2 chỉ phân loại interface theo biên và trỏ §6.
| Quy ước | Áp dụng |
|---|---|
| Base URL | https://api.marketplace.com/v{version} |
| Auth | Bearer JWT (RS256); service-to-service mTLS |
| Internal RPC | gRPC giữa các BC |
| Versioning | URL /v1/, hỗ trợ N-1 |
| Error format | {error:{code, message, details[]}} |
| ID / Time | UUID v4 · ISO 8601 UTC |
| Nhóm | Ranh giới | Cơ chế bảo vệ |
|---|---|---|
| Public (qua Gateway) | Internet → edge | Authn, rate limit, validation, tenant scope, WAF |
| Inter-context (gRPC) | VPC nội bộ | mTLS + service account (SVID) |
| Outbound (PG/Bank) | Nội bộ → ngoài | HMAC, timeout, retry, secret ở Vault, egress hạn chế |
| Inbound webhook | Ngoài → nội bộ | Verify chữ ký, allowlist IP, idempotency |
Quy tắc (R-B10/R-D2): liệt kê ở mức capability, không phải tên method literal. Tên proto/route đầy đủ → contract artifact.
| # | Loại | Capability | Provider → Consumer | Auth |
|---|---|---|---|---|
| 1 | gRPC | Lấy giá (snapshot) | Catalog → Checkout | mTLS |
| 2 | gRPC | Giữ tồn kho (reserve/release) | Inventory → Checkout | mTLS |
| 3 | gRPC | Tạo/hủy pending order | Order → Checkout | mTLS |
| 4 | gRPC | Khởi tạo escrow | Payment → Checkout | mTLS |
| 5 | REST | Webhook thanh toán | Cổng thanh toán → Payment | Chữ ký + idempotency |
| Interface/Event | sync/async | consistency | idempotency | ordering | delivery | hành vi lỗi / suy giảm |
|---|---|---|---|---|---|---|
| Lấy giá | sync | strong (read) | n/a (read) | n/a | request/response | Catalog down → checkout 503 (fail-safe) |
| Giữ tồn kho | sync | strong | có (theo reservation) | n/a | request/response | fail → 409; compensation release |
| Init escrow | sync | strong | có (theo key) | n/a | request/response | lỗi → compensation (cancel order + release) |
| Webhook thanh toán | async (inbound) | eventual | có (verify + dedupe) | n/a | at-least-once | retry; chống replay |
| Event (Kafka) | async | eventual | consumer idempotent | per key | at-least-once | retry + DLQ |
| Hệ thống | Loại | Ranh giới | Dữ liệu qua biên | Resilience | Compliance |
|---|---|---|---|---|---|
| Cổng thanh toán | Payment | Outbound + webhook | Số tiền, orderRef (không PAN) | Timeout 30s, fallback reconcile | Subprocessor, DPA |
| Ngân hàng Merchant | Payout | Outbound | STK (nhạy cảm), số tiền | Retry + đối soát thủ công | Hợp đồng ngân hàng |
| Đơn vị vận chuyển | Logistics | Outbound | Địa chỉ (PII) | Retry → queue | Subprocessor, DPA |
| Email/SMS | Notification | Outbound | SĐT/email (PII) | Fallback kênh khác | Subprocessor |
Quy tắc (R-A9 / R-C1): AD nêu quyền sở hữu, ranh giới, phân loại, bất biến. Schema cột / ERD chi tiết / DDL → Tech Spec từng BC.
Quy tắc (R-A23 / R-C11): nêu BC sở hữu loại dữ liệu gì + năng lực lưu trữ cần (capability-first
năng lực (sản phẩm)). Không cột "tên DB vật lý" (suy ra từ DB-per-context → Tech Spec/IaC), không cột "Loại: sản phẩm" trần.
| BC (chủ sở hữu) | Dữ liệu sở hữu | Năng lực lưu trữ cần (hiện thực) | Đặc tính buộc chọn |
|---|---|---|---|
| Identity | User, Role (PII) | relational / system-of-record (PostgreSQL) | ACID, audit |
| Catalog | Product/Variant/SKU/Brand; ảnh sản phẩm | relational (PostgreSQL) + search index (Elasticsearch) + object store (S3) | source-of-truth + full-text search + lưu blob |
| Inventory | Stock, Reservation | relational (PostgreSQL) | nhất quán tồn kho |
| Order | Order, OrderItem (PII địa chỉ) | relational (PostgreSQL) | ACID, state machine |
| Payment | Payment/Escrow/Settlement; chứng từ đối soát | relational (PostgreSQL) + immutable doc store / WORM (S3 Object Lock) | ACID + chứng từ bất biến |
| Checkout | Phiên checkout (ephemeral) | cache & phiên ephemeral (Redis) | tốc độ, TTL ngắn, không bền |
Bất biến dữ liệu (cấp AD): không FK vật lý xuyên BC — tham chiếu chéo (vd
order_idở Payment,product_idở Order) chỉ là reference logic (xem sơ đồ §5.1). ERD / schema cột / DDL chi tiết → Tech Spec (mục Interfaces & data) của từng BC, không ở AD (R-A9 / R-C1).
Flyway; backward-compatible ≥ 1 deploy cycle.
DB chính daily full + hourly incremental (Payment tier-1: RPO < 5 phút).
| Loại dữ liệu | Retention | Khi hết hạn | Cơ sở |
|---|---|---|---|
| PII (hồ sơ, địa chỉ) | TK active + 30 ngày | Anonymize | NĐ 13/2023 |
| Giao dịch / đơn | 10 năm | Archive → purge | Luật kế toán |
| Chứng từ đối soát (S3) | 10 năm | Immutable (WORM) | Compliance tài chính |
| Audit log | 5 năm | Immutable (Object Lock) | Compliance |
⚠️ TBD (R-A22): IAM policy chi tiết cho S3 result bucket — nguyên tắc: write-once, deny overwrite/delete kể cả owner; policy literal chờ ADR riêng. Xem §6.3.
Hướng theo Zero-Trust (NIST SP 800-207). Quy tắc (R-A10): AD nêu mô hình (trust boundary, authn/authz, mã hóa, ZTA target vs current); IAM policy literal, rule cụ thể → Tech Spec/policy.
Quy tắc (R-D12): đây là pattern view — vẽ cơ chế trên mẫu đại diện (1 hop: BC gọi → BC nhận), không enumerate mọi BC (vài chục BC sẽ rối O(N²)). Đơn vị enforce là workload (một BC có thể có nhiều workload), không phải BC. Cơ chế dưới đây áp cho mọi BC và mọi hop.
Ba kiểm tra độc lập mỗi request (đừng gộp): (1) xác thực người dùng (JWT RS256), (2) xác thực workload (mTLS/SVID), (3) phân quyền (PDP). PEP đặt ở mọi ranh giới — biên (API Gateway) và cổng vào mỗi BC (authz service-to-service, PoLP) — không chỉ ở Gateway. Nguyên tắc nền: deny-by-default, verify per-request, least privilege, assume breach — không tin theo vị trí mạng.
Lưu ý mô hình hóa: (1) PEP/sidecar/SVID gắn với workload, không phải BC; một BC có thể chứa nhiều workload (1 BC ≠ 1 service — R-E1). (2) API Gateway và PEP cổng vào segment bản thân chúng cũng là workload và nhận SVID — SPIFFE "workload" = bất kỳ process cần danh tính, gồm gateway/ingress/sidecar. Trong mesh sidecar, chính sidecar (PEP) giữ SVID & kết thúc mTLS, app process phía sau nói loopback. Do đó SPIRE cấp SVID cho mọi thành phần tham gia mTLS, không chỉ service nghiệp vụ.
Microsegmentation (R-A24) — quyết định của AD này: chọn mặc định 1 BC = 1 microsegment (PEP ở cổng vào mỗi BC). Cho phép granularity khác khi cần và phải nêu rõ:
- Gom nhóm: gộp các BC quan hệ chặt (chatty, cùng đội/mức tin cậy) thành một segment — ít PEP-hop hơn nhưng blast radius lớn hơn.
- Per-workload (strict ZTA): mỗi workload một segment — isolation mạnh nhất, overhead cao nhất.
Ví dụ cân nhắc gom nhóm cho Marketplace-AiGen: cụm luồng tiền Checkout + Order + Payment rất chatty trong saga — có thể là một segment nội bộ (vẫn giữ PEP biên cụm + mTLS), đánh đổi blast radius. Hiện tại giữ per-BC để cô lập Payment (Tier-1, tiền thật).
Mô hình PDP/PEP: quyết định tập trung ở PDP (policy-as-code), thực thi ở PEP đặt mọi ranh giới — Gateway (request người dùng) và cổng vào mỗi BC (gọi service-to-service, gắn với workload), per-request + deny-by-default. Authz s2s thực thi PoLP: caller chỉ gọi đúng capability được cấp (vd Checkout chỉ được init escrow ở Payment, không gọi op khác). Nội dung policy = RBAC + tenant isolation: mọi truy vấn dữ liệu Merchant gắn merchant_id; Merchant A không truy cập dữ liệu Merchant B.
| Resource / Action | Admin | Merchant | Buyer |
|---|---|---|---|
| Sản phẩm (CRUD của mình) | ✔ tất cả | ✔ của mình | ✘ |
| Duyệt sản phẩm | ✔ | ✘ | ✘ |
| Đơn hàng | ✔ tất cả | ✔ của mình | ✔ của mình |
| Payout/đối soát | ✔ | ✔ xem của mình | ✘ |
| Chứng từ đối soát (S3) | đọc | đọc của mình | ✘ |
| Ranh giới | PEP | Enforce |
|---|---|---|
| Public (Internet → edge) | API Gateway | Verify JWT, tenant scope, rate limit, validation, WAF |
| Inter-service (cổng vào mỗi BC) | PEP gắn workload (vd sidecar) | mTLS (verify SVID) + authz s2s qua PDP (PoLP) |
| Outbound (PG/Bank) | Egress policy | Secret từ Vault, egress hạn chế chỉ tới đích cho phép |
| Inbound webhook | Gateway/handler | Verify chữ ký + allowlist IP + idempotency |
Bổ sung: CORS allowlist · CSRF cho state-changing · validate server-side (không tin client).
Quy tắc (PHẦN F của
STD-DOC-v1.11): AD ghi invariant + điểm cần người review (gate). Cơ chế thực thi tự động (fitness function / policy-as-code trong CI) thuộc phạm vi AaC — tách riêng.
Invariant bảo mật cấp hệ thống (theo mô hình microsegmentation §6, mặc định 1 BC = 1 segment; enforcement tự động → AaC, sau):
| Invariant | Ghi chú |
|---|---|
| Mọi giao tiếp xuyên microsegment là mTLS (verify SVID), không plaintext | intra-segment tùy flavor (mesh: cũng mТLS; segment-gateway: vùng tin cậy nội bộ) |
| Default-deny giữa các segment — lateral movement bị chặn ở ranh giới | NetworkPolicy/mesh authz; chỉ mở cặp được phép |
| Không lưu lượng nào bypass PEP cổng vào/ra segment | cross-segment qua PEP ingress; outbound qua PEP egress |
| Authz s2s theo PoLP (caller chỉ gọi capability được cấp) + PDP deny-by-default | — |
| Mọi route public có authn + tenant scope | tại PEP biên (Gateway) |
| Webhook luôn verify chữ ký + idempotency | — |
| Payment egress chỉ tới PG/Bank (qua PEP egress của segment) | — |
| Mọi workload tham gia mТLS có SVID (gồm Gateway/PEP), cert xoay tự động | — |
| Không secret hardcode · S3 bật Object Lock | — |
Cần người review (gate, phán đoán): luồng tiền mới · truy cập xuyên tenant · đổi policy chứng từ bất biến · đổi ranh giới microsegmentation (gom/tách segment, đổi flavor) · mỗi cột mốc nâng cấp ZTA. Sai một bước có thể mất tiền/rò rỉ dữ liệu/vi phạm pháp lý hoặc nới blast radius — máy không thay người quyết định được.
⚠️ Target vs current (R-A10): ZTA là hành trình nhiều giai đoạn. Hiện trạng: mTLS qua mesh + PEP tại Gateway đã có. Đang triển khai: PDP tập trung + per-request authz ở sidecar (GĐ2); SPIRE federation (GĐ3). Mỗi cột mốc ZTA = 1 thay đổi kiến trúc → 1 ADR riêng. Sơ đồ trên là kiến trúc mục tiêu.
| Metric | Target | Điều kiện |
|---|---|---|
| Checkout P99 | < 800 ms | Gồm orchestration nhiều BC |
| Search P95 | < 200 ms | Catalog/ES |
| API P99 (khác) | < 500 ms | Normal |
| Error rate | < 0.1% | Normal |
Quality scenario (mẫu): Cao điểm flash sale 3.000 RPS → checkout P99 vẫn < 800 ms nhờ HPA + Redis cache giá + partition Kafka theo merchant_id. Escrow lệch → alert P1 + freeze payout (đảm bảo M2: 0 lệch tiền).
Payment/Order 99.95% · Checkout 99.9% · Catalog/Search 99.5%.
Ước tính từ DAU × đơn/user; Payment & Order là tier-1. Headroom 3–5x.
K8s HPA (CPU>70%/RPS); stateless services; read replica cho Catalog; partition Kafka theo merchant_id.
CDN (ảnh/sản phẩm) · Redis (phiên checkout, giá) · local (feature flags).
Chuẩn HTTP (400/401/403/404/409/422/429/500/503); error model {error:{code,message,details[]}} — hành động chi tiết ở runbook (ngoài AD).
Invariant cấp hệ thống: không bao giờ để reservation/pending order mồ côi sau khi saga checkout thất bại. (Enforcement tự động → AaC.)
| Tier | RTO | RPO | Gồm |
|---|---|---|---|
| 1 Critical | < 1h | < 5min | Identity, Payment, Order |
| 2 Business | < 4h | < 1h | Checkout, Inventory |
| 3 Important | < 24h | < 4h | Catalog, Notification |
Failover multi-AZ; restore từ backup; chứng từ S3 WORM cross-region replication; smoke test luồng tiền trước khi thông báo phục hồi; post-mortem trong 48h.
Structured JSON, mask PII/STK/secret; audit log bất biến (S3 Object Lock, 5 năm). Trường: timestamp, level, service, traceId, merchantId, requestId.
RED per service + Golden Signals. business_order_created_total, escrow_held_total, payout_total{status}, checkout_saga_compensation_total.
OpenTelemetry; quan trọng vì checkout đi qua ≥ 4 BC; 100% errors, 5% normal; propagate trace context qua gRPC + Kafka.
| Alert | Severity | Hành động |
|---|---|---|
| Payment fail rate > 5%/5m | P1 | PagerDuty |
| Escrow/đối soát lệch | P1 | PagerDuty + freeze payout |
| Checkout saga compensation spike | P2 | Slack + runbook |
| Truy cập xuyên tenant phát hiện | P1 | PagerDuty + Security |
Service Overview (SRE) · Business KPIs (PO) · SLA/SLO · Security (auth fail, tenant violation, audit) · Finance (escrow balance, payout, đối soát).
Không áp dụng (N/A — R-A1): hệ thống không sử dụng thành phần AI/LLM. Nếu sau này thêm (vd gợi ý sản phẩm bằng LLM), mục này bắt buộc kích hoạt theo checklist AI Security.
| Tài liệu | Mô tả | Link / Mã |
|---|---|---|
| Quy tắc viết AD & Tech Spec | STD-DOC-v1.11 |
docs/stds/QuyTac-AD-va-TechSpec.md |
| Tech Spec — Checkout | Thiết kế chi tiết orchestrator | techspec/Checkout.md |
| OpenAPI / proto / AsyncAPI | Hợp đồng API/event đầy đủ | [Link] |
| (sau) AaC | Sinh view từ model, fitness function, pipeline | docs/QuyTac-AD-ArchitectureAsCode.md |
Quyết định ảnh hưởng nhiều BC → ADR cấp hệ thống. ADR nội bộ một BC → Tech Spec §6 của BC đó.
| ADR | Quyết định | Trạng thái | View/§ ảnh hưởng |
|---|---|---|---|
| ADR-0001 | DB-per-Context, không FK xuyên BC | Accepted | §2.2, §5 |
| ADR-0002 | Orchestration (Checkout) cho luồng tiền | Accepted | §2.2, §3 |
| ADR-0003 | Event-Driven qua Kafka; event là Published Language | Accepted | §2.3, §3.3 |
| ADR-0004 | Escrow giữ tiền đến khi giao hàng hoàn tất | Accepted | §3, §5 |
| ADR-0005 | Chứng từ tài chính WORM (S3 Object Lock) | Accepted | §5.2.3, §6.3 |
| ADR-0006 | Zero-Trust (mTLS/SVID + PDP/PEP), nhiều giai đoạn | Proposed | §6 |
| ADR-0012 | Bổ sung Dispute & Refund BC (lộ trình) | Proposed | §1.2.2 |
| BC (§2.2 Container) | §1.2.3 Context (L1) | §2.4 Deployment |
|---|---|---|
| Identity | trong "Marketplace-AiGen" | Identity pod → identity_db |
| Catalog | // | Catalog pod → catalog_db + ES + S3img |
| Inventory | // | Inventory pod → inventory_db |
| Checkout | // | Checkout pod → Redis |
| Order | // | Order pod → order_db |
| Payment | // | Payment pod (restricted egress) → payment_db + S3 WORM |
| Notification | // | Notification pod → notification_db |
| BC | §AD liên quan | Tech Spec |
|---|---|---|
| Checkout | §2.2, §3.1.1, §4, §8.2 | techspec/Checkout.md ✅ |
| Payment | §2.2, §3.1.3, §5, §6.3 | techspec/Payment.md (TODO) |
| Order | §3, §4 | techspec/Order.md (TODO) |
| Catalog | §2.2, §3.3 | techspec/Catalog.md (TODO) |
| Inventory | §3.3, §4 | techspec/Inventory.md (TODO) |
| Identity | §6 | techspec/Identity.md (TODO) |
| Notification | §3.3 | techspec/Notification.md (TODO) |
| # | Rủi ro / nợ | Tác động | Biện pháp |
|---|---|---|---|
| R1 | IAM policy S3 WORM chưa chốt (TBD) | Chứng từ có thể bị ghi đè nếu cấu hình sai | ADR riêng + gate review trước khi bật prod |
| R2 | ZTA chưa hoàn tất (PDP/SPIRE GĐ2–3) | authz chưa per-request đầy đủ | Lộ trình ADR-0006; mTLS đã phủ |
| R3 | Eventual consistency (event-driven) | Lệch tạm thời giữa BC | Idempotent consumer; reconcile; monitoring |
| R4 | Checkout là điểm điều phối | Checkout down → không đặt hàng được | Tier-2 chấp nhận; HPA + canary + alert |
| R5 | Dispute/Refund chưa có (v1.0) | Chưa xử lý tranh chấp | ADR-0012 lộ trình |
Bounded Context (BC) — ranh giới mô hình hóa của một miền nghiệp vụ. Escrow — giữ tiền trung gian đến khi đơn hoàn tất. Settlement — đối soát. Payout — chi trả Merchant. WORM — Write Once Read Many (bất biến). Saga — chuỗi giao dịch phân tán + compensation. Tenant isolation — cô lập dữ liệu theo Merchant. OHS/PL/ACL — Open Host Service / Published Language / Anti-Corruption Layer (DDD). mTLS/SVID — mutual TLS / SPIFFE Verifiable Identity Document. PDP/PEP — Policy Decision/Enforcement Point. PII — Personally Identifiable Information.
STD-DOC-v1.11)| # | Hạng mục | ✓ |
|---|---|---|
| 1 | Đúng 01 AD cho hệ thống; mỗi BC có Tech Spec riêng (R-0) | ☑ |
| 2 | §1.2.3 Context (L1) một sơ đồ; §2.2 Container có BC là hộp, datastore trong BC | ☑ |
| 3 | §2.3 Context Map đi kèm §2.2 (topology + ngữ nghĩa quan hệ) | ☑ |
| 4 | §3 chỉ chứa flow xuyên BC; flow nội bộ đẩy xuống Tech Spec | ☑ |
| 5 | Công nghệ phân loại binding vs indicative; nêu quyết định polyglot (§2.1.1) | ☑ |
| 6 | §4 hợp đồng nêu capability + đảm bảo, trỏ tới contract artifact (R-C6/C7) | ☑ |
| 7 | Phụ lục A.3/A.4 correspondence Context↔Container↔Deployment & AD↔Tech Spec | ☑ |
| 8 | Sơ đồ là Mermaid, đúng grain, có legend, nhãn = ý định (không method name) | ☑ |
| 9 | Quyết định nặng cấp hệ thống có ADR; chỉ mục ở A.2 | ☑ |
| 10 | TBD đánh dấu tường minh (§1.4.2, §5.2.3, §6.3) |
☑ |
| 11 | Mục Optional không dùng ghi "N/A — lý do" (§10 AI Security) | ☑ |
| 12 | Version + changelog cập nhật | ☑ |
| Vai trò | Họ tên & Chức danh | Chữ ký / Ngày |
|---|---|---|
| Kiến trúc sư soạn thảo | _____ | _____ |
| Security Reviewer | _____ | _____ |
| Tech Lead / Architect | _____ | _____ |
| CTO / Head of Engineering | _____ | _____ |