| Chemical master | 20.000 records |
| Inventory transactions | ~912.500 records |
| Workflow history | ~3.000.000 records |
| Incident records | ~100.000 records |
| Tổng DB (ước tính) | 50–100 GB |
| Storage cần (incl. backup) | 500 GB+ |
| Layer | Công nghệ | Lý do chọn | Ghi chú |
|---|---|---|---|
| Load Balancer | HAProxy + Keepalived | Virtual IP, active-passive, health check L4/L7 | Open Source |
| Reverse Proxy | Nginx | SSL termination, static file, gzip, rate limit | Open Source |
| Application | Java (Spring Boot) / .NET / Node.js | Ecosystem mature, thread pool, tái sử dụng connection pool | Theo ngôn ngữ team |
| Workflow Engine | Camunda BPM / Activiti | BPMN, audit log tích hợp, UI quản trị flow | Tùy chọn |
| Database | PostgreSQL 16 | ACID, Partition Table, JSONB, Full Text Search, Streaming Replication | Khuyến nghị |
| Cache / Session | Redis 7 (Sentinel) | Session, workflow state, dashboard cache, pub/sub | Open Source |
| Search (tương lai) | Elasticsearch | Full-text search SDS/PDF, log analytics | Giai đoạn 2 |
| Message Queue | RabbitMQ | Async jobs, crawler, notification, đơn giản hơn Kafka cho quy mô này | Giai đoạn 2 |
| OS | Ubuntu 22.04 LTS / Rocky Linux 9 | LTS 5 năm, security patches, cộng đồng rộng | Khuyến nghị |
| Container (tùy chọn) | Docker + Docker Compose | Môi trường nhất quán, rollback nhanh, không cần k8s ở quy mô này | Tùy chọn |
| Monitoring | Prometheus + Grafana | Metrics server, alert, dashboard tổng quan | Khuyến nghị |
| Log Management | Loki + Promtail hoặc ELK | Tập trung log, tìm kiếm nhanh | Tùy chọn |
| Server | Vai trò | CPU | RAM | SSD |
|---|---|---|---|---|
| APP | Application + Nginx | 16 Core | 64 GB | 1 TB NVMe |
| DB | PostgreSQL + Redis | 24 Core | 128 GB | 2 TB NVMe RAID1 |
| BACKUP | Backup + ETL + Reporting | 8 Core | 32 GB | 2 TB |
⚠️ SPOF tại App Server — không phù hợp hệ thống vận hành nhà máy critical
| Server | Vai trò | CPU | RAM | SSD |
|---|---|---|---|---|
| LB01/LB02 | HAProxy + Keepalived (VIP) | 4 Core | 8 GB | 256 GB |
| APP01/APP02 | Application + Nginx (cluster) | 16 Core | 64 GB | 1 TB NVMe |
| REDIS01/02 | Redis Sentinel | 4 Core | 16 GB | 256 GB |
| DB01 (Primary) | PostgreSQL Primary | 24 Core | 128 GB | 2 TB NVMe RAID1 |
| DB02 (Standby) | PostgreSQL Streaming Replica | 24 Core | 128 GB | 2 TB NVMe RAID1 |
| BACKUP | Backup + ETL + Monitoring | 8 Core | 32 GB | 4 TB HDD |
✓ Không có SPOF — failover tự động DB và App
| # | Tên Server | CPU | RAM | Storage | Network | Vai trò chính |
|---|---|---|---|---|---|---|
| 1 | LB01 | 4 Core (Intel/AMD) | 8 GB ECC | 256 GB SSD | 2× 1GbE | HAProxy Active + Keepalived |
| 2 | LB02 | 4 Core | 8 GB ECC | 256 GB SSD | 2× 1GbE | HAProxy Passive + Keepalived |
| 3 | APP01 | 16 Core (Xeon/EPYC) | 64 GB ECC | 1 TB NVMe | 2× 10GbE | Application + Nginx + Scheduler |
| 4 | APP02 | 16 Core | 64 GB ECC | 1 TB NVMe | 2× 10GbE | Application + Nginx (Standby/Scale) |
| 5 | REDIS01 | 4 Core | 16 GB ECC | 256 GB SSD | 2× 10GbE | Redis Master (Sentinel) |
| 6 | REDIS02 | 4 Core | 16 GB ECC | 256 GB SSD | 2× 10GbE | Redis Replica (Sentinel) |
| 7 | DB01 | 24 Core (Xeon/EPYC) | 128 GB ECC | 2× 2TB NVMe (RAID1) | 2× 10GbE | PostgreSQL Primary |
| 8 | DB02 | 24 Core | 128 GB ECC | 2× 2TB NVMe (RAID1) | 2× 10GbE | PostgreSQL Standby + Read Replica |
| 9 | BACKUP | 8 Core | 32 GB | 4 TB HDD RAID5 | 2× 1GbE | Backup + Monitoring + ETL (future) |
| # | Server | CPU | RAM | Storage | Vai trò |
|---|---|---|---|---|---|
| 1 | APP | 16 Core | 64 GB | 1 TB NVMe | Nginx + Application + Redis + Scheduler |
| 2 | DB | 24 Core | 128 GB | 2 TB NVMe RAID1 | PostgreSQL Primary |
| 3 | BACKUP | 8 Core | 32 GB | 2 TB | Backup + ETL + Reporting |
| Nguồn | Đích | Port | Ghi chú |
|---|---|---|---|
| Internet/Intranet | LB01/LB02 (DMZ) | 80, 443 | Chỉ mở HTTP/HTTPS |
| DMZ | APP VLAN | 8080 (app port) | Forward từ LB vào App |
| APP VLAN | DB VLAN | 5432 (PostgreSQL) | App → DB only |
| APP VLAN | APP VLAN | 6379 (Redis) | App → Redis |
| DB VLAN | DB VLAN | 5432 | Replication DB01 → DB02 |
| Backup VLAN | DB VLAN | 5432 | pg_dump / WAL archive |
| Admin IP | All VLAN | 22 (SSH) | Whitelist IP quản trị |
| APP VLAN | Backup VLAN | 9090 (Prometheus) | Metrics scraping |
| Concurrent users | 160 |
| Avg req/s per user | 2 req/s |
| Peak throughput | 320 req/s |
| Capacity / 16-core node | 150–250 req/s |
| Số App node cần | 2 node (headroom 2×) |
| Safe capacity (2 node) | 300–500 req/s |
Headroom ~2–3× giúp hấp thụ traffic spike và đảm bảo UX mượt mà khi có spike
| JVM / App heap | 16–24 GB |
| OS + buffer cache | 8 GB |
| Connection pools | 4 GB |
| Metaspace / off-heap | 4 GB |
| Safety margin | 12 GB |
| Tổng khuyến nghị | 64 GB / node |
| shared_buffers | 32 GB (25% RAM) |
| effective_cache_size | 96 GB (75% RAM) |
| work_mem | 256 MB |
| max_connections | 200 (dùng PgBouncer pool) |
| DB size 5 năm | 50–100 GB |
| WAL + index overhead | ×2 = ~200 GB |
| Storage RAID1 mỗi node | 2 TB NVMe |
| Session (160 users × 50 KB) | ~8 MB |
| Dashboard cache | ~500 MB |
| Workflow state cache | ~1 GB |
| Pub/Sub buffer | ~500 MB |
| Tổng ước tính | ~2–4 GB dùng thực |
| RAM Redis node | 16 GB (dư rộng) |
| Loại | Tần suất | Retention | Phương thức |
|---|---|---|---|
| Full DB backup | 1 lần/ngày (02:00 AM) | 30 ngày | pg_dump / pgBackRest |
| WAL archive | 15 phút | 7 ngày | WAL-G / pgBackRest |
| Application config | 1 lần/tuần | 90 ngày | rsync |
| Offsite backup | 1 lần/ngày | 7 bản | rsync → NAS ngoài |
DB Streaming Replication đảm bảo RPO < 1 phút trong trường hợp failover. WAL archive đảm bảo RPO < 15 phút cho các lỗi data corruption.
Tool: Prometheus + node_exporter + Grafana
Tool: Micrometer + Prometheus
Tool: postgres_exporter + pgBadger
| Metric | Warning | Critical | Action |
|---|---|---|---|
| CPU Usage (App) | > 70% | > 90% | Scale app node / investigate |
| RAM Usage | > 80% | > 95% | Review cache / heap settings |
| Disk Usage | > 75% | > 90% | Expand / archive old data |
| DB Replication Lag | > 30s | > 120s | Investigate network / DB load |
| Request Error Rate | > 1% | > 5% | Check app logs / rollback |
| Response time p95 | > 1s | > 3s | Optimize query / cache |
| # | Rủi ro | Mức độ | Biện pháp giảm thiểu |
|---|---|---|---|
| 1 | DB Primary down, ảnh hưởng toàn bộ hệ thống | HIGH | DB02 Standby + Patroni/repmgr auto failover < 30s |
| 2 | App server down, request bị lỗi | MEDIUM | 2 App node, HAProxy health check tự loại bỏ node lỗi |
| 3 | Redis down, mất session | MEDIUM | Redis Sentinel failover tự động < 10s; session store có TTL |
| 4 | Data corruption / xóa nhầm | HIGH | PITR backup (Point-in-Time Recovery) với WAL archive 7 ngày |
| 5 | Storage đầy trong 5 năm | LOW | 2TB NVMe RAID1 >> 100GB data; thêm disk hoặc archive cold data |
| 6 | Performance giảm khi triển khai crawler/ETL | MEDIUM | Chạy crawler trên BACKUP server; sử dụng RabbitMQ queue không đồng bộ |
| 7 | LB single point of failure | LOW | HAProxy Active-Passive với Keepalived Virtual IP, failover < 2s |
Với hệ thống quản lý hóa chất vận hành nhà máy, tính liên tục nghiệp vụ là yếu tố tối quan trọng. Phương án HA loại bỏ mọi điểm lỗi đơn, đảm bảo SLA 99.9%, phục vụ 160 concurrent users với headroom ~2–3× cho growth trong 3–5 năm.