Hintergrund
- Wafris ist ein Open-Source-Unternehmen für Web Application Firewalls und bietet einen Rails-Middleware-Client an
- Der ursprüngliche v1-Client benötigte einen lokalen Redis-Datenspeicher, nun wurde jedoch ein v2-Client veröffentlicht, der SQLite verwendet
- Dieser Artikel behandelt den Entscheidungsprozess bei der Migration von Redis zu SQLite, Performance-Überlegungen und Architekturänderungen
Zusammenfassung
- SQLite, Redis und traditionelle RDBMS (Postgres/MySQL) haben jeweils Vor- und Nachteile
- Diese Datenspeicher sind nicht gegeneinander austauschbar, und der Versuch dazu kann Probleme verursachen
- Dieser Artikel beschreibt den Prozess, den Redis-basierten v1-Client in einen SQLite-basierten v2-Client umzubauen
Warum wurde diese Änderung erzwungen?
- Das Ziel von Wafris ist es, Entwicklern zu ermöglichen, ihre Websites einfach zu schützen
- Der v1-Client nutzte einen Redis-Datenspeicher, jedoch hatten viele Nutzer Probleme mit der Bereitstellung von Redis
- Um Nutzern die Last zu nehmen, selbst Redis-Administratoren zu werden, erfolgte der Wechsel zu SQLite
Was ist Geschwindigkeit?
- Redis ist schneller als traditionelle RDBMS, bringt aber weiterhin viel Verwaltungsaufwand mit sich
- In Cloud-Umgebungen ist Netzwerklatenz ein großes Problem
- SQLite kann durch die Reduzierung von Netzwerk-Roundtrips eine höhere Performance bieten
Monolithische Annahmen
- Viele verteilte Anwendungen verursachen Probleme beim Einsatz von Redis
- Um die Komplexität der Redis-Nutzung zu reduzieren, wurde die Architektur neu überdacht
Einführung von SQLite
- SQLite reduziert Engpässe bei der Netzwerk-I/O
- SQLite konkurriert mit dem Öffnen von Dateien (
fopen()) und nicht mit Client/Server-Datenbanken
Benchmarking von SQLite und Redis
- SQLite ist in bestimmten Anwendungsfällen etwa dreimal schneller als Redis
- Auch ohne Berücksichtigung von Netzwerklatenz ist SQLite schneller
Was in den Diagrammen fehlt
- Selbst wenn SQLite in Benchmarks schlechter abschneidet, kann es in realen Umgebungen aufgrund der Netzwerklatenz dennoch schneller sein
- SQLite lässt sich leicht horizontal skalieren und reduziert den Installations- und Konfigurationsaufwand für Nutzer
Aufbau einer Synchronisierungsarchitektur
- In v1 (Redis) wurden bei Regel-Updates durch den Nutzer die Änderungen im Redis-Datenspeicher gespeichert
- In v2 (SQLite) prüft der Client regelmäßig auf aktualisierte Regeln und lädt eine neue SQLite-Datenbank herunter
Verteilte Architektur mit SQLite
- Durch die Synchronisierung der SQLite-DB auf jede Compute-Instanz werden Datenbank-Engpässe vermieden
Fazit
- Die SQLite-basierte v2-Architektur hilft vielen Websites, Angriffe zu überstehen und online zu bleiben
- Sie verringert den Aufwand für Nutzer und trägt zu einem sichereren, besser geschützten Internet bei
Zusammenfassung von GN⁺
- Dieser Artikel erklärt den Migrationsprozess von Redis zu SQLite und die Gründe dafür
- SQLite verbessert die Performance, indem es Netzwerklatenz reduziert, und verringert den Installations- und Konfigurationsaufwand für Nutzer
- Die verteilte Architektur von SQLite löst Datenbank-Engpässe
- Der Artikel bietet Einblicke, wie sich eine Web Application Firewall einfach bereitstellen und schnell betreiben lässt
1 Kommentare
Hacker-News-Kommentare
Interesse an einem Modell, bei dem jeder Anwendungsserver eine SQLite-Datenbankdatei kopiert und regelmäßig austauscht
Die Lese-/Schreiblatenz von Redis ist proportional zur Anzahl der abgefragten Schlüssel
Der Datensatz sieht nach 1,2 Millionen Einträgen aus, ist tatsächlich aber nicht groß
mmapunterstützen würde, wäre es gut, die IP-Liste direkt zu verwendenBei einem internen Hackathon von Neon wurde ein Node.js-Server geschrieben, der das Redis-Protokoll in Postgres-Abfragen umwandelt
Auf der RailsWorld 2023 gab es eine negative Stimmung gegenüber Redis
SQLite scheint ein Nischen-Anwendungsfall zu sein, der serverseitig auch ohne Replikation gut funktioniert
Es gibt ein Projekt namens Redka, das Redis mit SQLite implementiert
Bestes Zitat: "SQLite konkurriert nicht mit Client/Server-Datenbanken. SQLite konkurriert mit fopen()."
Redis ist im Vergleich zu traditionellen RDBMS schnell, erfordert aber Verwaltung
Benchmarking ist eine dunkle Kunst, mit sehr präzisen Zahlen sich selbst zu täuschen