# Kiến Trúc Thiết Kế Hệ Thống
Kiến trúc tổng thể của nền tảng GoodGo Microservices
## Sơ đồ Tổng quan
```mermaid
%%{init: {'theme':'base', 'themeVariables': {
'primaryTextColor':'#000',
'secondaryTextColor':'#000',
'tertiaryTextColor':'#000',
'textColor':'#000',
'mainBkg':'#fff',
'secondBkg':'#fff',
'lineColor':'#333',
'border1':'#000',
'border2':'#000',
'clusterBkg':'#fff',
'clusterBorder':'#000',
'titleColor':'#000',
'edgeLabelBackground':'#fff',
'nodeTextColor':'#fff'
}}}%%
graph TD
subgraph "Client Layer"
Web[Web App
Next.js]
Mobile[Mobile App
Flutter]
end
subgraph "API Gateway Layer"
Traefik[Traefik
API Gateway]
end
subgraph "Services Layer"
IAM[IAM Service
Auth & RBAC]
Future1[Future Service 1]
Future2[Future Service 2]
end
subgraph "Infrastructure Layer"
DB[(Neon PostgreSQL
Primary Database)]
Cache[(Redis
Cache & Session)]
Kafka[Apache Kafka
Event Streaming]
end
subgraph "Observability Layer"
Prom[Prometheus
Metrics]
Loki[Loki
Logs]
Jaeger[Jaeger
Tracing]
Grafana[Grafana
Dashboards]
end
Web --> Traefik
Mobile --> Traefik
Traefik --> IAM
Traefik --> Future1
Traefik --> Future2
IAM --> DB
IAM --> Cache
IAM --> Kafka
Future1 --> DB
Future1 --> Cache
Future1 --> Kafka
Future2 --> DB
Future2 --> Cache
Future2 --> Kafka
IAM -.->|metrics| Prom
Future1 -.->|metrics| Prom
Future2 -.->|metrics| Prom
IAM -.->|logs| Loki
Future1 -.->|logs| Loki
Future2 -.->|logs| Loki
IAM -.->|traces| Jaeger
Future1 -.->|traces| Jaeger
Future2 -.->|traces| Jaeger
Prom --> Grafana
Loki --> Grafana
Jaeger --> Grafana
style Web fill:#1565c0,stroke:#fff,stroke-width:2px,color:#fff
style Mobile fill:#1565c0,stroke:#fff,stroke-width:2px,color:#fff
style Traefik fill:#0f4c81,stroke:#fff,stroke-width:2px,color:#fff
style IAM fill:#283593,stroke:#fff,stroke-width:2px,color:#fff
style Future1 fill:#4527a0,stroke:#fff,stroke-width:2px,color:#fff
style Future2 fill:#4527a0,stroke:#fff,stroke-width:2px,color:#fff
style DB fill:#5e35b1,stroke:#fff,stroke-width:2px,color:#fff
style Cache fill:#ef6c00,stroke:#fff,stroke-width:2px,color:#fff
style Kafka fill:#2e7d32,stroke:#fff,stroke-width:2px,color:#fff
style Prom fill:#c62828,stroke:#fff,stroke-width:2px,color:#fff
style Loki fill:#d84315,stroke:#fff,stroke-width:2px,color:#fff
style Jaeger fill:#e65100,stroke:#fff,stroke-width:2px,color:#fff
style Grafana fill:#b71c1c,stroke:#fff,stroke-width:2px,color:#fff
```
## Mô tả Kiến trúc
GoodGo Platform được xây dựng theo kiến trúc microservices với các nguyên tắc sau:
**Nguyên tắc Cốt lõi**:
1. **Độc Lập Service**: Mỗi service có database riêng và có thể deploy độc lập
2. **API Gateway Pattern**: Traefik xử lý routing, load balancing, và cross-cutting concerns
3. **Clean Architecture**: Mỗi service tuân theo Clean Architecture (API, Domain, Infrastructure)
4. **Infrastructure as Code**: Tất cả cấu hình infrastructure được version control
5. **Observability First**: Đầy đủ metrics, logging, và health checks
**Công nghệ Stack**:
- **Frontend**: Next.js 14+ (App Router), Flutter 3.x
- **Backend**: .NET 10, ASP.NET Core, MediatR (CQRS)
- **Database**: Neon PostgreSQL (serverless), Entity Framework Core
- **Cache**: Redis (StackExchange.Redis)
- **Message Broker**: MediatR Domain Events (RabbitMQ planned)
- **API Gateway**: Traefik v3
- **Observability**: Prometheus, Grafana, Loki, Serilog
## Bối cảnh Hệ thống
```mermaid
C4Context
title Sơ đồ Bối cảnh Hệ thống GoodGo Platform
Person(user, "Người dùng / User", "End users accessing the platform")
Person(admin, "Quản trị viên / Admin", "System administrators")
Person(developer, "Nhà phát triển / Developer", "Platform developers")
System(platform, "GoodGo Platform", "Microservices platform for business applications")
System_Ext(neon, "Neon PostgreSQL", "Serverless PostgreSQL database")
System_Ext(redis, "Redis", "In-memory cache and session store")
System_Ext(kafka, "Apache Kafka", "Event streaming platform")
System_Ext(monitoring, "Monitoring Stack", "Prometheus + Grafana + Loki + Jaeger")
Rel(user, platform, "Uses", "HTTPS")
Rel(admin, platform, "Manages", "HTTPS")
Rel(developer, platform, "Develops & Deploys", "Git, CI/CD")
Rel(platform, neon, "Stores data", "PostgreSQL Protocol")
Rel(platform, redis, "Caches data", "Redis Protocol")
Rel(platform, kafka, "Publishes/Consumes events", "Kafka Protocol")
Rel(platform, monitoring, "Sends metrics, logs, traces", "HTTP, gRPC")
```
## Thành phần
### Frontend Layer
#### Web App (Next.js)
**Mô tả**: Ứng dụng web sử dụng Next.js 14+ với App Router
**Tính năng chính**:
- Server-side rendering (SSR) và Static Site Generation (SSG)
- API routes cho BFF (Backend for Frontend) pattern
- Optimized image loading với next/image
- Built-in routing và code splitting
**Công nghệ sử dụng**:
- Next.js 14+, React 18+, TypeScript
- Tailwind CSS, Zustand (state management)
- `@goodgo/http-client`, `@goodgo/types`
**Vị trí File**: [`apps/web-client/`](file:///Users/velikho/Desktop/WORKING/Base/apps/web-client)
#### Mobile App (Flutter)
**Mô tả**: Ứng dụng mobile cross-platform sử dụng Flutter
**Tính năng chính**:
- Cross-platform (iOS, Android)
- Native performance
- Provider pattern cho state management
- Offline-first với local storage
**Công nghệ sử dụng**:
- Flutter 3.x, Dart
- Provider, Dio (HTTP client)
**Vị trí File**: [`apps/mobile-client/`](file:///Users/velikho/Desktop/WORKING/Base/apps/mobile-client)
### API Gateway Layer
#### Traefik
**Mô tả**: Reverse proxy và API gateway xử lý routing, load balancing, SSL termination
**Tính năng chính**:
- Dynamic service discovery
- Automatic HTTPS với Let's Encrypt
- Load balancing và health checks
- Rate limiting và circuit breaker
- Middleware chains (CORS, auth, logging)
**Công nghệ sử dụng**:
- Traefik 2.x
- Docker labels cho dynamic configuration
**Vị trí File**: [`infra/traefik/`](file:///Users/velikho/Desktop/WORKING/Base/infra/traefik)
### Services Layer
#### IAM Service (.NET)
**Mô tả**: Identity and Access Management service xử lý authentication và authorization
**Tính năng chính**:
- OAuth2/OpenID Connect với OpenIddict
- JWT authentication (RS256)
- RBAC (Role-Based Access Control)
- ASP.NET Core Identity cho user management
- MFA support (TOTP)
**Công nghệ sử dụng**:
- .NET 10, ASP.NET Core, MediatR
- Entity Framework Core, OpenIddict
- Serilog, FluentValidation
**Vị trí File**: [`services/iam-service-net/`](file:///Users/velikho/Desktop/WORKING/Base/services/iam-service-net)
#### Các Services Đã Triển Khai
| Service | Mô tả | Vị trí |
|---------|-------|--------|
| **Storage Service** | File storage với MinIO/Aliyun OSS | `services/storage-service-net/` |
| **Membership Service** | Quản lý membership và subscriptions | `services/membership-service-net/` |
| **Organization Service** | Quản lý tổ chức | `services/organization-service-net/` |
| **Chat Service** | Chat và messaging | `services/chat-service-net/` |
| **Social Service** | Social features | `services/social-service-net/` |
| **Wallet Service** | Ví điện tử | `services/wallet-service-net/` |
### Infrastructure Layer
#### Neon PostgreSQL
**Mô tả**: Serverless PostgreSQL database với auto-scaling
**Tính năng chính**:
- Serverless với auto-scaling
- Branching cho development/staging
- Point-in-time recovery
- Connection pooling
**Vị trí File**: Database schemas trong mỗi service (`services/*/prisma/schema.prisma`)
#### Redis
**Mô tả**: In-memory cache và session store
**Tính năng chính**:
- Multi-layer caching (L1: Memory, L2: Redis)
- Session storage
- Rate limiting counters
- Pub/Sub cho real-time features
**Vị trí File**: [`infra/redis/`](file:///Users/velikho/Desktop/WORKING/Base/infra/redis)
#### Apache Kafka
**Mô tả**: Event streaming platform cho asynchronous communication
**Tính năng chính**:
- Event-driven architecture
- Event sourcing
- Eventual consistency
- Dead letter queue (DLQ)
**Vị trí File**: [`infra/kafka/`](file:///Users/velikho/Desktop/WORKING/Base/infra/kafka)
## Luồng Dữ liệu
```mermaid
sequenceDiagram
participant Client
participant Traefik as API Gateway
participant Service
participant Cache as Redis
participant DB as PostgreSQL
participant Kafka
Client->>Traefik: HTTPS Request
Traefik->>Traefik: Rate Limiting
Traefik->>Traefik: JWT Validation
Traefik->>Service: Route to Service
Service->>Cache: Check Cache
alt Cache Hit
Cache-->>Service: Return Cached Data
else Cache Miss
Service->>DB: Query Database
DB-->>Service: Return Data
Service->>Cache: Store in Cache (TTL: 5min)
end
Service->>Service: Process Business Logic
Service->>DB: Update Data (if needed)
Service->>Kafka: Publish Event (async)
Service-->>Traefik: Response
Traefik-->>Client: HTTPS Response
Note over Kafka: Event consumers process asynchronously
```
**Giải thích chi tiết**:
1. **Request**: Client gửi HTTPS request đến Traefik
2. **Gateway Processing**: Traefik thực hiện rate limiting và JWT validation
3. **Routing**: Traefik route request đến service phù hợp
4. **Cache Check**: Service kiểm tra L1 (memory) → L2 (Redis) cache
5. **Database Query**: Nếu cache miss, query từ PostgreSQL
6. **Cache Update**: Lưu kết quả vào cache với TTL phù hợp
7. **Business Logic**: Xử lý logic nghiệp vụ
8. **Event Publishing**: Publish domain events đến Kafka (async)
9. **Response**: Trả về response cho client qua Traefik
## Kiến trúc Database
```mermaid
erDiagram
User ||--o{ Session : has
User ||--o{ UserRole : has
User ||--o{ UserPermission : has
User ||--o{ MFADevice : has
User ||--o{ AuditEvent : triggers
Role ||--o{ UserRole : assigned_to
Role ||--o{ RolePermission : has
Permission ||--o{ RolePermission : granted_to
Permission ||--o{ UserPermission : granted_to
Organization ||--o{ User : contains
Organization ||--o{ Role : defines
User {
string id PK
string email UK
string passwordHash
string organizationId FK
boolean mfaEnabled
datetime createdAt
datetime updatedAt
}
Session {
string id PK
string userId FK
string refreshTokenHash
string deviceFingerprint
string ipAddress
datetime expiresAt
datetime createdAt
}
Role {
string id PK
string name
string organizationId FK
int hierarchy
datetime createdAt
}
Permission {
string id PK
string resource
string action
string scope
datetime createdAt
}
AuditEvent {
string id PK
string userId FK
string eventType
json eventData
datetime timestamp
}
```
**Mô tả**:
- **Database per Service**: Mỗi service có database schema riêng
- **Shared Database**: Hiện tại sử dụng shared Neon PostgreSQL, schemas isolated bằng Prisma
- **Event Sourcing**: Audit events lưu tất cả thay đổi quan trọng
- **Soft Delete**: Sử dụng `deletedAt` field thay vì hard delete
## Quyết định Thiết kế
### Quyết định 1: Microservices Architecture
**Bối cảnh**: Cần khả năng scale độc lập và deploy riêng biệt cho từng business domain
**Quyết định**: Sử dụng microservices architecture với database per service pattern
**Hậu quả**:
- ✅ **Tích cực**:
- Scale độc lập từng service theo nhu cầu
- Deploy riêng biệt, giảm risk khi release
- Fault isolation - lỗi một service không ảnh hưởng toàn bộ
- Technology flexibility - mỗi service có thể dùng tech stack khác
- ❌ **Tiêu cực**:
- Phức tạp hơn monolith (distributed systems challenges)
- Eventual consistency thay vì strong consistency
- Distributed transactions phức tạp (Saga pattern)
- Operational overhead (monitoring, deployment)
**Các lựa chọn thay thế**: Monolith, Modular Monolith
---
### Quyết định 2: Traefik as API Gateway
**Bối cảnh**: Cần reverse proxy, load balancing, SSL termination, và service discovery
**Quyết định**: Sử dụng Traefik thay vì Kong, NGINX, hoặc AWS API Gateway
**Hậu quả**:
- ✅ **Tích cực**:
- Auto service discovery với Docker labels
- Dynamic configuration không cần restart
- Built-in Let's Encrypt support
- Native Kubernetes integration
- Built-in metrics và tracing
- ❌ **Tiêu cực**:
- Learning curve cao hơn NGINX
- Plugin ecosystem nhỏ hơn Kong
- Community nhỏ hơn NGINX
**Các lựa chọn thay thế**: Kong, NGINX, AWS API Gateway, Envoy
---
### Quyết định 3: Neon PostgreSQL (Serverless)
**Bối cảnh**: Cần database với auto-scaling, branching, và cost-effective cho development
**Quyết định**: Sử dụng Neon PostgreSQL (serverless) thay vì self-hosted PostgreSQL hoặc AWS RDS
**Hậu quả**:
- ✅ **Tích cực**:
- Auto-scaling theo usage
- Database branching cho dev/staging
- Pay-per-use pricing model
- Automatic backups và point-in-time recovery
- No infrastructure management
- ❌ **Tiêu cực**:
- Vendor lock-in
- Cold start latency (mitigated by connection pooling)
- Limited control over database configuration
**Các lựa chọn thay thế**: Self-hosted PostgreSQL, AWS RDS, Google Cloud SQL
## Đặc điểm Hiệu suất
| Chỉ số / Metric | Mục tiêu / Target | Ghi chú / Notes |
|-----------------|-------------------|-----------------|
| **API Response Time (P95)** | < 200ms | Excluding external API calls |
| **API Response Time (P99)** | < 500ms | Peak load scenarios |
| **Throughput** | 1000 req/s | Per service instance |
| **Database Query Time (P95)** | < 50ms | Simple queries with indexes |
| **Cache Hit Rate (L1)** | > 40% | In-memory cache |
| **Cache Hit Rate (L2)** | > 80% | Redis cache |
| **Event Publish Latency (P95)** | < 10ms | Kafka fire-and-forget |
| **Service Availability** | > 99.9% | Monthly uptime target |
| **Error Rate** | < 1% | 4xx + 5xx errors |
**Tối ưu hóa Hiệu suất**:
- Multi-layer caching (L1: Memory, L2: Redis)
- Connection pooling cho database
- Pagination cho list endpoints (max 100 items)
- Database indexes cho frequently queried fields
- Async event publishing (fire-and-forget)
- CDN cho static assets (Next.js)
## Cân nhắc Bảo mật
**Authentication**:
- JWT với RS256 (asymmetric signing)
- Access token: 15 phút expiry
- Refresh token: 7 ngày expiry, rotation on use
- httpOnly cookies cho token storage
- MFA support (TOTP, backup codes)
**Authorization**:
- RBAC (Role-Based Access Control)
- ABAC (Attribute-Based Access Control)
- Permission format: `resource:action:scope`
- Permission caching (5 min TTL)
- Zero-trust device validation
**Network Security**:
- TLS 1.2+ enforcement
- HTTPS-only (HSTS headers)
- Rate limiting: 100 req/15min (standard), 10 req/hour (strict)
- CORS whitelist từ environment variables
- Network policies (Kubernetes)
**Data Protection**:
- AES-256-GCM encryption cho PII at rest
- bcrypt (cost 12) cho password hashing
- SHA-256 hashing cho tokens before storage
- Database encryption at rest (Neon)
- TLS in-transit cho tất cả connections
**Secrets Management**:
- Kubernetes secrets cho production
- Environment variables validation với Zod
- No hardcoded secrets in code
- Quarterly secret rotation
**Audit Trail**:
- Event sourcing cho tất cả auth events
- 7-year retention cho compliance
- Immutable audit logs
- Correlation IDs cho request tracing
## Triển khai
```mermaid
graph TD
subgraph "Kubernetes Cluster"
subgraph "Ingress"
LB[Load Balancer
External IP]
Traefik[Traefik Pods
Replicas: 2]
end
subgraph "Services"
IAM[IAM Service Pods
Replicas: 2-10 HPA]
Service1[Service 1 Pods
Replicas: 2-10 HPA]
Service2[Service 2 Pods
Replicas: 2-10 HPA]
end
subgraph "Infrastructure"
Redis[Redis Cluster
3 Masters + 3 Slaves]
Kafka[Kafka Cluster
3 Brokers]
end
subgraph "Observability"
Prom[Prometheus
Replicas: 2]
Loki[Loki
Replicas: 2]
Jaeger[Jaeger
Replicas: 2]
Grafana[Grafana
Replicas: 2]
end
end
subgraph "External"
DB[(Neon PostgreSQL
Serverless)]
end
LB --> Traefik
Traefik --> IAM
Traefik --> Service1
Traefik --> Service2
IAM --> Redis
IAM --> Kafka
IAM --> DB
Service1 --> Redis
Service1 --> Kafka
Service1 --> DB
Service2 --> Redis
Service2 --> Kafka
Service2 --> DB
IAM -.->|metrics| Prom
Service1 -.->|metrics| Prom
Service2 -.->|metrics| Prom
IAM -.->|logs| Loki
Service1 -.->|logs| Loki
Service2 -.->|logs| Loki
IAM -.->|traces| Jaeger
Service1 -.->|traces| Jaeger
Service2 -.->|traces| Jaeger
Prom --> Grafana
Loki --> Grafana
Jaeger --> Grafana
style LB fill:#1565c0,stroke:#fff,stroke-width:2px,color:#fff
style Traefik fill:#0f4c81,stroke:#fff,stroke-width:2px,color:#fff
style IAM fill:#283593,stroke:#fff,stroke-width:2px,color:#fff
style Service1 fill:#4527a0,stroke:#fff,stroke-width:2px,color:#fff
style Service2 fill:#4527a0,stroke:#fff,stroke-width:2px,color:#fff
style DB fill:#5e35b1,stroke:#fff,stroke-width:2px,color:#fff
style Redis fill:#ef6c00,stroke:#fff,stroke-width:2px,color:#fff
style Kafka fill:#2e7d32,stroke:#fff,stroke-width:2px,color:#fff
style Prom fill:#c62828,stroke:#fff,stroke-width:2px,color:#fff
style Loki fill:#d84315,stroke:#fff,stroke-width:2px,color:#fff
style Jaeger fill:#e65100,stroke:#fff,stroke-width:2px,color:#fff
style Grafana fill:#b71c1c,stroke:#fff,stroke-width:2px,color:#fff
```
### Chiến lược Triển khai
**Deployment Strategy**:
- Rolling updates (maxSurge: 1, maxUnavailable: 0)
- Zero-downtime deployments
- Blue-green deployment cho major releases
- Canary deployment cho high-risk changes
**Auto-scaling**:
- Horizontal Pod Autoscaler (HPA)
- Min replicas: 2
- Max replicas: 10
- Target CPU: 70%
- Target Memory: 80%
**Resource Allocation**:
| Service | Requests | Limits |
|---------|----------|--------|
| **Microservices** | 256Mi RAM, 250m CPU | 512Mi RAM, 500m CPU |
| **Traefik** | 512Mi RAM, 500m CPU | 1Gi RAM, 1000m CPU |
| **Redis** | 2Gi RAM, 1 CPU | 4Gi RAM, 2 CPU |
| **Prometheus** | 4Gi RAM, 2 CPU | 8Gi RAM, 4 CPU |
**Health Checks**:
- Liveness probe: `/health/live` (K8s restarts if fails)
- Readiness probe: `/health/ready` (K8s removes from LB if fails)
- Startup probe: `/health/live` (initial delay 30s)
**Environments**:
- **Local**: Docker Compose
- **Staging**: Kubernetes cluster (shared)
- **Production**: Kubernetes cluster (dedicated)
## Giám sát & Khả năng quan sát
### Chỉ số Chính
**Application Metrics**:
- `http_requests_total` - Total HTTP requests (counter)
- `http_request_duration_seconds` - Request duration (histogram)
- `http_requests_active` - Active requests (gauge)
- `cache_hits_total` / `cache_misses_total` - Cache performance
- `db_query_duration_seconds` - Database query duration
**Infrastructure Metrics**:
- CPU usage, Memory usage per pod
- Network I/O, Disk I/O
- Pod restart count
- Node resource utilization
**Business Metrics**:
- User registrations per day
- Login success/failure rate
- API usage by endpoint
- Error rate by service
**Kiểm tra Sức khỏe**:
- `/health/live` - Liveness probe (service running?)
- `/health/ready` - Readiness probe (ready for traffic?)
- `/metrics` - Prometheus metrics endpoint
**Alerting Rules**:
```yaml
# High error rate
- alert: HighErrorRate
expr: rate(http_requests_total{status=~"5.."}[5m]) > 0.05
for: 2m
severity: warning
# High latency
- alert: HighLatency
expr: histogram_quantile(0.95, http_request_duration_seconds_bucket) > 0.5
for: 5m
severity: warning
# Service down
- alert: ServiceDown
expr: up == 0
for: 1m
severity: critical
# High memory usage
- alert: HighMemoryUsage
expr: container_memory_usage_bytes / container_spec_memory_limit_bytes > 0.85
for: 5m
severity: warning
```
**Logging**:
- Structured JSON logging với Winston
- Correlation IDs cho request tracing
- Log levels: error, warn, info, debug
- Log aggregation với Loki
- 7 days retention
**Distributed Tracing**:
- OpenTelemetry instrumentation
- Jaeger backend
- Trace sampling: 10% in production, 100% in staging
- Span attributes: service, operation, user_id, correlation_id
## Tài liệu Liên quan
- [Event-Driven Architecture](./event-driven-architecture.md) - Kiến trúc hướng sự kiện
- [Caching Architecture](./caching-architecture.md) - Chiến lược caching
- [Security Architecture](./security-architecture.md) - Kiến trúc bảo mật
- [Observability Architecture](./observability-architecture.md) - Khả năng quan sát
- [Data Consistency Patterns](./data-consistency-patterns.md) - Mẫu nhất quán dữ liệu
- [Microservices Communication](./microservices-communication.md) - Giao tiếp microservices
## Tham khảo
- [Microservices Patterns](https://microservices.io/patterns/index.html) - Microservices pattern catalog
- [Twelve-Factor App](https://12factor.net/) - Best practices for cloud-native apps
- [C4 Model](https://c4model.com/) - Software architecture diagrams
- [Kubernetes Documentation](https://kubernetes.io/docs/) - Kubernetes official docs
- [Traefik Documentation](https://doc.traefik.io/traefik/) - Traefik official docs
---
**Cập nhật Lần cuối**: 2026-01-14
**Tác giả**: GoodGo Architecture Team
**Người review**: GoodGo Development Team
## Quick Tips
### Mermaid Common Issues
- **Arrow Syntax**: Use `-->` for solid arrows, `-.->` for dotted arrows.
- **Node IDs**: Avoid spaces/special chars in IDs (e.g., `Node-A` not `Node A`).
- **Subgraphs**: Ensure `subgraph` names are unique and descriptive.
### Color Pattern Quick Reference
| Element | Dark Color | Text Color |
|---------|------------|------------|
| **Blue (Primary)** | `#0f4c81` | `#ffffff` |
| **Purple (DB)** | `#5e35b1` | `#ffffff` |
| **Orange (Cache)** | `#ef6c00` | `#ffffff` |
| **Green (Success)** | `#2e7d32` | `#ffffff` |
| **Red (Alert)** | `#c62828` | `#ffffff` |
### Visual Indicators
- ✅ **Khuyên dùng**
- ❌ **Không khuyên dùng**
- ⚠️ **Cảnh báo**