Volver al blog
General

Arquitectura Distribuida y Consistencia Robusta

El panorama contemporáneo de la ingeniería de datos y la inteligencia artificial se caracteriza por una demanda creciente de sistemas de búsqueda y gestión de m...

17 de marzo de 20265 min read

El panorama contemporáneo de la ingeniería de datos y la inteligencia artificial se caracteriza por una demanda creciente de sistemas de búsqueda y gestión de memoria que trasciendan las capacidades tradicionales. La fragmentación de herramientas —bases de datos relacionales, almacenes de documentos, motores de búsqueda full-text, bases de datos vectoriales y bases de datos de grafos— impone una carga significativa en la arquitectura, la operación y la consistencia de los datos. En este contexto, Antfly emerge como una solución integral, un motor de búsqueda y base de datos de documentos distribuida escrita en Go, diseñada para consolidar la búsqueda full-text, vectorial y de grafos en una plataforma unificada y eficiente.

Antfly aborda esta complejidad ofreciendo un enfoque multimodal para la indexación y la recuperación de información. Su diseño busca simplificar la construcción de aplicaciones que requieren una comprensión profunda y contextualizada de los datos, desde sistemas de recuperación aumentada (RAG) para modelos de lenguaje grandes (LLMs) hasta motores de recomendación y análisis de grafos complejos. La innovación de Antfly reside en su capacidad para integrar estas funcionalidades dispares bajo un único paraguas arquitectónico, minimizando la latencia, optimizando los recursos y proporcionando una experiencia de desarrollo cohesionada.

Arquitectura Distribuida y Consistencia Robusta

La solidez y el rendimiento de Antfly se basan en una serie de decisiones arquitectónicas fundamentales que priorizan la consistencia, la escalabilidad y la eficiencia en entornos distribuidos.

El Cimiento en Go

La elección de Go como lenguaje de programación principal para Antfly es deliberada y estratégica. Go ofrece características intrínsecas que son ideales para la construcción de sistemas distribuidos de alto rendimiento:

  • Concurrencia Simplificada: El modelo de concurrencia de Go, basado en goroutines y canales, permite el diseño y la implementación de operaciones paralelas de manera eficiente y segura. Esto es crucial para manejar simultáneamente la ingesta de datos, la indexación, las consultas complejas y la inferencia de machine learning.
  • Rendimiento Óptimo: Go compila a binarios nativos, lo que se traduce en un rendimiento comparable al de lenguajes de bajo nivel como C++, pero con una productividad superior. Este factor es vital para aplicaciones que demandan baja latencia y alto throughput.
  • Despliegue de Binario Único: La capacidad de Go para generar ejecutables autocontenidos simplifica enormemente el despliegue. antfly swarm, por ejemplo, empaqueta todos los componentes del sistema en un único proceso, facilitando el desarrollo local y las implementaciones a pequeña escala sin dependencias externas complejas.

Consenso Multi-Raft y Persistencia con Pebble

La gestión de la consistencia de datos y la tolerancia a fallos en un entorno distribuido es un desafío central. Antfly aborda esto mediante una implementación sofisticada de Multi-Raft, respaldada por el motor de almacenamiento Pebble.

  • Multi-Raft sobre etcd: Antfly utiliza la biblioteca de Raft de etcd, una implementación ampliamente probada y madura del algoritmo de consenso distribuido. La arquitectura Multi-Raft implica que el clúster de Antfly no opera con un único grupo de consenso global, sino con múltiples grupos Raft segregados:
    • Grupo de Raft de Metadatos: Un grupo de Raft dedicado gestiona los metadatos globales del clúster, incluyendo esquemas de colecciones, configuraciones de shards y estado de los nodos. Esto garantiza una consistencia sólida para la información de configuración crítica y permite que los nodos operen de manera coordinada.
    • Grupos de Raft por Shard de Datos: Cada shard de datos, que es una partición lógica del índice y de los documentos, opera con su propio grupo de Raft. Esta granularidad permite una gestión independiente de la replicación y la recuperación para cada segmento de datos, mejorando la disponibilidad y el rendimiento al distribuir la carga del consenso. Un fallo en un shard afecta localmente, sin comprometer la consistencia global del clúster.
  • Motor de Almacenamiento Pebble: Como capa de persistencia subyacente, Antfly integra Pebble, el motor de almacenamiento de clave-valor de alto rendimiento desarrollado por CockroachDB. Pebble es una fork optimizada de LevelDB/RocksDB, diseñada para ofrecer durabilidad, baja latencia y robustez en escenarios de alta concurrencia y tolerancia a fallos. Sus características clave incluyen:
    • Durabilidad de Datos: Garantiza que los datos se escriban de forma segura y consistente en el disco, resistiendo reinicios y fallos del sistema.
    • Rendimiento Optimizado: Implementa mejoras significativas en la compactación, la gestión de memoria y la concurrencia, lo que se traduce en un rendimiento superior para operaciones de lectura y escritura.
    • Tolerancia a Fallos: Diseñado para recuperar el estado de forma consistente tras fallos, lo que complementa la resiliencia proporcionada por Raft.

Este entrelazado de Multi-Raft y Pebble confiere a Antfly una base sólida para su funcionamiento en entornos distribuidos, asegurando tanto la consistencia de los datos como su alta disponibilidad y escalabilidad.

Capacidades de Búsqueda Avanzadas y Multimodales

La distinción central de Antfly radica en su capacidad para unificar múltiples paradigmas de búsqueda en un solo sistema, permitiendo consultas que entrelazan texto, vectores y relaciones.

Búsqueda Full-Text

La búsqueda full-text es la columna vertebral de cualquier motor de búsqueda y Antfly la implementa con eficiencia y robustez. Utiliza un índice invertido para mapear términos a los documentos donde aparecen, lo que permite la recuperación rápida de resultados basados en palabras clave.

  • Indexación: Los documentos son procesados (tokenización, normalización, stemming) y sus términos se registran en el índice invertido.
  • Consultas Ricas: Soporta una amplia gama de operadores de consulta, incluyendo AND/OR, frases exactas, proximidad, comodines y expresiones regulares.
  • Relevancia: Algoritmos de ranking como BM25 se utilizan para ordenar los resultados por su relevancia percib

Escrito por Mariano Gobea Alcoba