Vista General de Almacenamiento
GoPotency requiere un soporte de almacenamiento para persistir los registros de las solicitudes y gestionar los bloqueos distribuidos. La elección del almacenamiento afecta el rendimiento, la escalabilidad y la durabilidad de tu sistema de idempotencia.
Rol del Almacenamiento
Sección titulada «Rol del Almacenamiento»El soporte de almacenamiento maneja dos tareas críticas:
- Caché de Resultados: Almacenar el cuerpo de la respuesta, el código de estado y los encabezados para que puedan ser repetidos.
- Control de Concurrencia: Manejar bloqueos atómicos para asegurar que dos solicitudes idénticas no comiencen a procesarse exactamente al mismo tiempo.
Eligiendo un Soporte
Sección titulada «Eligiendo un Soporte»| Soporte | Mejor Caso de Uso | ¿Distribuido? | Complejidad |
|---|---|---|---|
| En Memoria | Desarrollo, Pruebas, Nodo Único | No | Muy Baja |
| Redis | APIs Distribuidas de Gran Escala | Sí | Media |
| SQL | Postgres/SQLite, dependencias mínimas | Sí | Media |
| GORM | Proyectos que ya usan GORM | Sí | Baja |
Interfaz
Sección titulada «Interfaz»Si necesitas soportar una base de datos diferente (por ejemplo, MongoDB, DynamoDB), puedes implementar la interfaz Storage:
type Storage interface { Get(ctx context.Context, key string) (*idempotency.Record, error) Set(ctx context.Context, record *idempotency.Record, ttl time.Duration) error Delete(ctx context.Context, key string) error Exists(ctx context.Context, key string) (bool, error) TryLock(ctx context.Context, key string, ttl time.Duration) (bool, error) Unlock(ctx context.Context, key string) error Close() error}