Dale al cliente una clave de idempotencia, guárdala junto al resultado de la primera escritura correcta y devuelve ese resultado guardado ante cualquier repetición. Impón la unicidad a nivel de base de datos para que los duplicados concurrentes choquen en vez de escribir dos veces. Acota las claves por cliente, cadúcalas tras una ventana razonable y usa la clave natural de negocio, como el id de pedido, como ancla de deduplicación siempre que exista.
Por qué lo preguntan los entrevistadores
Toda política de reintentos es peligrosa sin idempotencia, así que esta pregunta prueba si sabes cerrar el círculo. Los entrevistadores buscan la restricción de unicidad a nivel de base de datos, porque las comprobaciones a nivel de aplicación pierden la carrera bajo concurrencia. Las respuestas fuertes también resuelven el caso en vuelo: qué debería hacer la segunda petición mientras la primera sigue ejecutándose.
Cómo estructurar tu respuesta
- Introduce la clave de idempotencia y de dónde sale.
- Guarda la clave, la huella de la petición y la respuesta juntas en una transacción.
- Impón la unicidad en la base de datos para que las carreras fallen de forma ruidosa.
- Di qué pasa ante una repetición mientras la primera llamada sigue en vuelo.
- Menciona el alcance y la caducidad de las claves.
Ejemplo de respuesta
El cliente genera una clave de idempotencia, normalmente un UUID, y la manda como cabecera. En el servidor mantengo una tabla indexada por id de cliente más esa clave con una restricción de unicidad, y escribo la clave y la respuesta en la misma transacción que la escritura de negocio. Una repetición entonces choca con la restricción de unicidad o encuentra la fila guardada y simplemente reproduce la respuesta original, así que los reintentos salen gratis. Importan dos detalles. Primero, la unicidad tiene que vivir en la base de datos, porque si haces un select y luego un insert, dos reintentos concurrentes pasarán ambos la comprobación. Segundo, hay que decidir qué hacer cuando la segunda petición llega mientras la primera sigue ejecutándose. Nosotros devolvíamos 409 con un Retry-After en lugar de bloquear, lo que mantenía sano el pool de conexiones. También guardo un hash del cuerpo de la petición para que reutilizar una clave con contenido distinto se rechace en vez de devolver la respuesta equivocada en silencio.
¿Tienes esta entrevista a la vuelta de la esquina? GhostPilot escucha tu llamada en vivo, detecta la pregunta en cuanto la hacen y pone una respuesta estructurada en tu pantalla en tiempo real. Pruébalo en tu próxima entrevista de práctica, o coge un Session Pass de $29, sin suscripción, para la de verdad.
Mira cómo funcionaPreguntas de seguimiento que puedes esperar
- ¿Qué devuelves si llega la misma clave con una carga útil distinta?
- ¿Cuánto tiempo conservarías las claves de idempotencia y por qué?
- ¿Cómo funciona esto cuando la escritura abarca dos servicios?
Más preguntas para Site Reliability Engineer
Tu entrevistador hará su propia versión de esta. Pega la descripción real del puesto en el Question Predictor gratuito y obtén las 20 preguntas que ese puesto tiene más probabilidades de hacerte, con lo que cada una busca en realidad.
Predecir mis preguntas