Pregunta de entrevista para Ingeniero de software

¿Cómo diseñarías un limitador de tasa para una API pública?

Qué evalúa el entrevistador, cómo estructurar tu respuesta y un ejemplo hablado que puedes adaptar.

Respuesta rápida

Elige primero la dimensión del límite, normalmente la clave de API y no la IP, y luego el algoritmo: token bucket para permitir ráfagas, ventana deslizante para una aplicación más suave. Guarda los contadores en un almacén compartido como Redis para que todas las instancias coincidan, usando incrementos atómicos con expiración. Devuelve 429 con una cabecera Retry After y la cuota restante, y falla en abierto si el propio limitador no está disponible, para que no pueda tumbarte la API.

Por qué lo preguntan los entrevistadores

Esto pone a prueba el pensamiento de sistemas en un problema pequeño y acotado. El entrevistador quiere que nombres el problema del estado distribuido, porque los contadores por instancia no imponen un límite global, además de una elección de algoritmo con motivo, semántica HTTP correcta al rechazar, y criterio operativo sobre qué pasa cuando el almacén de contadores está caído. También revela si piensas en la experiencia del cliente al ser limitado.

Cómo estructurar tu respuesta

  • Elige la dimensión de la clave y justifícala.
  • Elige un algoritmo y di qué comportamiento produce.
  • Explica cómo se mantienen consistentes los contadores entre instancias.
  • Define la respuesta y el modo de fallo del propio limitador.

Ejemplo de respuesta

Ejemplo hablado, en primera persona

Empiezo por qué estoy limitando por unidad, y para una API pública eso es la clave de API, no la IP, porque los clientes detrás de un mismo NAT no deberían tumbarse entre ellos. Después el algoritmo. Token bucket es mi opción por defecto, porque deja que un cliente haga una ráfaga pequeña, que es como se comportan las integraciones reales: se despiertan, lanzan veinte peticiones y luego se callan una hora. Un log de ventana deslizante es más preciso pero guarda más por clave. La parte importante es que el contador tiene que ser compartido, porque si cada una de mis seis instancias lleva su propia cuenta el límite real es seis veces el que anuncié, así que Redis con un incremento atómico y una expiración, o un script Lua pequeño cuando necesito la comprobación y el decremento juntos. Al rechazar devuelvo 429 con Retry After y la cuota restante en cabeceras, porque un cliente que puede echarse atrás bien deja de machacarme. Y fallo en abierto, porque un limitador que tumba la API ha hecho más daño que el abuso que evitaba.

¿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 funciona

Preguntas de seguimiento que puedes esperar

  • ¿Cómo le darías a un cliente un límite temporalmente más alto?
  • ¿Qué cambia si necesitas el límite aplicado en el borde?
  • ¿Cómo limitarías de forma distinta los endpoints caros?

Más preguntas para Ingeniero de software

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

Ensaya las preguntas difíciles antes de que te las hagan

Practica con un copiloto en vivo y entra preparado. Un Session Pass de $29 te lleva a través de la entrevista sin suscripción y sin ataduras.

Consigue GhostPilot