ADR 0013: Môi trường dev mô phỏng đầy đủ các thành phần như sản xuất
1. Tiêu đề quyết định (Title)
Môi trường dev chạy đầy đủ các thành phần như sản xuất (cân tải TLS, nhiều ingest và worker, Redis có mật khẩu, hai instance VictoriaMetrics, vmalert), không dùng bản tạm hoặc bộ nhớ trong.
2. Trạng thái (Status)
Chấp nhận (Accepted) ngày 01/10/2026 bởi Product Owner. Ghi nhận chỉ đạo của người dùng đã được thực hiện. Redis ở dev chỉ phục vụ phát triển, không đại diện cho độ sẵn sàng cao của sản xuất.
Ngày quyết định: 30/09/2026 (ngày người dùng chỉ đạo).
3. Ngữ cảnh (Context)
- Người dùng chỉ đạo: "trên dev em cũng phải mô phỏng đầy đủ các thành phần như prod nhé, đừng làm tạm".
- Trước đó nhiều đường đi chỉ được kiểm thử bằng bộ nhớ hoặc httptest (adapter VictoriaMetrics, presence, giới hạn tốc độ ở bộ nhớ tiến trình). Như vậy che khuất lỗi chỉ xuất hiện khi tách tiến trình, dùng Redis và VM thật (xem
docs/11). - Access Hub thật chưa có phần giám sát (HUB-*), nên dev dùng
mockhubthay thế.
4. Quyết định (Decision)
Dev chạy cấu trúc giống sản xuất (nguồn: docs/09-deployment.md, deploy/dev/devctl.sh):
| Thành phần | Dev |
|---|---|
| Cân tải TLS | nginx, 127.0.0.1:8443 |
| Ingest | hai tiến trình, cổng 18443 và 18444 |
| Worker | hai tiến trình |
| Admin API | 127.0.0.1:9101 |
| Redis | master 6380 có requirepass, AOF everysec cộng RDB, noeviction, mật khẩu ở tệp 0600 ngoài repo. devctl.sh còn dựng một replica 6381 (chỉ để thử sao chép, không phải HA, không Sentinel). Replica là bắt buộc ở sản xuất (docs/09, docs/14), ở dev có thể bỏ |
| VictoriaMetrics | vm-raw 8428 (30 ngày), vm-long 8429 (400 ngày) |
| vmalert | 8880, rollup 5 phút và 1 giờ |
| Access Hub | mockhub 127.0.0.1:8090 (chỉ dev, thay thế tới khi HUB-* xong) |
| Agent | ghim CA dev |
Điều khiển bằng devctl.sh. Mọi thành phần chỉ nghe loopback. Phạm vi áp dụng: kiểm thử tích hợp và soak trên máy dev.
5. Cơ sở lý luận (Rationale)
Ưu điểm:
- Phát hiện sớm lỗi chỉ có khi tách tiến trình và dùng kho thật (ví dụ tách vai trò, lease, đồng bộ registry).
- Cùng cấu hình, cùng mã, giảm khác biệt dev và sản xuất, làm nền cho hướng dẫn triển khai thật.
- Kiểm thử hai tenant và kiểm thử tải chạy trên đường đi thật.
Nhược điểm chấp nhận được:
- Tốn tài nguyên và thời gian dựng hơn so với chạy một tiến trình.
- Dev vẫn khác sản xuất ở các điểm đã biết: Redis chưa Sentinel, VM chưa snapshot theo lịch, Access Hub là mock, TLS dùng CA dev (
docs/09).
6. Ảnh hưởng (Consequences)
- Tích cực: độ tin cậy kiểm thử cao hơn,
devctl.shlà tài liệu sống về cấu trúc sản xuất. - Rủi ro: dễ nhầm dev là bằng chứng sản xuất. Kết quả dev không thay kiểm thử tải thật (X-5, X-7, X-9).
- Phải giữ dev không bị gián đoạn khi làm việc khác trên máy (không khởi động lại dịch vụ, không đụng dữ liệu Redis và VM khi không cần).
- Việc tiếp theo: hướng dẫn triển khai sản xuất (
docs/14, đang được viết), đo tài nguyên dev, thaymockhubbằng Access Hub thật khi HUB-* xong.
7. Các phương án được đánh giá (Considered Options)
| Phương án | Ưu điểm | Nhược điểm | Kết luận |
|---|---|---|---|
Dev một tiến trình, kho trong bộ nhớ (tsdb.url trống) | Nhanh, ít phụ thuộc | Che lỗi khi tách tiến trình, không kiểm chứng VM và Redis thật | Vẫn giữ cho kiểm thử đơn vị, không dùng cho tích hợp |
| Dev mô phỏng đầy đủ | Sát sản xuất | Tốn tài nguyên | Chọn (đề xuất, theo chỉ đạo người dùng) |
| Dev trên Docker Compose | Dễ tái tạo | Không dùng ở đây: máy dev chạy trực tiếp binary theo mô hình unit systemd của sản xuất (đề xuất, chưa xác nhận lý do lựa chọn ban đầu) | Không chọn |
8. Tài liệu liên quan (Related Artifacts)
docs/09-deployment.md,deploy/dev/devctl.sh,deploy/systemd/- ADR: 0012, 0014
- L1 HLD mục 8 (phụ thuộc mockhub)
9. Phê duyệt (Approvals)
| Tên | Vai trò | Ghi chú |
|---|---|---|
| chưa chỉ định | Enterprise Architect | Chưa duyệt |
| chưa chỉ định | Solution Architect | Chưa duyệt |
| Thiện Phan Ngọc | Product Owner | Chấp nhận 01/10/2026. Redis dev chỉ để phát triển |