Estamos recibiendo un ataque DDoS, pero no estamos haciendo nada
- Desde hace varias semanas, alguien ha estado intentando lanzar un ataque DDoS.
- Están inundando el servidor con millones de solicitudes para intentar descargar el archivo de configuración millones de veces.
- Solo en los últimos 5 días, han intentado descargarlo más de 800,000 veces, y el archivo de configuración pesa alrededor de 200MB por descarga.
- La mayor parte del tráfico proviene de la UE, especialmente de Alemania y el Reino Unido.
- El ataque sigue en curso incluso en este momento, mientras se escribe esta entrada del blog.
Lo que estamos haciendo en esta situación urgente
- No bloqueamos las direcciones IP del atacante.
- Usamos Cloudflare, pero no activamos el modo "Under Attack".
- Durante el ataque, la CPU del servidor permanece casi inactiva la mayor parte del tiempo.
- En general, no estamos haciendo casi nada.
¿Por qué?
- El servicio puede manejar decenas de miles de millones de solicitudes al mes sin problemas y sin un costo elevado.
- Tenemos alrededor de 8 servicios API y bases de datos, y pueden procesar decenas de miles de millones de solicitudes al mes incluso sin caché.
- Tenemos Cloudflare y ancho de banda ilimitado.
¿Cómo es posible?
- El diseño de la app TablePlus es simple, y esta filosofía también se aplica a los servicios backend, que se mantienen al mínimo.
- No usamos servicios de terceros como Vercel o Netlify. En su lugar, usamos un servidor web sin límites.
- En el pasado, un VPS/procesador débil hacía que el monolito fuera un cuello de botella, pero hoy en día un VPS potente puede manejar decenas de miles de millones de solicitudes al mes en una sola instancia.
- Por eso construimos un servicio monolítico para cada app. Es fácil de desplegar y mantener.
Hablemos del monolito
- Hay una tendencia a volver todo más complejo, pero eso no es un problema hasta que realmente exista presión o restricciones.
- Elegimos el monolito porque odiamos la complejidad. Integramos en un solo servicio todo lo que la app necesita.
- El despliegue es simple. Solo se necesita un archivo de configuración, compilación y despliegue.
- Con menos dependencias, es más fácil depurar e identificar cuellos de botella.
Un solo framework web en Go o Rust puede manejar decenas de miles de millones de solicitudes al mes si está bien implementado
- Elegimos un framework de alto rendimiento.
- Indexamos la base de datos para reducir el tiempo de recuperación a medida que crece el conjunto de datos.
- Separamos la base de datos principal de la base de datos de logs/uso para evitar que los problemas de rendimiento afecten al negocio principal.
- Usamos un proxy inverso potente como Nginx para procesar y distribuir las solicitudes hacia la API central.
- Ponemos todo detrás de Cloudflare y lo configuramos correctamente.
- Usamos un CDN con protección DDoS.
- No alojamos archivos grandes para descarga en el VPS sin CDN ni caché.
Hablemos del despliegue
- En TablePlus, simplificamos el proceso de despliegue tanto como sea posible.
- No usamos Docker, Kubernetes ni contenedores, y no hace falta configurar entornos.
- Usamos binarios. Los binarios se pueden copiar y ejecutar como procesos en un servidor Linux.
- Elegimos Go y Rust. Son lenguajes de alto rendimiento y pueden generar archivos binarios para el despliegue.
Actualización
- Vercel se puso en contacto y dijo que tiene funciones para proteger el sitio en situaciones como esta.
- A través del control de gasto, se puede establecer un límite de gasto, y también tienen un modo de desafío contra ataques similar al modo "Under Attack" de CF.
La opinión de GN⁺
- Este artículo resalta la importancia de una infraestructura sólida y una estrategia de despliegue simplificada para mantener un servicio estable incluso frente a ataques DDoS.
- La arquitectura monolítica demuestra ventajas para reducir la complejidad, simplificar el despliegue y favorecer la optimización del rendimiento.
- El uso efectivo de servicios en la nube y CDN para lograr resiliencia ante ataques DDoS puede ser un buen ejemplo para otras empresas.
- Este enfoque también ofrece ideas para construir infraestructura rentable, especialmente para startups en etapa temprana o pequeñas y medianas empresas.
- Sin embargo, un enfoque monolítico no es adecuado para todos los sistemas o aplicaciones, por lo que es importante elegir una arquitectura acorde con las necesidades y circunstancias de cada caso.
1 comentarios
Opiniones de Hacker News
Resumen del primer comentario:
Resumen del segundo comentario:
Resumen del tercer comentario:
Resumen del cuarto comentario:
Resumen del quinto comentario:
Resumen del sexto comentario:
Resumen del séptimo comentario:
Resumen del octavo comentario:
Resumen del noveno comentario:
Resumen del décimo comentario: