J'ai commencé à travailler sur un projet open source il y a environ un an pour créer une alternative intégrable à Redis dans Go. C'est à ce moment-là que j'ai commencé à construire le projet EchoVault. Depuis, le projet a suscité un certain intérêt et même quelques contributeurs.
Cet article présente EchoVault, ses fonctionnalités, ses cas d'utilisation et les motivations derrière son développement.
Qu’est-ce qu’EchoVault ?
EchoVault est une banque de données en mémoire intégrable conçue pour les applications Go. Il fournit une interface compatible RESP sur TCP tout en offrant la flexibilité d'être intégré directement dans les applications.
Ce faisant, EchoVault vise à remplacer les magasins de données en mémoire traditionnels comme Redis dans certains cas d'utilisation, en offrant des fonctionnalités similaires avec une intégration améliorée pour Go.
Pourquoi EchoVault a été construit
Mes motivations initiales pour créer EchoVault étaient :
- Flexibilité intégrée : les magasins de données en mémoire traditionnels comme Redis sont des services externes qui nécessitent une gestion et un déploiement séparés. EchoVault élimine cette surcharge en permettant aux développeurs d'intégrer le magasin de données directement dans leurs applications, rationalisant ainsi le processus de déploiement.
- Intégration de l'écosystème Go : EchoVault est conçu principalement pour Go, garantissant une intégration transparente et des performances optimales au sein des applications Go. Cependant, il maintient également la compatibilité RESP sur TCP, ce qui le rend compatible avec les clients Redis existants tels que redis-cli et Jedis.
- Modifications de la licence Redis : EchoVault est open source (sous licence Apache 2.0). Nous nous engageons à rester sur ce modèle entièrement open-source et non open-core.
Fonctionnalités fournies par EchoVault
EchoVault regorge de fonctionnalités qui en font un choix robuste pour le stockage de données en mémoire :
- Support TLS et mTLS : communication sécurisée avec prise en charge de plusieurs autorités de certification racine de serveurs et de clients (RootCA).
Prise en charge du cluster de réplication : utilise l'algorithme RAFT pour la réplication et le clustering.
- Couche de contrôle d'accès : fournit l'authentification et l'autorisation de l'utilisateur pour sécuriser l'accès aux données.
- Fonctionnalité Pub/Sub distribuée : prend en charge la publication/l'abonnement aux canaux et aux modèles pour le traitement des données en temps réel.
- Structures de données : nous prenons en charge une variété de structures de données, notamment des ensembles, des ensembles triés, des hachages, des listes, etc. Nous continuons à ajouter davantage de structures de données et de commandes en leur sein.
- Couche de persistance : cette couche garantit la durabilité des données avec la persistance des instantanés et des ajouts uniquement. Les fichiers AOF sont compatibles RESP mais pas encore entièrement compatibles Redis.
- Politiques d'expulsion de clés : met en œuvre diverses stratégies d'expulsion de clés afin de gérer l'utilisation de la mémoire. EchoVault propose une expulsion de clé passive et active. Avec l’expulsion passive des clés, les clés expirées ne sont expulsées qu’au prochain accès. Avec l'expulsion active, EchoVault supprimera de manière proactive les clés expirées.
- Extensions de commandes : permet l'extension d'exécution des commandes via des fichiers objets partagés et une API intégrée.
La liste des fonctionnalités continue de s’allonger alors que nous en sommes aux premiers stades de développement. Nous avons d'autres fonctionnalités intéressantes prévues pour l'avenir, notamment :
- Flux.
- Extensions avec modules Lua.
- Partage.
Architecture d'EchoVault
EchoVault prend en charge les déploiements autonomes et en cluster.
Mode autonome
En mode autonome, EchoVault exploite une seule instance (autonome). C'est le moyen le plus simple d'exécuter EchoVault. Vous pouvez exécuter une instance autonome à partir de la bibliothèque intégrée ou la démarrer en tant que son propre processus acceptant les connexions TCP.
L'instance intégrée peut également accepter les connexions TCP, vous permettant de communiquer avec votre processus Go à partir d'un client TCP.
Mode cluster de réplication RAFT
Pour les applications nécessitant une forte cohérence et une tolérance aux pannes, EchoVault prend en charge un mode cluster de réplication basé sur RAFT.
RAFT est un algorithme de consensus qui garantit la cohérence des données sur les systèmes distribués. Dans ce mode, plusieurs instances EchoVault peuvent former un cluster, assurant la réplication des données et garantissant que les données restent cohérentes même en cas de panne de nœud.
Principales caractéristiques du mode cluster RAFT :
- Tolérance aux pannes : garantit la disponibilité des données même en cas de défaillance de certains nœuds du cluster.
- Cohérence : garantit que tous les nœuds du cluster ont les mêmes données.
- Évolutivité : permet une mise à l'échelle horizontale en ajoutant plus de nœuds au cluster.
Vous pouvez exécuter des clusters EchoVault même en modes intégrés. Cela signifie que vos instances d'application peuvent communiquer entre elles via la couche EchoVault sans avoir à déployer un troisième service. Ceci est idéal pour les cas d’utilisation tels que la gestion de sessions sur un cluster d’instances d’une application.
Cas d'utilisation d'EchoVault
La polyvalence d'EchoVault le rend adapté à un large éventail d'applications. Voici quelques cas d'utilisation potentiels :
- Mise en cache en mémoire
Scénario : un site Web de commerce électronique doit mettre en cache les détails du produit et les informations sur la session utilisateur pour améliorer les performances.
Solution : utilisez EchoVault pour mettre en cache les données fréquemment consultées afin d'accélérer les temps de réponse.
Avantages : chargements de pages plus rapides, expérience utilisateur améliorée et charge de base de données réduite.
- Découverte de services
Scénario : Une architecture de microservices nécessite une découverte de services dynamique pour la communication interservices.
Solution : stockez les points de terminaison de service dans EchoVault, permettant aux services de se découvrir et de communiquer efficacement les uns avec les autres.
Avantages : Découverte de services simplifiée et efficacité de communication améliorée.
- Gestion des sessions
Scénario : une application Web distribuée doit gérer les sessions utilisateur sur plusieurs instances.
Solution : utilisez le cluster intégré EchoVault pour stocker les données de session, garantissant ainsi la cohérence et l'accessibilité sur toutes les instances d'application.
Avantages : gestion cohérente des sessions sur l'ensemble du cluster de l'application sans déployer un service secondaire comme Redis.
- Analyses en temps réel
Scénario : Une plateforme de trading financier nécessite une analyse et une surveillance en temps réel des données commerciales.
Solution : stockez et traitez les données commerciales en temps réel dans EchoVault, en tirant parti de ses ensembles triés et de ses capacités de publication/sous-traitance pour le suivi et l'analyse.
Avantages : traitement des données en temps réel et analyses plus rapides.
- File d'attente des tâches distribuées
Scénario : un système backend doit gérer et distribuer des tâches sur plusieurs nœuds de travail.
Solution : implémentez une file d'attente de tâches à l'aide de la structure de données de liste d'EchoVault, dans laquelle les tâches sont placées dans la liste et les nœuds de travail affichent les tâches pour traitement.
Avantages : répartition efficace des tâches et évolutivité.
- Indicateurs de fonctionnalités et gestion de la configuration
Scénario : une application SaaS doit activer ou désactiver dynamiquement des fonctionnalités et gérer les paramètres de configuration sans redéployer l'application.
Solution : stockez les indicateurs de fonctionnalités et les paramètres de configuration dans EchoVault.
Avantages : Gestion dynamique de la configuration et temps d'arrêt réduits.
- Limitation de débit et limitation
Scénario : une passerelle API doit appliquer des limites de débit et limiter les demandes pour éviter les abus et garantir une utilisation équitable.
Solution : implémentez une limitation de débit à l'aide des fonctionnalités en mémoire d'EchoVault pour suivre le nombre de requêtes et appliquer les limites en temps réel.
Avantages : Limitation de débit efficace et fiabilité améliorée de l'API.
- Élection du chef
Scénario : Un cluster de services distribués doit élire un leader pour coordonner les tâches.
Solution : comptez sur l'élection du leader du cluster distribué intégré d'EchoVault pour garantir qu'une seule instance d'application est désignée comme leader.
Avantages : Élection fiable des dirigeants et coordination améliorée sans la mettre en œuvre vous-même au niveau de l'application.
Conclusion
EchoVault est un projet ambitieux. Au cours de ces premières étapes, nous nous attendons à ce que de nombreux problèmes soient résolus et que de nombreuses fonctionnalités soient ajoutées. Cependant, nous sommes heureux de relever ce défi et serions ravis d'impliquer la communauté Go dans le projet.
Si cet article a éveillé votre curiosité, ou si vous souhaitez contribuer à un projet comme celui-ci, consultez notre GitHub et envoyez-nous une étoile ! Nous sommes toujours ouverts à plus de commentaires et de contributions !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!