Skip to content

ADR-0001. S3/Minio là backend object-storage duy nhất hoạt động

FieldValue
StatusAccepted
Date2026-03-01
DecidersPhat Nguyen
Supersedes-

Bối cảnh

  • Các bản nháp wiki trước mô tả một model "dual storage" (S3 local disk) với một StaticAssetComponent presigned-URL.
  • Phần nối StaticAssetComponent đó (presigned URL, tùy chọn static-asset dựa trên MetaLink) có mặt trong application-asset.component.ts nhưng đã được comment lại - không được bind lúc chạy.
  • Một backend local-disk sẽ phân kỳ giữa các replica (không có shared volume trong K8s) và phá vỡ horizontal scaling.
  • Đường dẫn code hoạt động duy nhất khởi tạo một BunS3Helper từ APP_ENV_S3_* và hardcode storageType: 's3' trên mọi MetaLink.

Quyết định

Chúng tôi sẽ chỉ hỗ trợ object storage S3/Minio qua BunS3Helper, bind dưới APPLICATION_S3_STORAGE_HELPER. Đường dẫn StaticAssetComponent local-disk / presigned-URL giữ ở trạng thái comment và không được tài liệu hóa là hoạt động.

Hệ quả

ƯuNhược
Một đường dẫn storage → suy luận đơn giản hơn, ít env var hơnKhông có fallback offline/dev-disk - dev cần Minio
Replica stateless - bất kỳ pod nào cũng phục vụ bất kỳ object nàoPhụ thuộc vào một endpoint tương thích S3 luôn sẵn sàng
storageType thực tế là hằng số s3Bật lại presigned URL cần uncomment + một ADR

Các phương án đã cân nhắc

Phương ánƯuNhượcLý do loại bỏ
Backend dual S3 + local-diskĐơn giản cho devPhân kỳ replica, không có shared volume, nhiều config hơnMong manh về vận hành trong K8s
StaticAssetComponent presigned-URL ngayGiảm tải streaming khỏi appCần thêm phần nối + sự ràng buộc với MetaLink chưa cần thiếtHoãn lại - giữ code đã comment đến khi cần

Tham chiếu

  • packages/asset/src/components/application-asset.component.ts (BunS3Helper hoạt động; StaticAssetComponent đã comment)
  • packages/asset/src/controllers/asset/asset.controller.ts (storageType: 's3')
  • packages/core/src/common/environments.ts (APP_ENV_S3_*)

Proprietary and Confidential. Unauthorized copying, distribution, or use of this software is strictly prohibited.