Impresionantes sistemas distribuidos
Este repositorio contiene una lista de proyectos de sistemas distribuidos con código fuente abierto en varios lenguajes de programación que pueden ser útiles para comprender mejor cómo crear servicios distribuidos.
Bases de datos
- (Golang) Jocko: un servicio de registro de confirmación distribuido/Kafka en Go. [Siervo + Balsa]
- (Golang) oklog: un sistema de gestión de registros distribuido y sin coordinación para grandes clústeres [Archivado]
- (Golang) elasticell: una base de datos NoSQL distribuida compatible con HA Redis con gran consistencia y confiabilidad
- (Erlang) CouchDB: una base de datos de documentos altamente disponible, tolerante a particiones y eventualmente consistente. Admite configuraciones maestro-maestro con detección automática de conflictos.
- (Java) Apache HBase: una base de datos Hadoop, un gran almacén de datos distribuido y escalable. Útil cuando se necesita acceso aleatorio de lectura/escritura en tiempo real a big data
- (Golang) Tair: un servicio de almacenamiento distribuido de memoria de acceso rápido (MDB)/persistente (LDB) de alto rendimiento y alta disponibilidad
- (Golang) immudb: una base de datos inmutable basada en confianza cero, clave/valor y SQL, a prueba de manipulaciones e historial de cambios de datos
- (Rust) toydb: base de datos SQL distribuida en Rust, escrita como un proyecto de aprendizaje
- (Rust) DB3 Network: una alternativa descentralizada de Firebase Firestore
- (Python) ZODB: una base de datos transaccional orientada a objetos ACID
- (Golang) requiemdb: un almacenamiento permanente para datos de OTEL
Bases de datos de valores clave
- (C) memcached: un almacén de caché de clave/valor basado en eventos multiproceso de alto rendimiento destinado a ser utilizado en un sistema distribuido
- (C) redis: una base de datos en memoria con varios tipos de valores que persiste en el disco
- (Rust) TiKV: una base de datos transaccional distribuida de valores clave, creada originalmente para complementar TiDB
- (C++) leveldb: una biblioteca rápida de almacenamiento de valores-clave escrita en Google que proporciona una asignación ordenada de claves de cadena a valores de cadena.
- (Golang) goleveldb: un LevelDB implementado en Golang
- (Golang) summitdb: una base de datos de clave/valor NoSQL en memoria. Persiste en el disco, utiliza el algoritmo de consenso Raft, es compatible con ACID y se basa en un modelo transaccional y fuertemente consistente. Admite índices personalizados, datos geoespaciales, documentos JSON y secuencias de comandos JS definidas por el usuario.
- (Python) pupdb: una base de datos de valores clave basada en archivos simple
- (Python) pickledb: un almacén clave-valor de código abierto que utiliza el módulo json de Python
- (C++) KeyDB: una alternativa multiproceso más rápida a Redis
- (C++) Dragonfly: un almacén de datos en memoria totalmente compatible con Redis y Memcache y diseñado con algoritmos modernos
- (Golang) BadgerDB: una base de datos clave-valor (KV) integrable, persistente y rápida escrita en Go puro
- (Golang) BuntDB: un almacén de clave/valor en memoria de bajo nivel en Go puro. Persiste en el disco, es compatible con ACID y utiliza bloqueo para múltiples lectores y un único escritor. Admite índices personalizados y datos geoespaciales.
- (Rust) ConstDB: un almacén de caché similar a Redis que implementa CRDT y replicaciones activo-activo.
- (Golang) GhostDB: un almacén de datos de valores clave distribuido, en memoria y de propósito general que ofrece rendimiento de microsegundos a cualquier escala
- (Dart) Hive: una base de datos de valores clave ligera y ultrarrápida escrita en Dart puro. Inspirado en Bitcask
- (Golang) rosedb: una base de datos NoSQL integrada, rápida y estable basada en bitcask, admite una variedad de estructuras de datos como cadenas, listas, hash, conjuntos y conjuntos ordenados
- (Rust) PumpkinDB: un motor de base de datos de valores clave ordenados inmutable
- (Golang) FlashDB: un almacén de claves/valores simple, en memoria, en Go puro. Persiste en el disco, es compatible con ACID y utiliza bloqueo para múltiples lectores y un único escritor. Admite operaciones similares a redis para estructuras de datos como SET, SORTED SET, HASH y STRING
- (PHP) Lazer: una base de datos PHP de archivos planos basada en archivos JSON
- (Golang) Scribble: una pequeña base de datos JSON en Golang
- (Golang) FlyDB: un motor de almacenamiento KV de alto rendimiento basado en papel bitcask que admite el protocolo redis y la estructura de datos correspondiente
- (Rust) Engula: un almacén distribuido de valores clave, utilizado como caché, base de datos y motor de almacenamiento.
- (Golang) Dice: una tienda KV en memoria basada en Golang extremadamente simple que habla el dialecto de Redis
Bases de datos relacionales, SQL y NewSQL
- (Golang) CockroachDB: una base de datos SQL distribuida tolerante a fallas construida sobre un almacén de valores clave transaccional y fuertemente consistente
- (Golang) YugabyteDB: una base de datos SQL distribuida nativa en la nube para aplicaciones de misión crítica
- (Golang) RQLite: una base de datos relacional distribuida y ligera que utiliza SQLite como motor de almacenamiento
- (Golang) Kingbus: una tienda binlog MySQL distribuida basada en balsa [Raft]
- (C++) YDB es una base de datos SQL distribuida de código abierto que combina alta disponibilidad y escalabilidad con coherencia estricta y transacciones ACID.
- (Golang) RadonDB: una base de datos MySQL nativa de la nube y de código abierto para escalabilidad y rendimiento ilimitados
NoSQL, bases de datos de documentos
- (C++) MongoDB: base de datos de documentos diseñada para facilitar el desarrollo y la ampliación
- (Golang) FerretDB: un proxy que convierte las consultas del protocolo de conexión MongoDB 6.0+ a SQL, utilizando PostgreSQL como motor de base de datos.
- (C#) LiteDB: almacén de documentos NoSQL en un único archivo de datos
- (Python) tinydb: una base de datos liviana orientada a documentos escrita en Python puro
- (PHP) SleekDB: una base de datos tipo NoSQL de archivo plano simple implementada en PHP sin dependencias de terceros que almacena datos en archivos JSON simples
- (Rust) BonsaiDB: una base de datos ACID, KV transaccional o compatible con desarrolladores de documentos con almacenamiento de datos en disco retardado configurable
- (Golang) CloverDB: una base de datos NoSQL liviana orientada a documentos escrita en Golang puro
Bases de datos de gráficos
- (Java) neo4j - Base de datos de gráficos
- (Python) edgedb: una base de datos relacional de gráficos
- (C++): una base de datos gráfica distribuida, rápida y de código abierto que ofrece escalabilidad horizontal y alta disponibilidad.
- (Golang) EliasDB: una base de datos ligera basada en gráficos
Serie temporal
- (Golang) VictoriaMetrics: solución de monitoreo y base de datos de series temporales rápida y rentable
- (Golang) influxdb: almacén de datos escalable para métricas, eventos y análisis en tiempo real
- (Java) trino: motor de consultas SQL distribuido rápido para análisis de big data
- (Java) Apache Doris: una base de datos analítica unificada, fácil de usar y de alto rendimiento
- (Scala) FiloDB: base de datos operativa, de eventos y de series temporales de múltiples esquemas, distribuida, compatible con Prometheus, en tiempo real, en memoria, masivamente escalable
- (Rust) ceresdb: base de datos de series temporales nativa de la nube, distribuida, sin esquemas y de alto rendimiento que puede manejar cargas de trabajo de análisis y series temporales
- (Golang) tstorage es un motor de almacenamiento local en disco liviano para datos de series temporales con una API sencilla
- (Rust) CnosDB es una base de datos de series temporales distribuida de código abierto, de alto rendimiento, alta compresión y fácil de usar. Se utiliza en campos como IoT, Internet industrial, automóviles conectados y operaciones de TI.
- (Golang) LinDB: una base de datos de series de tiempo distribuida escalable, de alto rendimiento y alta disponibilidad
- (Scala) FiloDB: una base de datos operativa, de eventos y de series temporales de múltiples esquemas, distribuida, compatible con Prometheus, en tiempo real, en memoria, masivamente escalable
- (Rust) CeresDB: una base de datos de series temporales nativa de la nube, distribuida y de alto rendimiento
Bases de datos de columnas
- (Java) Apache Cassandra: un almacén de filas particionado altamente escalable. Las filas se organizan en tablas con una clave principal requerida
- (C++) scylladb: una base de datos de big data en tiempo real compatible con API con Apache Cassandra y Amazon DynamoDB
- (Golang) FrostDB: una base de datos de columnas anchas integrable escrita en Go
Bases de datos de permisos
- (Golang) SpiceDB: un sistema de base de datos inspirado en Google Zanzíbar para crear y gestionar permisos de aplicaciones críticas para la seguridad
- (Golang) Keto: una base de datos de código abierto inspirada en Google Zanzíbar, gRPC, API REST, newSQL y un lenguaje de permisos sencillo y granular. Soporta ACL, RBAC
Bases de datos analíticas
- (C++) BaikalDB es una base de datos distribuida compatible con HTAP MySQL diseñada para escala de petabytes
- (Golang) AresDB: un motor de consultas y almacenamiento de análisis en tiempo real impulsado por GPU
Vectores
- (Rust) Qdrant: un motor de búsqueda de similitudes de vectores y una base de datos de vectores
- (Golang) milvus: una base de datos vectorial de código abierto creada para impulsar la integración de aplicaciones de inteligencia artificial y búsqueda de similitudes
- (Golang) Weaviate: una base de datos de vectores de código abierto que almacena objetos y vectores
- (Golang) tobias-mayer/vector-db: una base de datos de vectores simple que se puede utilizar para buscar vectores similares en tiempo logarítmico
- (Rust) DANNY: una base de datos de vectores descentralizada para crear aplicaciones de búsqueda de vectores
Puertas de enlace
- (Golang) Glide: una puerta de enlace modelo/LLM rápida, abierta y confiable para el desarrollo rápido de aplicaciones GenAI
- (Golang) Traefik: una aplicación proxy nativa de la nube
- (Lua) Kong: una puerta de enlace API rica en funciones nativa de la nube
- (Golang) Skipper: un enrutador HTTP y proxy inverso para la composición de servicios
- (Golang) janus: una plataforma de administración y puerta de enlace API liviana
- (Golang) Lura: puerta de enlace API de ultra rendimiento con middleware
- (Python) MLFLow Gateway: un proxy LLM
Cierre
- (Golang) etcd: almacén de valores clave confiable y distribuido para los datos más críticos de un sistema distribuido [Raft + gRPC]
- (Java) Apache Zookeeper: coordinación distribuida altamente confiable
- (Golang) chubby: una implementación (muy simplificada) de Chubby, el servicio de bloqueo distribuido de Google.
Transmisión
- (Java) Kafka: una plataforma de transmisión de eventos distribuida, altamente escalable, elástica, segura y tolerante a fallas
- (Python) faust: una biblioteca de procesamiento de flujo distribuido que traslada las ideas de Kafka Streams a Python
- (Golang) Liftbridge: flujos de mensajes livianos y tolerantes a fallas mediante la implementación de un aumento de flujo duradero para el sistema de mensajería NATS
- (Rust) RisingWave: una base de datos SQL distribuida para el procesamiento de transmisiones, diseñada para reducir la complejidad y el costo de crear aplicaciones en tiempo real.
Programadores
- (Golang) dkron: un sistema de programación de trabajos distribuido y tolerante a fallas para entornos nativos de la nube
- (Python) Apio: una cola de tareas distribuida
- (Python) Apache Airflow: una plataforma para crear, programar y monitorear flujos de trabajo mediante programación
Colas
- (Golang) nsq: plataforma de mensajería distribuida tolerante a fallas en tiempo real diseñada para operar a escala y manejar miles de millones de mensajes por día [Raft + gRPC]
- (Golang) Sandglass: cola de mensajes distribuida, escalable horizontalmente, persistente y ordenada en el tiempo
- (Golang) dnpipes: versión distribuida de canalizaciones con nombre de Unix comparables a AWS SQS
- (PHP) GatewayWorker: marco de mensajería distribuido en tiempo real basado en trabajador
- (C++) ZeroMQ: abstracción de colas de mensajes asíncronos, múltiples patrones de mensajería, filtrado de mensajes (suscripciones), acceso fluido a múltiples protocolos de transporte y más
- (Java) Apache Pulsar: plataforma distribuida de mensajería pub-sub con un modelo de mensajería muy flexible y una API de cliente intuitiva
- (Java) Apache ActiveMQ: Agente de mensajes con licencia Apache 2.0 de alto rendimiento
Motores de búsqueda
- (Java) ElasticSearch: motor de análisis y búsqueda RESTful distribuido
- (Java) Apache Lucene: una biblioteca de motor de búsqueda de texto con todas las funciones y alto rendimiento
- (Rust) MeiliSearch: motor de búsqueda ultrarrápido, ultrarrelevante y tolerante a errores tipográficos
- (JS) FlexSearch: biblioteca de búsqueda de texto completo con memoria flexible
- (Golang) RiotSearch: motor de búsqueda de texto completo distribuido, simple y eficiente
- (C++) Typesense: motor de búsqueda difuso, rápido y tolerante a errores tipográficos
- (Rust) Sonic: backend de búsqueda rápido, liviano y sin esquemas. Una alternativa a Elasticsearch que se ejecuta en unos pocos MB de RAM
Sistemas de archivos
- (Golang) JuiceFS: sistema de archivos POSIX de alto rendimiento compatible con AWS S3 y compatible con Hadoop
- (Golang) SeaweedFS: un sistema de archivos distribuido altamente escalable, compatible con Hadoop y compatible con AWS S3
- (C) GlusterFS: almacenamiento distribuido que puede escalarse a varios petabytes
- (C++) GlusterFS: sistema de archivos distribuido altamente confiable, escalable y eficiente. Distribuye datos en varios servidores físicos, haciéndolos visibles para el usuario final como un único sistema de archivos.
Descubrimiento de servicios
- (Golang) sleuth: descubrimiento automático punto a punto sin maestro y RPC entre servicios HTTP que residen en la misma red
Proceso de datos
- (Scala) Apache Spark: motor de análisis unificado para procesamiento de datos a gran escala
TerminalDB
- (Prolog) terminusdb: base de datos distribuida con un modelo de colaboración
SO
- (C) HarveyOS - sistema operativo distribuido
Marcos
- (Golang) etcd: marco para el desarrollo de sistemas distribuidos. Proporciona los requisitos básicos para el desarrollo de sistemas distribuidos, incluida RPC y comunicación impulsada por eventos.
- (Golang) ergo - accesos al puerto de Erlang/OTP en Golang
- (Golang) gosiris: un marco de actor para Golang
- (Python) cotiledón: un marco para definir servicios de larga duración. Proporciona manejo de señales Unix, generación de trabajadores, supervisión de procesos secundarios, recarga de demonios, notificación SD, limitación de velocidad para la generación de trabajadores y más.
- (Java) atomix: marco con todas las funciones para crear sistemas distribuidos tolerantes a fallas [REST + Raft]
- (Kotlin) orbit: marco de actor virtual para construir sistemas distribuidos
- (JS) hemera: un conjunto de herramientas de microservicios de Node.js para el sistema de mensajería NATS [RPC]
- (Python) Tooz: centraliza las primitivas distribuidas más comunes, como el protocolo de membresía de grupo, el servicio de bloqueo y la elección de líder, proporcionando una API de coordinación que ayuda a los desarrolladores a crear aplicaciones distribuidas.
- (C++) Nebula: potente marco para crear aplicaciones basadas en mensajes altamente concurrentes, distribuidas y resistentes
- (GoLang) Service Weaver: un marco que permite escribir aplicaciones como binario modular e implementarlas como un conjunto de microservicios.
- (GoLang) Dapr: tiempo de ejecución portátil, sin servidor y controlado por eventos que funciona como un complemento y facilita a los desarrolladores la creación de microservicios resistentes, sin estado y con estado.
Componentes
- (Golang) Dragonboat: una biblioteca de consenso Raft multigrupo de alto rendimiento en Go puro
- (Golang) Golimit: limitador de velocidad descentralizado y distribuido basado en ringpop de Uber
- (Python) Tenacity: biblioteca de reintentos de uso general
- (Elixir) ex_hash_ring: implementación de anillo hash consistente de Elixir puro basada en la excelente biblioteca C hash-ring
- (Elixir) balsa - Implementación del consenso de balsa
- (C++) NuRaft: implementación de balsa derivada del proyecto fundamental
- (Python) Hyx: primitivas ligeras de tolerancia a fallos para sus microservicios Python modernos y resistentes
- (Python) Migdalor: un descubrimiento de pares nativo de Kubernetes para nodos asyncio de Python
- (Golang) skiplist: una implementación de Golang de la estructura de datos skiplist
- (Java) Waltz: un registro de escritura anticipada distribuido basado en quórum para replicar transacciones
Otros recursos
- Awesome-scalability: lista de lectura para ilustrar los patrones de sistemas a gran escala escalables, confiables y de alto rendimiento.
- Awesome-Distributed-Systems: lista seleccionada de material increíble sobre sistemas distribuidos
- Awesome-database-learning: una lista de materiales de aprendizaje para comprender los aspectos internos de las bases de datos.
- (C/C++)(Libro) Construya su propio Redis con C/C++
- (C) (Artículo) Escribir un clon de sqlite desde cero en C
- Berkley CS186: Introducción a los sistemas de bases de datos
- MIT 6.830: Sistemas de bases de datos