Contexto
- Wafris es una empresa de firewall de aplicaciones web de código abierto que ofrece un cliente de middleware para Rails
- El cliente v1 inicial requería un almacén de datos Redis local, pero ahora lanzó un cliente v2 que usa SQLite
- Este artículo trata sobre el proceso de decisión para migrar de Redis a SQLite, las consideraciones de rendimiento y los cambios de arquitectura
Resumen
- SQLite, Redis y los RDBMS tradicionales (Postgres/MySQL) tienen cada uno ventajas y desventajas
- Estos almacenes de datos no son intercambiables entre sí, y tratar de hacerlo puede causar problemas
- Este artículo explica el proceso de reconstrucción del cliente v1 basado en Redis hacia un cliente v2 basado en SQLite
¿Qué forzó este cambio?
- El objetivo de Wafris es permitir que los desarrolladores protejan sus sitios fácilmente
- El cliente v1 usaba un almacén de datos Redis, pero muchos usuarios tuvieron problemas al desplegar Redis
- Se cambió a SQLite para reducir la carga de tener que convertirse en administrador de Redis
¿Qué es la velocidad?
- Redis es rápido en comparación con los RDBMS tradicionales, pero aun así hay muchos elementos que administrar
- En entornos en la nube, la latencia de red se vuelve un problema importante
- SQLite puede ofrecer un rendimiento más rápido al reducir los tiempos de ida y vuelta por la red
Suposiciones monolíticas
- Muchas aplicaciones distribuidas generan problemas al usar Redis
- Se replanteó la arquitectura para reducir la complejidad del uso de Redis
Adopción de SQLite
- SQLite reduce los cuellos de botella de IO de red
- SQLite compite con abrir archivos (
fopen()), no con bases de datos cliente/servidor
Benchmarking de SQLite y Redis
- SQLite es aproximadamente 3 veces más rápido que Redis en ciertos casos de uso
- Incluso sin considerar la latencia de red, SQLite es más rápido
Lo que falta en los gráficos
- Incluso si el rendimiento de SQLite fuera peor en los benchmarks, en entornos reales puede ser más rápido debido a la latencia de red
- SQLite facilita la escalabilidad horizontal y reduce la carga de instalación y configuración para el usuario
Construcción de una arquitectura de sincronización
- En v1 (Redis), cuando el usuario actualizaba las reglas, estas se actualizaban en el almacén de datos Redis
- En v2 (SQLite), el cliente revisa periódicamente si hay reglas actualizadas y descarga una nueva base de datos SQLite
Arquitectura distribuida con SQLite
- El problema de los cuellos de botella de la base de datos se resuelve sincronizando la DB de SQLite en cada instancia de cómputo
Conclusión
- La arquitectura v2 basada en SQLite ayuda a que muchos sitios resistan ataques y permanezcan en línea
- Genera menos carga para el usuario y ofrece una Internet más segura y reforzada en seguridad
Resumen de GN⁺
- Este artículo explica el proceso y las razones para migrar de Redis a SQLite
- SQLite mejora el rendimiento al reducir la latencia de red y disminuye la carga de instalación y configuración para el usuario
- La arquitectura distribuida de SQLite resuelve los problemas de cuellos de botella de la base de datos
- El artículo ofrece una perspectiva sobre cómo desplegar un firewall de aplicaciones web de forma sencilla y hacerlo funcionar rápidamente
1 comentarios
Opiniones de Hacker News
Me interesa un modelo en el que cada servidor de aplicaciones copia un archivo de base de datos SQLite y lo reemplaza periódicamente
La latencia de lectura/escritura de Redis es proporcional a la cantidad de claves consultadas
El dataset parece tener 1.2 millones de elementos, pero en realidad no es grande
En un hackatón interno de Neon, escribieron un servidor en Node.js que convierte el protocolo de Redis en consultas de Postgres
En RailsWorld 2023 había un ambiente negativo hacia Redis
SQLite parece un caso de uso de nicho que funciona bien del lado del servidor sin replicación
Existe un proyecto llamado Redka que implementa Redis sobre SQLite
La mejor cita: "SQLite no compite con las bases de datos cliente/servidor. SQLite compite con fopen()."
Redis es rápido frente a un RDBMS tradicional, pero requiere administración
Hacer benchmarking es un arte oscuro para engañarte con números extremadamente precisos