Ich habe vor etwa einem Jahr mit der Arbeit an einem Open-Source-Projekt begonnen, um eine einbettbare Alternative zu Redis in Go zu entwickeln. Zu diesem Zeitpunkt begann ich mit dem Aufbau des EchoVault-Projekts. Seitdem hat das Projekt einiges Interesse und sogar einige Mitwirkende gewonnen.
In diesem Artikel werden EchoVault, seine Funktionen, Anwendungsfälle und die Beweggründe für seine Entwicklung vorgestellt.
Was ist EchoVault?
EchoVault ist ein einbettbarer In-Memory-Datenspeicher, der speziell auf Go-Anwendungen zugeschnitten ist. Es bietet eine RESP-kompatible Schnittstelle über TCP und bietet gleichzeitig die Flexibilität, direkt in Anwendungen eingebettet zu werden.
Auf diese Weise möchte EchoVault in einigen Anwendungsfällen herkömmliche In-Memory-Datenspeicher wie Redis ersetzen und ähnliche Funktionalitäten mit verbesserter Integration für Go bieten.
Warum EchoVault gebaut wurde
Meine anfänglichen Beweggründe für den Aufbau von EchoVault waren:
- Eingebettete Flexibilität: Herkömmliche In-Memory-Datenspeicher wie Redis sind externe Dienste, die eine separate Verwaltung und Bereitstellung erfordern. EchoVault eliminiert diesen Overhead, indem es Entwicklern ermöglicht, den Datenspeicher direkt in ihre Anwendungen einzubetten und so den Bereitstellungsprozess zu optimieren.
- Go-Ökosystem-Integration: EchoVault wurde hauptsächlich für Go entwickelt und gewährleistet eine nahtlose Integration und optimale Leistung innerhalb von Go-Anwendungen. Es behält jedoch auch die RESP-Kompatibilität über TCP bei, sodass es mit vorhandenen Redis-Clients wie redis-cli und Jedis kompatibel ist.
- Redis-Lizenzänderungen: EchoVault ist Open Source (lizenziert unter Apache 2.0). Wir sind bestrebt, bei diesem vollständig Open-Source-Modell und nicht bei Open-Core zu bleiben.
Von EchoVault bereitgestellte Funktionen
EchoVault ist vollgepackt mit Funktionen, die es zu einer robusten Wahl für die In-Memory-Datenspeicherung machen:
- TLS- und mTLS-Unterstützung: Sichere Kommunikation mit Unterstützung für mehrere Server- und Client-Stammzertifizierungsstellen (RootCAs).
Unterstützung für Replikationscluster: Nutzt den RAFT-Algorithmus für Replikation und Clustering.
- Zugriffskontrollschicht: Bietet Benutzerauthentifizierung und Autorisierung zum sicheren Datenzugriff.
- Verteilte Pub/Sub-Funktionalität: Unterstützt das Veröffentlichen/Abonnieren von Kanälen und Mustern für die Datenverarbeitung in Echtzeit.
- Datenstrukturen: Wir unterstützen eine Vielzahl von Datenstrukturen, darunter Mengen, sortierte Mengen, Hashes, Listen und mehr. Wir fügen ihnen weiterhin weitere Datenstrukturen und Befehle hinzu.
- Persistenzschicht: Diese Schicht gewährleistet Datenbeständigkeit mit Snapshot- und Dateipersistenz nur beim Anhängen. Die AOF-Dateien sind RESP-kompatibel, aber noch nicht vollständig Redis-kompatibel.
- Richtlinien zur Schlüsselentfernung: Implementiert verschiedene Strategien zur Schlüsselentfernung, um die Speichernutzung zu verwalten. EchoVault verfügt über eine passive und aktive Schlüsselentfernung. Bei der passiven Schlüsselentfernung werden abgelaufene Schlüssel erst beim nächsten Zugriff entfernt. Bei aktiver Räumung löscht EchoVault proaktiv abgelaufene Schlüssel.
- Befehlserweiterungen: Ermöglicht die Laufzeiterweiterung von Befehlen über gemeinsam genutzte Objektdateien und eine eingebettete API.
Die Funktionsliste wird ständig erweitert, da wir uns noch in einem frühen Entwicklungsstadium befinden. Für die Zukunft haben wir noch einige weitere coole Funktionen geplant, darunter:
- Streams.
- Erweiterungen mit Lua-Modulen.
- Sharding.
Architektur von EchoVault
EchoVault unterstützt sowohl eigenständige als auch Cluster-Bereitstellungen.
Standalone-Modus
Im Standalone-Modus betreibt EchoVault eine einzelne (Standalone-)Instanz. Dies ist die einfachste Möglichkeit, EchoVault auszuführen. Sie können eine eigenständige Instanz aus der eingebetteten Bibliothek ausführen oder sie als eigenen Prozess starten, der TCP-Verbindungen akzeptiert.
Die eingebettete Instanz kann auch TCP-Verbindungen akzeptieren, sodass Sie über einen TCP-Client mit Ihrem Go-Prozess kommunizieren können.
RAFT-Replikationsclustermodus
Für Anwendungen, die eine hohe Konsistenz und Fehlertoleranz erfordern, unterstützt EchoVault einen RAFT-basierten Replikationsclustermodus.
RAFT ist ein Konsensalgorithmus, der die Datenkonsistenz über verteilte Systeme hinweg gewährleistet. In diesem Modus können mehrere EchoVault-Instanzen einen Cluster bilden, der eine Datenreplikation ermöglicht und sicherstellt, dass die Daten auch bei Knotenausfällen konsistent bleiben.
Hauptmerkmale des RAFT-Cluster-Modus:
- Fehlertoleranz: Stellt die Datenverfügbarkeit sicher, auch wenn einige Knoten im Cluster ausfallen.
- Konsistenz: Garantiert, dass alle Knoten im Cluster über dieselben Daten verfügen.
- Skalierbarkeit: Ermöglicht horizontale Skalierung durch Hinzufügen weiterer Knoten zum Cluster.
Sie können EchoVault-Cluster sogar im eingebetteten Modus ausführen. Das bedeutet, dass Ihre Anwendungsinstanzen über die EchoVault-Schicht miteinander kommunizieren können, ohne einen dritten Dienst bereitstellen zu müssen. Dies ist ideal für Anwendungsfälle wie die Sitzungsverwaltung in einem Cluster von Anwendungsinstanzen.
Anwendungsfälle für EchoVault
EchoVault ist aufgrund seiner Vielseitigkeit für eine Vielzahl von Anwendungen geeignet. Hier sind einige mögliche Anwendungsfälle:
- In-Memory-Caching
Szenario: Eine E-Commerce-Website muss Produktdetails und Benutzersitzungsinformationen zwischenspeichern, um die Leistung zu verbessern.
Lösung: Verwenden Sie EchoVault, um häufig aufgerufene Daten zwischenzuspeichern und so die Antwortzeiten zu verkürzen.
Vorteile: Schnelleres Laden von Seiten, verbesserte Benutzererfahrung und geringere Datenbankbelastung.
- Diensterkennung
Szenario: Eine Microservices-Architektur erfordert eine dynamische Serviceerkennung für die Kommunikation zwischen Services.
Lösung: Speichern Sie Dienstendpunkte in EchoVault, damit Dienste effizient erkennen und miteinander kommunizieren können.
Vorteile: Vereinfachte Serviceerkennung und verbesserte Kommunikationseffizienz.
- Sitzungsverwaltung
Szenario: Eine verteilte Webanwendung muss Benutzersitzungen über mehrere Instanzen hinweg verwalten.
Lösung: Verwenden Sie den eingebetteten EchoVault-Cluster zum Speichern von Sitzungsdaten und stellen Sie so Konsistenz und Zugänglichkeit über alle Anwendungsinstanzen hinweg sicher.
Vorteile: Konsistente Sitzungsverwaltung im gesamten Anwendungscluster, ohne dass ein sekundärer Dienst wie Redis bereitgestellt werden muss.
- Echtzeitanalyse
Szenario: Eine Finanzhandelsplattform erfordert Echtzeitanalysen und Überwachung von Handelsdaten.
Lösung: Speichern und verarbeiten Sie Echtzeit-Handelsdaten in EchoVault und nutzen Sie die sortierten Sätze und Pub/Sub-Funktionen für die Nachverfolgung und Analyse.
Vorteile: Datenverarbeitung in Echtzeit und schnellere Analysen.
- Verteilte Aufgabenwarteschlange
Szenario: Ein Backend-System muss Aufgaben verwalten und an mehrere Worker-Knoten verteilen.
Lösung: Implementieren Sie eine Aufgabenwarteschlange mithilfe der Listendatenstruktur von EchoVault, in der Aufgaben auf die Liste verschoben werden und Arbeitsknoten Aufgaben zur Verarbeitung bereitstellen.
Vorteile: Effiziente Aufgabenverteilung und Skalierbarkeit.
- Feature Flags und Konfigurationsmanagement
Szenario: Eine SaaS-Anwendung muss Funktionen dynamisch aktivieren oder deaktivieren und Konfigurationseinstellungen verwalten, ohne die Anwendung erneut bereitzustellen.
Lösung: Speichern Sie Funktionsflags und Konfigurationseinstellungen in EchoVault.
Vorteile: Dynamisches Konfigurationsmanagement und reduzierte Ausfallzeiten.
- Ratenbegrenzung und Drosselung
Szenario: Ein API-Gateway muss Ratenbegrenzungen und Drosselungsanforderungen durchsetzen, um Missbrauch zu verhindern und eine faire Nutzung sicherzustellen.
Lösung: Implementieren Sie eine Ratenbegrenzung mithilfe der In-Memory-Funktionen von EchoVault, um die Anzahl der Anfragen zu verfolgen und Grenzwerte in Echtzeit durchzusetzen.
Vorteile: Effektive Ratenbegrenzung und verbesserte API-Zuverlässigkeit.
- Führerwahl
Szenario: Ein Cluster verteilter Dienste muss einen Leiter wählen, der die Aufgaben koordiniert.
Lösung: Verlassen Sie sich auf die Leader-Wahl des eingebetteten verteilten Clusters von EchoVault, um sicherzustellen, dass nur eine Anwendungsinstanz als Leader bestimmt wird.
Vorteile: Zuverlässige Wahl des Leiters und verbesserte Koordination, ohne diese selbst auf Anwendungsebene implementieren zu müssen.
Abschluss
EchoVault ist ein ehrgeiziges Projekt. Wir gehen davon aus, dass in diesem frühen Stadium viele Probleme behoben und viele Funktionen hinzugefügt werden müssen. Wir freuen uns jedoch über diese Herausforderung und würden gerne die Go-Community in das Projekt einbeziehen.
Wenn dieser Artikel Ihre Neugier geweckt hat oder Sie daran interessiert sind, zu einem Projekt wie diesem beizutragen, schauen Sie sich unseren GitHub an und hinterlassen Sie uns einen Stern! Wir sind immer offen für weiteres Feedback und Beiträge!
Das obige ist der detaillierte Inhalt vonEchoVault: Einbettbare Redis-Alternative in Go. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!