Fantastische verteilte Systeme
Dieses Repository enthält eine Liste verteilter Systemprojekte mit Open-Source-Code in verschiedenen Programmiersprachen, die hilfreich sein können, um besser zu verstehen, wie verteilte Dienste erstellt werden.
Datenbanken
- (Golang) Jocko – ein Kafka/verteilter Commit-Protokolldienst in Go. [Leibeigener + Floß]
- (Golang) oklog – ein verteiltes und koordinationsfreies Protokollverwaltungssystem für große alte Cluster [Archiviert]
- (Golang) Elasticell – eine verteilte HA Redis-kompatible NoSQL-Datenbank mit starker Konsistenz und Zuverlässigkeit
- (Erlang) CouchDB – eine hochverfügbare, partitionstolerante und schließlich konsistente Dokumentendatenbank. Unterstützt Master-Master-Setups mit automatischer Konflikterkennung.
- (Java) Apache HBase – eine Hadoop-Datenbank, ein verteilter, skalierbarer Big-Data-Speicher. Nützlich, wenn zufälliger Lese-/Schreibzugriff in Echtzeit auf große Datenmengen erforderlich ist
- (Golang) Tair – ein leistungsstarker und hochverfügbarer verteilter Fast-Access-Memory (MDB)/persistenter (LDB) Speicherdienst
- (Golang) immudb – eine unveränderliche Datenbank basierend auf Zero Trust, Schlüssel/Wert und SQL, manipulationssicher, Datenänderungsverlauf
- (Rust) toydb – verteilte SQL-Datenbank in Rust, geschrieben als Lernprojekt
- (Rust) DB3 Network – eine dezentrale Firebase-Firestore-Alternative
- (Python) ZODB – eine transaktionale objektorientierte ACID-Datenbank
- (Golang) requiemdb – ein dauerhafter Speicher für OTEL-Daten
Schlüsselwertdatenbanken
- (C) memcached – ein hochleistungsfähiger, ereignisbasierter Multithread-Schlüssel/Wert-Cache-Speicher, der für die Verwendung in einem verteilten System vorgesehen ist
- (C) Redis – eine In-Memory-Datenbank mit verschiedenen Werttypen, die auf der Festplatte verbleibt
- (Rust) TiKV – eine verteilte transaktionale Schlüsselwertdatenbank, die ursprünglich als Ergänzung zu TiDB erstellt wurde
- (C++) leveldb – eine bei Google geschriebene schnelle Schlüsselwertspeicherbibliothek, die eine geordnete Zuordnung von Zeichenfolgenschlüsseln zu Zeichenfolgenwerten ermöglicht
- (Golang) goleveldb – eine in Golang implementierte LevelDB
- (Golang) Summitdb – eine speicherinterne NoSQL-Schlüssel/Wert-Datenbank. Es verbleibt auf der Festplatte, verwendet den Raft-Konsensalgorithmus, ist ACID-kompatibel und basiert auf einem transaktionalen und stark konsistenten Modell. Es unterstützt benutzerdefinierte Indizes, Geodaten, JSON-Dokumente und benutzerdefinierte JS-Skripte
- (Python) pupdb – eine einfache dateibasierte Schlüsselwertdatenbank
- (Python) pickledb – ein Open-Source-Schlüsselwertspeicher, der das JSON-Modul von Python verwendet
- (C++) KeyDB – eine schnellere Drop-in-Multithread-Alternative zu Redis
- (C++) Dragonfly – ein In-Memory-Datenspeicher, der vollständig mit Redis und Memcache kompatibel ist und mit modernen Algorithmen entwickelt wurde
- (Golang) BadgerDB – eine einbettbare, persistente und schnelle Schlüsselwertdatenbank (KV), geschrieben in reinem Go
- (Golang) BuntDB – ein Low-Level-In-Memory-Schlüssel/Wert-Speicher in reinem Go. Es verbleibt auf der Festplatte, ist ACID-kompatibel und verwendet Sperren für mehrere Leser und einen einzelnen Schreiber. Es unterstützt benutzerdefinierte Indizes und Geodaten.
- (Rust) ConstDB – ein Redis-ähnlicher Cache-Speicher, der CRDTs und Aktiv-Aktiv-Replikationen implementiert.
- (Golang) GhostDB – ein verteilter In-Memory-Allzweck-Schlüsselwert-Datenspeicher, der Mikrosekundenleistung in jeder Größenordnung liefert
- (Dart) Hive – eine leichte und blitzschnelle Schlüsselwertdatenbank, die in reinem Dart geschrieben ist. Inspiriert von Bitcask
- (Golang) rosedb – eine schnelle, stabile und eingebettete NoSQL-Datenbank auf Basis von Bitcask, unterstützt eine Vielzahl von Datenstrukturen wie String, Liste, Hash, Set und sortierte Set
- (Rust) PumpkinDB – eine unveränderliche Datenbank-Engine mit geordneten Schlüsselwerten
- (Golang) FlashDB – ein einfacher In-Memory-Schlüssel/Wert-Speicher in reinem Go. Es verbleibt auf der Festplatte, ist ACID-kompatibel und verwendet Sperren für mehrere Leser und einen einzelnen Schreiber. Es unterstützt Redis-ähnliche Operationen für Datenstrukturen wie SET, SORTED SET, HASH und STRING
- (PHP) Lazer – eine PHP-Flatfile-Datenbank basierend auf JSON-Dateien
- (Golang) Scribble – eine kleine JSON-Datenbank in Golang
- (Golang) FlyDB – eine leistungsstarke KV-Speicher-Engine basierend auf Bitcask-Papier, unterstützt das Redis-Protokoll und die entsprechende Datenstruktur
- (Rust) Engula – ein verteilter Schlüsselwertspeicher, der als Cache, Datenbank und Speicher-Engine verwendet wird
- (Golang) Dice – ein extrem einfacher Golang-basierter In-Memory-KV-Store, der den Redis-Dialekt spricht
Relationale, SQL- und NewSQL-Datenbanken
- (Golang) CockroachDB – eine verteilte fehlertolerante SQL-Datenbank, die auf einem transaktionalen und stark konsistenten Schlüsselwertspeicher basiert
- (Golang) YugabyteDB – eine Cloud-native verteilte SQL-Datenbank für geschäftskritische Anwendungen
- (Golang) RQLite – eine leichte, verteilte relationale Datenbank, die SQLite als Speicher-Engine verwendet
- (Golang) Kingbus – ein verteilter MySQL-Binlog-Speicher basierend auf Raft [Raft]
- (C++) YDB ist eine Open-Source-Datenbank mit verteiltem SQL, die hohe Verfügbarkeit und Skalierbarkeit mit strenger Konsistenz und ACID-Transaktionen kombiniert
- (Golang) RadonDB – eine Open-Source-Cloud-native MySQL-Datenbank für unbegrenzte Skalierbarkeit und Leistung
NoSQL, Dokumentendatenbanken
- (C++) MongoDB – Dokumentendatenbank, die für eine einfache Entwicklung und Skalierung konzipiert ist
- (Golang) FerretDB – ein Proxy, der die Wire-Protokollabfragen von MongoDB 6.0+ in SQL konvertiert – unter Verwendung von PostgreSQL als Datenbank-Engine
- (C#) LiteDB – NoSQL-Dokumentenspeicher in einer einzigen Datendatei
- (Python) tinydb – eine leichte, dokumentenorientierte Datenbank, die in reinem Python geschrieben ist
- (PHP) SleekDB – eine einfache, in PHP implementierte Flatfile-NoSQL-ähnliche Datenbank ohne Abhängigkeiten von Drittanbietern, die Daten in einfachen JSON-Dateien speichert
- (Rust) BonsaiDB – eine ACID-, transaktionale KV- oder dokumententwicklerfreundliche Datenbank mit konfigurierbarer verzögerter Datenspeicherung auf der Festplatte
- (Golang) CloverDB – eine leichte, dokumentenorientierte NoSQL-Datenbank, die in reinem Golang geschrieben ist
Graphdatenbanken
- (Java) neo4j – Graphdatenbank
- (Python)eddb – eine graphrelationale Datenbank
- (C++) nebula – eine verteilte, schnelle Open-Source-Graphdatenbank mit horizontaler Skalierbarkeit und hoher Verfügbarkeit
- (Golang) EliasDB – eine graphbasierte, leichtgewichtige Datenbank
Zeitreihen
- (Golang) VictoriaMetrics – schnelle, kostengünstige Überwachungslösung und Zeitreihendatenbank
- (Golang) influxdb – skalierbarer Datenspeicher für Metriken, Ereignisse und Echtzeitanalysen
- (Java) trino – schnelle verteilte SQL-Abfrage-Engine für Big-Data-Analysen
- (Java) Apache Doris – eine benutzerfreundliche, leistungsstarke und einheitliche Analysedatenbank
- (Scala) FiloDB – Verteilte, Prometheus-kompatible Echtzeit-In-Memory-Datenbank mit enormer Skalierbarkeit und mehreren Schemata für Zeitreihen-/Ereignis-/Betriebsdatenbanken
- (Rust) ceresdb – leistungsstarke, verteilte, schemalose, cloudnative Zeitreihendatenbank, die sowohl Zeitreihen- als auch Analyse-Workloads bewältigen kann
- (Golang) tstorage ist eine leichte lokale On-Disk-Speicher-Engine für Zeitreihendaten mit einer unkomplizierten API
- (Rust) CnosDB ist eine leistungsstarke, hochkomprimierte und benutzerfreundliche Open-Source-Datenbank für verteilte Zeitreihen. Wird in Bereichen wie IoT, industriellem Internet, vernetzten Autos und IT-Betrieb eingesetzt
- (Golang) LinDB – eine skalierbare, leistungsstarke und hochverfügbare verteilte Zeitreihendatenbank
- (Scala) FiloDB – eine verteilte, Prometheus-kompatible Echtzeit-In-Memory-Datenbank mit enormer Skalierbarkeit und mehreren Schemata für Zeitreihen/Ereignisse/Betriebsdatenbanken
- (Rust) CeresDB – eine leistungsstarke, verteilte, cloudnative Zeitreihendatenbank
Spaltendatenbanken
- (Java) Apache Cassandra – ein hoch skalierbarer Speicher für partitionierte Zeilen. Zeilen werden in Tabellen mit einem erforderlichen Primärschlüssel organisiert
- (C++) scylladb – eine Echtzeit-Big-Data-Datenbank, die API-kompatibel mit Apache Cassandra und Amazon DynamoDB ist
- (Golang) FrostDB – eine einbettbare, in Go geschriebene breitspaltige Spaltendatenbank
Berechtigungsdatenbanken
- (Golang) SpiceDB – ein von Google Zanzibar inspiriertes Datenbanksystem zum Erstellen und Verwalten sicherheitskritischer Anwendungsberechtigungen
- (Golang) Keto – eine von Google Zanzibar inspirierte Open-Source-Datenbank, gRPC, REST-APIs, newSQL und eine einfache und detaillierte Berechtigungssprache. Unterstützt ACL, RBAC
Analytische Datenbanken
- (C++) BaikalDB ist eine verteilte HTAP-MySQL-kompatible Datenbank, die für den Petabyte-Bereich entwickelt wurde
- (Golang) AresDB – eine GPU-gestützte Echtzeit-Analysespeicher- und Abfrage-Engine
Vektoren
- (Rust) Qdrant – eine Vektorähnlichkeitssuchmaschine und Vektordatenbank
- (Golang) milvus – eine Open-Source-Vektordatenbank, die die Einbettung von Ähnlichkeitssuche und KI-Anwendungen ermöglicht
- (Golang) Weaviate – eine Open-Source-Vektordatenbank, die sowohl Objekte als auch Vektoren speichert
- (Golang) tobias-mayer/vector-db – eine einfache Vektordatenbank, mit der in logarithmischer Zeit nach ähnlichen Vektoren gesucht werden kann
- (Rust) DANNY – eine dezentrale Vektordatenbank zum Erstellen von Vektorsuchanwendungen
Tore
- (Golang) Glide – ein offenes, zuverlässiges, schnelles LLM/Modell-Gateway für die schnelle Entwicklung von GenAI-Apps
- (Golang) Traefik – ein Cloud-nativer App-Proxy
- (Lua) Kong – ein Cloud-natives, funktionsreiches API-Gatewat
- (Golang) Skipper – ein HTTP-Router und Reverse-Proxy für die Dienstkomposition
- (Golang) janus – ein leichtes API-Gateway und eine Verwaltungsplattform
- (Golang) Lura – Ultra-Performance-API-Gateway mit Middleware
- (Python) MLFLow Gateway – ein LLM-Proxy
Sperren
- (Golang) etcd – verteilter zuverlässiger Schlüsselwertspeicher für die kritischsten Daten eines verteilten Systems [Raft + gRPC]
- (Java) Apache Zookeeper – äußerst zuverlässige verteilte Koordination
- (Golang) chubby – Eine (sehr vereinfachte) Implementierung von Chubby, dem verteilten Sperrdienst von Google
Streaming
- (Java) Kafka – eine verteilte, hoch skalierbare, elastische, fehlertolerante und sichere Event-Streaming-Plattform
- (Python) faust – eine verteilte Stream-Verarbeitungsbibliothek, die die Ideen von Kafka Streams nach Python portiert
- (Golang) Liftbridge – ein leichter, fehlertoleranter Nachrichtenstream durch Implementierung einer dauerhaften Stream-Erweiterung für das NATS-Nachrichtensystem
- (Rust) RisingWave – eine verteilte SQL-Datenbank für die Stream-Verarbeitung, die darauf ausgelegt ist, die Komplexität und Kosten der Erstellung von Echtzeitanwendungen zu reduzieren
Planer
- (Golang) dkron – ein verteiltes, fehlertolerantes Jobplanungssystem für Cloud-native Umgebungen
- (Python) Sellerie – eine verteilte Aufgabenwarteschlange
- (Python) Apache Airflow – eine Plattform zum programmgesteuerten Erstellen, Planen und Überwachen von Workflows
Warteschlangen
- (Golang) nsq – fehlertolerante verteilte Messaging-Plattform in Echtzeit, die für den Betrieb in großem Maßstab konzipiert ist und Milliarden von Nachrichten pro Tag verarbeiten kann [Raft + gRPC]
- (Golang) Sandglass – verteilte, horizontal skalierbare, persistente, zeitlich geordnete Nachrichtenwarteschlange
- (Golang) dnpipes – verteilte Version von Unix-Named Pipes, vergleichbar mit AWS SQS
- (PHP) GatewayWorker – verteiltes Echtzeit-Messaging-Framework basierend auf Workerman
- (C++) ZeroMQ – Abstraktion asynchroner Nachrichtenwarteschlangen, mehrere Nachrichtenmuster, Nachrichtenfilterung (Abonnements), nahtloser Zugriff auf mehrere Transportprotokolle und mehr
- (Java) Apache Pulsar – verteilte Pub-Sub-Messaging-Plattform mit einem sehr flexiblen Messaging-Modell und einer intuitiven Client-API
- (Java) Apache ActiveMQ – Hochleistungs-Apache 2.0-lizenzierter Message Broker
Suchmaschinen
- (Java) ElasticSearch – verteilte, RESTful-Such- und Analyse-Engine
- (Java) Apache Lucene – eine leistungsstarke Textsuchmaschinenbibliothek mit vollem Funktionsumfang
- (Rust) MeiliSearch – Blitzschnelle, äußerst relevante und Tippfehler-tolerante Suchmaschine
- (JS) FlexSearch – speicherflexible Volltextsuchbibliothek
- (Golang) RiotSearch – verteilte, einfache und effiziente Volltextsuchmaschine
- (C++) Typesense – schnelle, tippfehlertolerante, unscharfe Suchmaschine
- (Rust) Sonic – schnelles, leichtes und schemaloses Such-Backend. Eine Alternative zu Elasticsearch, die mit wenigen MB RAM läuft
Dateisysteme
- (Golang) JuiceFS – Hadoop-kompatibles AWS S3-kompatibles Hochleistungs-POSIX-Dateisystem
- (Golang) SeaweedFS – ein einfaches Hadoop-kompatibles AWS S3-kompatibles verteiltes, hoch skalierbares verteiltes Dateisystem
- (C) GlusterFS – verteilter Speicher, der auf mehrere Petabyte skaliert werden kann
- (C++) GlusterFS – äußerst zuverlässiges, skalierbares und effizientes verteiltes Dateisystem. Es verteilt Daten über mehrere physische Server und macht sie für einen Endbenutzer als ein einziges Dateisystem sichtbar.
Diensterkennung
- (Golang) sleuth – Masterlose Peer-to-Peer-Autodiscovery und RPC zwischen HTTP-Diensten, die sich im selben Netzwerk befinden
Datenverarbeitung
- (Scala) Apache Spark – einheitliche Analyse-Engine für die Datenverarbeitung im großen Maßstab
TerminusDB
- (Prolog) terminusdb – verteilte Datenbank mit einem Kollaborationsmodell
Betriebssystem
- (C) HarveyOS – verteiltes Betriebssystem
Rahmenwerke
- (Golang) etcd – Framework für die Entwicklung verteilter Systeme. Bietet die Kernanforderungen für die Entwicklung verteilter Systeme, einschließlich RPC und ereignisgesteuerter Kommunikation
- (Golang) ergo - Hafen von Erlang/OTP-Anflügen in Golang
- (Golang) gosiris – ein Schauspieler-Framework für Golang
- (Python) cotyledon – ein Framework zur Definition lang laufender Dienste. Es bietet die Verarbeitung von Unix-Signalen, das Spawnen von Workern, die Überwachung untergeordneter Prozesse, das Neuladen von Daemons, SD-Benachrichtigung, Ratenbegrenzung für das Spawnen von Workern und mehr.
- (Java) Atomix – voll ausgestattetes Framework zum Aufbau fehlertoleranter verteilter Systeme [REST + Raft]
- (Kotlin) Orbit – virtuelles Akteur-Framework zum Aufbau verteilter Systeme
- (JS) hemera – Ein Node.js-Microservices-Toolkit für das NATS-Nachrichtensystem [RPC]
- (Python) Tooz – Zentralisierung der gängigsten verteilten Grundelemente wie Gruppenmitgliedschaftsprotokoll, Sperrdienst und Leiterwahl durch Bereitstellung einer Koordinations-API, die Entwicklern beim Erstellen verteilter Anwendungen hilft
- (C++) Nebula – leistungsstarkes Framework zum Erstellen hochgradig gleichzeitiger, verteilter und robuster nachrichtengesteuerter Anwendungen
- (GoLang) Service Weaver – Ein Framework, das es ermöglicht, Anwendungen als modulare Binärdatei zu schreiben und sie als eine Reihe von Microservices bereitzustellen
- (GoLang) Dapr – tragbare, serverlose, ereignisgesteuerte Laufzeit, die als Sidecar fungiert und es Entwicklern erleichtert, belastbare, zustandslose und zustandsbehaftete Mikrodienste zu erstellen
Komponenten
- (Golang) Dragonboat – eine leistungsstarke Mehrgruppen-Raft-Konsensbibliothek in reinem Go
- (Golang) Golimit – Uber Ringpop-basierter verteilter und dezentraler Ratenbegrenzer
- (Python) Tenacity – Allzweck-Wiederholungsbibliothek
- (Elixir) ex_hash_ring – reine Elixir-konsistente Hash-Ring-Implementierung basierend auf der hervorragenden C-Hash-Ring-Bibliothek
- (Elixir) Raft – Raft-Konsensimplementierung
- (C++) NuRaft – Raft-Implementierung, abgeleitet vom Cornerstone-Projekt
- (Python) Hyx – Leichte Fehlertoleranzprimitive für Ihre robusten und modernen Python-Microservices
- (Python) Migdalor – eine native Kubernetes-Peer-Erkennung für Python-Asyncio-Knoten
- (Golang) Skiplist – eine Golang-Implementierung der Skiplist-Datenstruktur
- (Java) Waltz – ein Quorum-basiertes verteiltes Write-Ahead-Protokoll zum Replizieren von Transaktionen
Andere Ressourcen
- awesome-scalability – Leseliste zur Veranschaulichung der Muster skalierbarer, zuverlässiger und leistungsfähiger Großsysteme
- awesome-distributed-systems – kuratierte Liste mit tollem Material zu verteilten Systemen
- awesome-database-learning – eine Liste von Lernmaterialien zum Verständnis der Interna von Datenbanken
- (C/C++)(Buch) Erstellen Sie Ihr eigenes Redis mit C/C++
- (C) (Artikel) Einen SQLite-Klon von Grund auf in C schreiben
- Berkley CS186: Einführung in Datenbanksysteme
- MIT 6.830: Datenbanksysteme