Sabes, esta es una forma bastante estándar de escalar el número de consultas que puedes manejar. Tanto Postgres como MySQL, estoy bastante seguro de que bifurcan procesos por conexión, por lo que tienen un límite superior en el número de conexiones que pueden manejar. Y así, puedes escalar el rendimiento ejecutando réplicas de lectura, pero esto tampoco es gratuito. Tus réplicas de lectura deben conectarse a tu database principal para transmitir el registro de replicación , lo que agrega carga a tu database principal. Y estás agregando una carga operativa significativa al ejecutar tu database en producción.
Entonces, esto sigue siendo mucho trabajo. Es un costo considerable. Y al final del día, solo estás mejorando el rendimiento, no la latencia, porque es el mismo motor de database, ejecutando la misma consulta, solo en otro servidor. Y luego, eso nos lleva a la tercera opción, que es construir esta solución de almacenamiento en caché personalizada. La idea aquí es ejecutar una consulta una vez, almacenar los resultados en algo como Redis o Memcached, y luego, si los data no han cambiado, puedes leer los data de Redis o Memcached. Pero esto, ya sabes, esto es mucho trabajo. Esto es código que tienes que escribir. Antes, tu aplicación solo hacía consultas SQL contra MySQL o Postgres. Ahora, tienes que, ya sabes, tienes un patrón de acceso totalmente diferente para acceder a estas cachés. Tienes que lidiar con la invalidación de las cachés en las escrituras. Y con frecuencia, esto es algo totalmente manual. Entonces, puedes introducir errores donde olvidas invalidar una caché en una escritura en particular. Y estos errores, ya sabes, he pasado meses de mi vida rastreando errores que al final, ya sabes, resultó que simplemente olvidamos invalidar la caché en una escritura. Y aún estás agregando carga operativa, porque tienes que ejecutar este servicio adicional. Y hay muchos otros problemas, ya sabes, pequeños problemas marginales que vienen con ejecutar estas cachés. Ya sabes, la recuperación y conmutación por error, ejecutar estas cachés en un escenario distribuido puede ser realmente complicado. Y tienes este problema donde, debido a la invalidación en las escrituras, si tienes muchas escrituras, entonces debes ejecutar la consulta nuevamente contra tu database principal. Y tienes este problema de manada rugiente, donde, ya sabes, si un montón de personas solicitan los mismos data contra una entrada de caché invalidada, ya sabes, puedes poner mucha carga en tu database principal y, ya sabes, causar muchos problemas en producción.
Pero la idea aquí, la idea detrás de ReadySet es que estas tres opciones no son muy buenas. Y sería genial si no tuviéramos que hacer ninguna de ellas. Ya sabes, queremos centrarnos, en lugar de centrarnos en, ya sabes, escalar nuestra database, queremos centrarnos en desarrollar funciones que nuestros usuarios deseen, ya sabes, hacer felices a nuestros clientes. Y todo este problema de escalar la database es algo que distrae. Entonces, esto nos lleva a lo que creo que es tan emocionante de ReadySet, es que te permite escalar sin lidiar con ninguno de esos problemas de los que hablamos anteriormente y que Griffin mencionó en las últimas diapositivas. Entonces, esto muestra algunas de las características más emocionantes de ReadySet. Número uno, es plug and play.
Comments