Systèmes distribués impressionnants
Ce référentiel contient une liste de projets de systèmes distribués avec du code open source dans divers langages de programmation qui peuvent être utiles pour mieux comprendre comment créer des services distribués.
Bases de données
- (Golang) Jocko - un service de journal de validation Kafka/distribué dans Go. [Serf + Radeau]
- (Golang) oklog - un système de gestion de journaux distribué et sans coordination pour les gros clusters [Archivé]
- (Golang) elasticell - une base de données NoSQL distribuée compatible HA Redis avec une cohérence et une fiabilité élevées
- (Erlang) CouchDB - une base de données de documents hautement disponible, tolérante aux partitions et finalement cohérente. Prend en charge les configurations maître-maître avec détection automatique des conflits.
- (Java) Apache HBase - une base de données Hadoop, un magasin de Big Data distribué et évolutif. Utile lorsqu'un accès aléatoire en lecture/écriture en temps réel au Big Data est nécessaire
- (Golang) Tair - un service de stockage distribué à mémoire rapide (MDB)/persistant (LDB) hautes performances et haute disponibilité
- (Golang) immudb - une base de données immuable basée sur zéro confiance, clé/valeur et SQL, inviolable, historique des modifications des données
- (Rust) toydb - base de données SQL distribuée dans Rust, écrite comme un projet d'apprentissage
- (Rust) DB3 Network - une alternative décentralisée à Firebase Firestore
- (Python) ZODB - une base de données transactionnelle orientée objet ACID
- (Golang) requiemdb - un stockage permanent pour les données OTEL
Bases de données de valeurs-clés
- (C) memcached - un magasin de cache clé/valeur multithread hautes performances basé sur des événements destiné à être utilisé dans un système distribué
- (C) redis - une base de données en mémoire avec différents types de valeurs qui persistent sur le disque
- (Rust) TiKV - une base de données transactionnelle clé-valeur distribuée, créée à l'origine pour compléter TiDB
- (C++) leveldb - une bibliothèque de stockage rapide de valeurs-clés écrite par Google qui fournit un mappage ordonné des clés de chaîne aux valeurs de chaîne
- (Golang) goleveldb - un LevelDB implémenté dans Golang
- (Golang) summitdb - une base de données clé/valeur NoSQL en mémoire. Il persiste sur le disque, utilise l'algorithme de consensus Raft, est conforme à ACID et repose sur un modèle transactionnel et fortement cohérent. Il prend en charge les index personnalisés, les données géospatiales, les documents JSON et les scripts JS définis par l'utilisateur.
- (Python) pupdb - une simple base de données clé-valeur basée sur un fichier
- (Python) pickledb - un magasin clé-valeur open source utilisant le module json de Python
- (C++) KeyDB - une alternative multithread plus rapide à Redis
- (C++) Dragonfly - un magasin de données en mémoire entièrement compatible avec Redis et Memcache et conçu à l'aide d'algorithmes modernes
- (Golang) BadgerDB - une base de données clé-valeur (KV) intégrable, persistante et rapide écrite en Go pur
- (Golang) BuntDB - un magasin clé/valeur de bas niveau en mémoire en Go pur. Il persiste sur le disque, est conforme à ACID et utilise le verrouillage pour plusieurs lecteurs et un seul graveur. Il prend en charge les index personnalisés et les données géospatiales.
- (Rust) ConstDB - un magasin de cache de type Redis qui implémente les CRDT et les réplications actives-actives.
- (Golang) GhostDB - un magasin de données clé-valeur distribué, en mémoire, à usage général qui offre des performances en microsecondes à n'importe quelle échelle
- (Dart) Hive - une base de données clé-valeur légère et ultra-rapide écrite en Dart pur. Inspiré par Bitcask
- (Golang) rosedb - une base de données NoSQL rapide, stable et intégrée basée sur bitcask, prend en charge une variété de structures de données telles que chaîne, liste, hachage, ensemble et ensemble trié
- (Rust) PumpkinDB - un moteur de base de données de valeurs-clés ordonnées immuable
- (Golang) FlashDB - un magasin clé/valeur simple, en mémoire, en Go pur. Il persiste sur le disque, est conforme à ACID et utilise le verrouillage pour plusieurs lecteurs et un seul graveur. Il prend en charge les opérations de type Redis pour les structures de données telles que SET, SORTED SET, HASH et STRING.
- (PHP) Lazer - une base de données de fichiers plats PHP basée sur des fichiers JSON
- (Golang) Scribble - une petite base de données JSON dans Golang
- (Golang) FlyDB - un moteur de stockage KV hautes performances basé sur le papier bitcask prend en charge le protocole Redis et la structure de données correspondante
- (Rust) Engula - un magasin clé-valeur distribué, utilisé comme cache, base de données et moteur de stockage
- (Golang) Dice - un magasin KV en mémoire extrêmement simple basé sur Golang qui parle le dialecte Redis
Bases de données relationnelles, SQL, NewSQL
- (Golang) CockroachDB - une base de données SQL distribuée et tolérante aux pannes, construite sur un magasin clé-valeur transactionnel et fortement cohérent
- (Golang) YugabyteDB - une base de données SQL distribuée native du cloud pour les applications critiques
- (Golang) RQLite - une base de données relationnelle légère et distribuée, qui utilise SQLite comme moteur de stockage
- (Golang) Kingbus - un magasin de journaux binaires MySQL distribué basé sur raft [Raft]
- (C++) YDB est une base de données SQL distribuée open source qui combine haute disponibilité et évolutivité avec une cohérence stricte et des transactions ACID.
- (Golang) RadonDB - une base de données MySQL open source et native du cloud pour une évolutivité et des performances illimitées
NoSQL, bases de données documentaires
- (C++) MongoDB - base de données de documents conçue pour faciliter le développement et la mise à l'échelle
- (Golang) FerretDB - un proxy, convertissant les requêtes du protocole filaire MongoDB 6.0+ en SQL - utilisant PostgreSQL comme moteur de base de données
- (C#) LiteDB - NoSQL Document Store dans un seul fichier de données
- (Python) tinydb - une base de données légère orientée document écrite en Python pur
- (PHP) SleekDB - un simple fichier plat de type NoSQL implémenté en PHP sans aucune dépendance tierce qui stocke les données dans des fichiers JSON simples
- (Rust) BonsaiDB - une base de données ACID, transactionnelle KV ou conviviale pour le développement de documents avec un stockage de données différé sur disque configurable
- (Golang) CloverDB - une base de données NoSQL légère orientée document écrite en Golang pur
Bases de données graphiques
- (Java) neo4j - Base de données graphique
- (Python) edgedb - une base de données graphique-relationnelle
- (C++) nebula - une base de données de graphiques open source distribuée et rapide offrant une évolutivité horizontale et une haute disponibilité
- (Golang) EliasDB - une base de données légère basée sur des graphiques
Série chronologique
- (Golang) VictoriaMetrics - solution de surveillance rapide et rentable et base de données de séries chronologiques
- (Golang) influxdb - banque de données évolutive pour les métriques, les événements et les analyses en temps réel
- (Java) trino - moteur de requête SQL distribué rapide pour l'analyse du Big Data
- (Java) Apache Doris - une base de données analytique unifiée et facile à utiliser
- (Scala) FiloDB - Base de données chronologique/événement/opérationnelle distribuée, compatible Prometheus, en temps réel, en mémoire, massivement évolutive et multi-schémas
- (Rust) ceresdb - base de données de séries temporelles native cloud hautes performances, distribuée, sans schéma, capable de gérer à la fois les charges de travail de séries chronologiques et d'analyse
- (Golang) tstorage est un moteur de stockage local léger sur disque pour les données de séries chronologiques avec une API simple
- (Rust) CnosDB est une base de données de séries chronologiques distribuées open source hautes performances, haute compression et facile à utiliser. Utilisé dans des domaines tels que l'IoT, l'Internet industriel, les voitures connectées et les opérations informatiques
- (Golang) LinDB - une base de données de séries chronologiques distribuées évolutive, hautes performances et haute disponibilité
- (Scala) FiloDB - une base de données chronologique/événement/opérationnelle distribuée, compatible avec Prometheus, en temps réel, en mémoire, massivement évolutive et multi-schémas
- (Rust) CeresDB - une base de données de séries temporelles hautes performances, distribuée et native du cloud
Bases de données de colonnes
- (Java) Apache Cassandra - un magasin de lignes partitionné hautement évolutif. Les lignes sont organisées en tables avec une clé primaire requise
- (C++) scylladb - une base de données Big Data en temps réel compatible API avec Apache Cassandra et Amazon DynamoDB
- (Golang) FrostDB - une base de données en colonnes intégrable à larges colonnes écrite en Go
Bases de données d'autorisations
- (Golang) SpiceDB - un système de base de données inspiré de Google Zanzibar pour créer et gérer les autorisations d'applications critiques en matière de sécurité
- (Golang) Keto - une base de données open source inspirée de Google Zanzibar, gRPC, API REST, newSQL et un langage d'autorisation simple et granulaire. Prend en charge ACL, RBAC
Bases de données analytiques
- (C++) BaikalDB est une base de données distribuée compatible HTAP MySQL conçue pour une échelle de plusieurs pétaoctets
- (Golang) AresDB - un moteur de stockage et de requêtes d'analyse en temps réel alimenté par GPU
Vecteurs
- (Rust) Qdrant - un moteur de recherche de similarité vectorielle et une base de données vectorielle
- (Golang) milvus - une base de données vectorielles open source conçue pour alimenter l'intégration de recherches de similarité et d'applications d'IA
- (Golang) Weaviate - une base de données vectorielles open source qui stocke à la fois des objets et des vecteurs
- (Golang) tobias-mayer/vector-db - une base de données de vecteurs simple qui peut être utilisée pour rechercher des vecteurs similaires en temps logarithmique
- (Rust) DANNY - une base de données vectorielles décentralisée pour créer des applications de recherche de vecteurs
Passerelles
- (Golang) Glide - une passerelle LLM/modèle rapide, ouverte et fiable pour le développement rapide d'applications GenAI
- (Golang) Traefik - un proxy d'application cloud natif
- (Lua) Kong - une passerelle API cloud native riche en fonctionnalités
- (Golang) Skipper - un routeur HTTP et un proxy inverse pour la composition des services
- (Golang) janus - une passerelle API légère et une plateforme de gestion
- (Golang) Lura - passerelle API ultra performante avec middlewares
- (Python) MLFLow Gateway - un proxy LLM
Verrouillage
- (Golang) etcd - magasin clé-valeur distribué fiable pour les données les plus critiques d'un système distribué [Raft + gRPC]
- (Java) Apache Zookeeper - coordination distribuée hautement fiable
- (Golang) chubby - Une implémentation (très simplifiée) de Chubby, le service de verrouillage distribué de Google
Streaming
- (Java) Kafka - une plateforme de streaming d'événements distribuée, hautement évolutive, élastique, tolérante aux pannes et sécurisée
- (Python) faust - une bibliothèque de traitement de flux distribuée qui transfère les idées de Kafka Streams vers Python
- (Golang) Liftbridge - un flux de messages léger et tolérant aux pannes en implémentant une augmentation de flux durable pour le système de messagerie NATS
- (Rust) RisingWave - une base de données SQL distribuée pour le traitement de flux, conçue pour réduire la complexité et le coût de création d'applications en temps réel
Planificateurs
- (Golang) dkron - un système de planification de tâches distribué et tolérant aux pannes pour les environnements cloud natifs
- (Python) Celery - une file d'attente de tâches distribuée
- (Python) Apache Airflow - une plate-forme pour créer, planifier et surveiller des flux de travail par programmation
Files d'attente
- (Golang) nsq - plateforme de messagerie distribuée tolérante aux pannes en temps réel conçue pour fonctionner à grande échelle, traitant des milliards de messages par jour [Raft + gRPC]
- (Golang) Sandglass - file d'attente de messages distribuée, évolutive horizontalement, persistante et ordonnée dans le temps
- (Golang) dnpipes - version distribuée des canaux nommés Unix comparables à AWS SQS
- (PHP) GatewayWorker - framework de messagerie distribuée en temps réel basé sur Workerman
- (C++) ZeroMQ - abstraction des files d'attente de messages asynchrones, de plusieurs modèles de messagerie, filtrage des messages (abonnements), accès transparent à plusieurs protocoles de transport et plus encore
- (Java) Apache Pulsar - plateforme de messagerie pub-sub distribuée avec un modèle de messagerie très flexible et une API client intuitive
- (Java) Apache ActiveMQ - courtier de messages sous licence Apache 2.0 hautes performances
Moteurs de recherche
- (Java) ElasticSearch - moteur de recherche et d'analyse distribué et RESTful
- (Java) Apache Lucene - une bibliothèque de moteurs de recherche de texte hautes performances et complète
- (Rust) MeiliSearch - Moteur de recherche ultra-rapide, ultra pertinent et tolérant aux fautes de frappe
- (JS) FlexSearch - bibliothèque de recherche en texte intégral flexible en mémoire
- (Golang) RiotSearch - moteur de recherche en texte intégral distribué, simple et efficace
- (C++) Typesense - moteur de recherche rapide, tolérant aux fautes de frappe et flou
- (Rust) Sonic - backend de recherche rapide, léger et sans schéma. Une alternative à Elasticsearch qui fonctionne sur quelques Mo de RAM
Systèmes de fichiers
- (Golang) JuiceFS - Système de fichiers POSIX hautes performances compatible AWS S3 et compatible Hadoop
- (Golang) SeaweedFS - un simple système de fichiers distribué hautement évolutif compatible AWS S3 et compatible Hadoop
- (C) GlusterFS - stockage distribué pouvant atteindre plusieurs pétaoctets
- (C++) GlusterFS - système de fichiers distribué hautement fiable, évolutif et efficace. Il répartit les données sur un certain nombre de serveurs physiques, les rendant visibles à l'utilisateur final sous la forme d'un système de fichiers unique.
Découverte de services
- (Golang) sleuth - découverte automatique peer-to-peer sans maître et RPC entre les services HTTP résidant sur le même réseau
Informatique
- (Scala) Apache Spark - moteur d'analyse unifié pour le traitement de données à grande échelle
TerminusDB
- (Prolog) terminusdb - base de données distribuée avec un modèle de collaboration
Système d'exploitation
- (C) HarveyOS - système d'exploitation distribué
Cadres
- (Golang) etcd - framework pour le développement de systèmes distribués. Fournit les exigences de base pour le développement de systèmes distribués, y compris la communication RPC et événementielle.
- (Golang) ergo - approche du port d'Erlang/OTP à Golang
- (Golang) gosiris - un cadre d'acteur pour Golang
- (Python) cotyledon - un cadre pour définir des services de longue durée. Il assure la gestion des signaux Unix, la génération des travailleurs, la supervision des processus enfants, le rechargement des démons, la notification sd, la limitation du débit pour la génération des travailleurs, et bien plus encore.
- (Java) atomix - framework complet pour créer des systèmes distribués tolérants aux pannes [REST + Raft]
- (Kotlin) orbit - cadre d'acteur virtuel pour la construction de systèmes distribués
- (JS) hemera - Une boîte à outils de microservices Node.js pour le système de messagerie NATS [RPC]
- (Python) Tooz - centralise les primitives distribuées les plus courantes telles que le protocole d'appartenance à un groupe, le service de verrouillage et l'élection des dirigeants en fournissant une API de coordination aidant les développeurs à créer des applications distribuées
- (C++) Nebula - framework puissant pour créer des applications basées sur les messages hautement concurrentes, distribuées et résilientes
- (GoLang) Service Weaver - Un framework qui permet d'écrire des applications sous forme binaire modulaire et de les déployer comme un ensemble de microservices
- (GoLang) Dapr - runtime portable, sans serveur et piloté par événements qui fonctionne comme un side-car et permet aux développeurs de créer facilement des microservices résilients, sans état et avec état
Composants
- (Golang) Dragonboat - une bibliothèque consensuelle Raft multi-groupes hautes performances en Go pur
- (Golang) Golimit - Limiteur de débit distribué et décentralisé basé sur Uber ringpop
- (Python) Tenacity - bibliothèque de nouvelles tentatives à usage général
- (Elixir) ex_hash_ring - Implémentation d'anneau de hachage cohérent pur Elixir basée sur l'excellente bibliothèque d'anneau de hachage C
- (Elixir) radeau - Mise en œuvre du consensus sur le radeau
- (C++) NuRaft - Implémentation de Raft dérivée du projet Cornerstone
- (Python) Hyx - Primitives légères de tolérance aux pannes pour vos microservices Python résilients et modernes
- (Python) Migdalor - une découverte d'homologues native Kubernetes pour les nœuds asyncio Python
- (Golang) skiplist - une implémentation Golang de la structure de données skiplist
- (Java) Waltz - un journal à écriture anticipée distribué basé sur un quorum pour la réplication des transactions
Autres ressources
- Awesome-scalability - Liste de lecture pour illustrer les modèles de systèmes à grande échelle évolutifs, fiables et performants
- Awesome-Distributed-Systems - liste organisée de matériel génial sur les systèmes distribués
- Awesome-database-learning - une liste de matériel d'apprentissage pour comprendre les composants internes des bases de données
- (C/C++)(Livre) Créez votre propre Redis avec C/C++
- (C) (Article) Écrire un clone SQLite à partir de zéro en C
- Berkley CS186 : Introduction aux systèmes de bases de données
- MIT 6.830 : Systèmes de bases de données