- HERENCIA-SIMCO.md actualizado con directivas v3.7 y v3.8 - Actualizaciones de configuracion Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
147 lines
3.3 KiB
Markdown
147 lines
3.3 KiB
Markdown
---
|
|
id: "INT-005"
|
|
title: "Integracion Storage Providers"
|
|
type: "Integration"
|
|
status: "Implemented"
|
|
priority: "P1"
|
|
provider: "S3/R2/MinIO"
|
|
category: "Storage"
|
|
multi_tenant: true
|
|
version: "1.0.0"
|
|
created_date: "2026-01-07"
|
|
updated_date: "2026-01-10"
|
|
---
|
|
|
|
# INT-005: Storage Integration
|
|
|
|
## Metadata
|
|
| Campo | Valor |
|
|
|-------|-------|
|
|
| Codigo | INT-005 |
|
|
| Proveedor | AWS S3, Cloudflare R2, MinIO |
|
|
| Tipo | Storage |
|
|
| Estado | Implementado |
|
|
| Multi-tenant | Si |
|
|
| Fecha integracion | 2026-01-10 |
|
|
|
|
---
|
|
|
|
**Documentacion completa:** Ver [SAAS-011-storage.md](../01-modulos/SAAS-011-storage.md)
|
|
|
|
## Resumen
|
|
|
|
Integracion multi-proveedor para almacenamiento de archivos.
|
|
|
|
## Proveedores Soportados
|
|
|
|
- AWS S3
|
|
- Cloudflare R2
|
|
- MinIO (self-hosted)
|
|
|
|
## Caracteristicas
|
|
|
|
- Upload directo con URLs pre-firmadas
|
|
- Cuotas de almacenamiento por plan
|
|
- Tipos MIME permitidos configurables
|
|
- Metadata de archivos en base de datos
|
|
|
|
## Configuracion
|
|
|
|
```env
|
|
# AWS S3
|
|
STORAGE_PROVIDER=s3
|
|
AWS_S3_BUCKET=my-bucket
|
|
AWS_S3_REGION=us-east-1
|
|
AWS_ACCESS_KEY_ID=...
|
|
AWS_SECRET_ACCESS_KEY=...
|
|
|
|
# Cloudflare R2
|
|
STORAGE_PROVIDER=r2
|
|
R2_ACCOUNT_ID=...
|
|
R2_ACCESS_KEY_ID=...
|
|
R2_SECRET_ACCESS_KEY=...
|
|
R2_BUCKET=my-bucket
|
|
|
|
# MinIO
|
|
STORAGE_PROVIDER=minio
|
|
MINIO_ENDPOINT=localhost:9000
|
|
MINIO_ACCESS_KEY=...
|
|
MINIO_SECRET_KEY=...
|
|
MINIO_BUCKET=my-bucket
|
|
```
|
|
|
|
## Rate Limits
|
|
| Limite | Valor | Accion si excede |
|
|
|--------|-------|------------------|
|
|
| Requests/seg | 3500 (S3 PUT), 5500 (S3 GET) | Retry con backoff exponencial |
|
|
| Tamanio archivo | Segun plan del tenant | Rechazar upload |
|
|
|
|
## Manejo de Errores
|
|
| Codigo | Descripcion | Accion |
|
|
|--------|-------------|--------|
|
|
| 400 | Bad Request | Log + no retry |
|
|
| 401 | Unauthorized | Renovar credenciales |
|
|
| 403 | Forbidden | Verificar permisos bucket |
|
|
| 429 | Rate Limited | Backoff exponencial |
|
|
| 500 | Server Error | Retry con backoff |
|
|
|
|
## Fallbacks
|
|
|
|
### Estrategia Storage Fallback
|
|
|
|
| Escenario | Estrategia |
|
|
|-----------|------------|
|
|
| S3 no disponible | Fallback automatico a R2 |
|
|
| R2 no disponible | Fallback a MinIO local |
|
|
| Todos fallan | Encolar upload para retry posterior |
|
|
| Cuota excedida | Rechazar con mensaje claro al usuario |
|
|
|
|
### Multi-region
|
|
|
|
- **Primary:** us-east-1 (S3)
|
|
- **Failover:** eu-west-1 (R2 o S3 EU)
|
|
- **Replicacion:** Asincrona cada 5 minutos para archivos criticos
|
|
|
|
### Configuracion Failover
|
|
|
|
```typescript
|
|
const storageProviders = [
|
|
{ name: 's3', priority: 1, region: 'us-east-1' },
|
|
{ name: 'r2', priority: 2 },
|
|
{ name: 'minio', priority: 3, endpoint: 'localhost:9000' }
|
|
];
|
|
```
|
|
|
|
### Circuit Breaker
|
|
|
|
- Umbral apertura: 3 fallos consecutivos
|
|
- Timeout semi-abierto: 30 segundos
|
|
- Fallback: Siguiente provider en prioridad
|
|
|
|
## Multi-tenant
|
|
- Credenciales: Por tenant (cada tenant puede tener su propio bucket/proveedor)
|
|
- Configuracion: Por tenant via tenant_config
|
|
- Aislamiento: Prefijo tenant_id en todas las operaciones (path: /{tenant_id}/...)
|
|
|
|
## Testing
|
|
### Sandbox/Test Mode
|
|
- MinIO local para desarrollo
|
|
- Buckets de prueba separados de produccion
|
|
- Fixtures disponibles para testing unitario
|
|
|
|
## Monitoreo
|
|
| Metrica | Descripcion | Alerta |
|
|
|---------|-------------|--------|
|
|
| Latencia | Tiempo de respuesta | >2s |
|
|
| Errores | Tasa de errores | >1% |
|
|
| Disponibilidad | Uptime del servicio | <99.9% |
|
|
|
|
## Referencias
|
|
|
|
- Modulo relacionado: SAAS-011-storage.md
|
|
|
|
---
|
|
|
|
**Ultima actualizacion:** 2026-01-10
|
|
**Version:** 1.0.0
|