¿Cómo evitamos hacer dos búsquedas iguales?

Guillermo Martinez
Despegar Ingeniería
2 min readFeb 8, 2021

--

En Despegar utilizamos una arquitectura basada en microservicios, y muchas de nuestras aplicaciones son sistemas distribuidos.

Dentro del stack de aplicaciones está la encargada de resolver la búsqueda de vuelos que obtiene los mismos de proveedores externos.

Vayamos con un ejemplo y hagámoslo personal, supongamos que Fulano y Mengano quieren hacer el mismo viaje y realizan la misma búsqueda al mismo instante, eso dispara 2 consultas idénticas contra nuestros servicios de búsqueda, por lo que resultaría en dos consultas a los proveedores, y si Mengano hace la misma búsqueda que Fulano pero 5 minutos después qué pasa? tiene el mismo efecto que el ejemplo anterior.

Entonces nos preguntamos: cómo evitamos en un sistema distribuido duplicar consultas a los proveedores cuando:

  • dos usuarios hacen la misma búsqueda al mismo tiempo?
  • dos usuarios hacen la misma búsqueda pero con diferencias de minutos?

Pero tanto problema por dos búsquedas? Si, porque donde decimos dos, pueden ser cien, o miles y tenemos que prepararnos para escenarios no tan felices.

¿Cómo las solucionamos?

  • Lock distribuido, para evitar ir al proveedor con la misma búsqueda en simultáneo.
  • Caché, para reutilizar una búsqueda.

La respuesta es sí, pero no te vayas que te contamos brevemente qué es cada cosa y porqué la respuesta es afirmativa.

¿Qué es un lock?
Un lock, para simplificar, es un mecanismo que se ocupa de sincronizar el acceso a un recurso, y un lock distribuido entonces que es? tiene la misma funcionalidad, pero con la complejidad de mantener una coordinación entre los nodos que forman parte.

¿Qué es una caché?
Es un mecanismo de almacenamiento temporal para que futuras consultas se realicen más rápido y no tengamos la necesidad de hacer el pedido a los proveedores.

Este combo nos trae algunos beneficios:

  • Orden en la ejecución de pedidos.
  • Eficiencia: evitamos hacer cosas de más y repetidas.
  • Integridad: soporte de concurrencia para evitar datos corruptos, pérdida de los mismos e inconsistencia entre otros.
  • Reducir tiempos de respuesta ante consultas repetidas.
  • Evitar sobrecargar a proveedores externos.

Si después de leer esto te dieron ganas de seguir investigando, las tecnologías que nos ayudan son: zookeeper con curator para el lock distribuido y cassandra para la caché.

Autores: Lucas Cabello, Tomas Luczasty y Guillermo Martinez

--

--