Contexte
- Wafris est une entreprise open source de pare-feu pour applications web, qui fournit un client middleware Rails
- Le client v1 initial nécessitait un stockage de données Redis local, mais l’entreprise lance désormais un client v2 utilisant SQLite
- Cet article traite du processus de décision de migration de Redis vers SQLite, des considérations de performance et des changements d’architecture
Résumé
- SQLite, Redis et les SGBD relationnels traditionnels (Postgres/MySQL) ont chacun leurs avantages et leurs inconvénients
- Ces stockages de données ne sont pas interchangeables, et essayer de les substituer les uns aux autres peut poser problème
- Cet article explique le processus de refonte du client v1 basé sur Redis en un client v2 basé sur SQLite
Pourquoi ce changement a-t-il été imposé ?
- L’objectif de Wafris est de permettre aux développeurs de protéger facilement leurs sites
- Le client v1 utilisait un stockage Redis, mais de nombreux utilisateurs rencontraient des problèmes de déploiement de Redis
- Le passage à SQLite vise à leur éviter la charge de devoir devenir administrateurs Redis
Qu’est-ce que la vitesse ?
- Redis est rapide par rapport aux SGBD relationnels traditionnels, mais il reste encore beaucoup d’éléments à gérer
- Dans le cloud, la latence réseau constitue un problème majeur
- SQLite peut offrir de meilleures performances en réduisant les allers-retours réseau
L’hypothèse monolithique
- De nombreuses applications distribuées rencontrent des problèmes avec l’usage de Redis
- L’architecture a été repensée pour réduire la complexité liée à l’utilisation de Redis
Adoption de SQLite
- SQLite réduit les goulots d’étranglement liés aux IO réseau
- SQLite rivalise avec l’ouverture d’un fichier (
fopen()), et non avec une base de données client/serveur
Benchmark SQLite vs Redis
- SQLite est environ 3 fois plus rapide que Redis dans certains cas d’usage
- Même sans prendre en compte la latence réseau, SQLite reste plus rapide
Ce qui manque dans les graphiques
- Même si les performances de SQLite étaient moins bonnes dans les benchmarks, il peut être plus rapide en conditions réelles à cause de la latence réseau
- SQLite facilite la montée en charge horizontale et réduit la charge d’installation et de configuration pour les utilisateurs
Mise en place d’une architecture de synchronisation
- En v1 (Redis), lorsqu’un utilisateur mettait à jour les règles, celles-ci étaient mises à jour dans le stockage Redis
- En v2 (SQLite), le client vérifie périodiquement les règles mises à jour et télécharge une nouvelle base de données SQLite
Architecture distribuée avec SQLite
- Le problème de goulot d’étranglement de la base de données est résolu en synchronisant la base SQLite sur chaque instance de calcul
Conclusion
- L’architecture v2 basée sur SQLite aide de nombreux sites à résister aux attaques et à rester en ligne
- Elle impose moins de contraintes aux utilisateurs et contribue à un Internet plus sûr et mieux sécurisé
Le résumé de GN⁺
- Cet article explique le processus de migration de Redis vers SQLite et les raisons de ce choix
- SQLite améliore les performances en réduisant la latence réseau et diminue la charge d’installation et de configuration pour les utilisateurs
- L’architecture distribuée de SQLite résout les problèmes de goulot d’étranglement de la base de données
- Cet article apporte des enseignements sur la manière de déployer facilement un pare-feu d’application web et de le faire fonctionner rapidement
1 commentaires
Commentaires sur Hacker News
Intérêt pour un modèle où chaque serveur applicatif copie le fichier de base de données SQLite et le remplace périodiquement
La latence en lecture/écriture de Redis est proportionnelle au nombre de clés interrogées
Le jeu de données semble contenir 1,2 million d’éléments, mais il n’est en réalité pas très volumineux
mmap, il serait préférable d’utiliser directement une liste d’IPLors d’un hackathon interne chez Neon, un serveur Node.js a été écrit pour traduire le protocole de Redis en requêtes Postgres
À RailsWorld 2023, il y avait une certaine tonalité négative autour de Redis
SQLite semble correspondre à un cas d’usage de niche où il fonctionne bien côté serveur sans réplication
Il existe un projet appelé Redka, qui implémente Redis avec SQLite
Meilleure citation : "SQLite ne concurrence pas les bases de données client/serveur. SQLite concurrence
fopen()."Redis est plus rapide qu’un SGBDR traditionnel, mais il demande de l’administration
Le benchmarking est un art obscur qui consiste à se tromper soi-même avec des chiffres d’une précision extrême