Somos una pequeña empresa emergente con una aplicación SAAS con muchos problemas de escritura y estamos (¡al fin!) Llegando al punto en que nuestro uso presenta problemas de escalabilidad. Tenemos un pequeño equipo, por lo que realmente apreciamos poder descargar sysadmin a Heroku y RDS.NuevoSQL frente a la optimización/fragmentación tradicional
Mientras Heroku es (en su mayoría) bien, tenemos un par de problemas con RDS:
- Escala. Esta es la mayor preocupación. Actualmente ejecutamos una instancia XL RDS. Podremos seguir por un tiempo más con optimizaciones sencillas, pero a menos que hagamos algunos cambios estructurales importantes en nuestra aplicación, llegaremos a un cuello de botella en algún momento.
Además, el tiempo de inactividad para cambiar el tamaño de instancia es una mierda.
Disponibilidad. Ejecutamos una instancia multi-AZ, por lo que deberíamos sobrevivir a un único corte de AZ. Pero RDS se basa en EBS, lo que me preocupa bastante dada la historia y el diseño de EBS.
Precio. Nuestro proyecto de ley RDS es 4x lo que le pagamos a Heroku. No me importa pagar a Amazon para que me salve la contratación de un administrador de sistemas, pero me encantaría encontrar algo menos costoso.
En mi opinión, tenemos dos opciones de seguir adelante: el enfoque tradicional (sharding, ejecutar un trabajo nocturno para mover partes de nuestra base de datos de sólo lectura, etc.); o una solución NewSQL (Xeround, VoltDB, NimbusDB, etc.).
Profesionales tradicionales: Se ha hecho muchas veces antes y hay formas bastante comunes de hacerlo.
Contras tradicionales: Tomará mucho trabajo e introducirá una complejidad significativa en la aplicación. Tampoco resolverá los problemas secundarios con RDS (disponibilidad y precio).
Nuevos profesionales de SQL: supuestamente, estas soluciones escalarán horizontalmente nuestra base de datos sin cambiar el código de la aplicación (sujeto a algunas restricciones en la funcionalidad de SQL como no usar el bloqueo pesimista). Esto nos ahorraría una gran cantidad de trabajo. También mejoraría la confiabilidad (no hay un único punto de falla) y reduciría los costos (no tener que ejecutar una instancia XL durante las horas no hábiles solo para proporcionar un uso máximo).
NewSQL contras: Estas soluciones son relativamente recientes, y no he podido encontrar buenas críticas ni comentarios sobre la experiencia de las personas con ellos en las aplicaciones de producción. Solo encontré uno disponible como solución alojada (Xeround), así que, a menos que lo hagamos, tendríamos que invertir recursos en sysadmin.
Me pregunto cuáles son las opiniones sobre cuál sería mi mejor opción.
Xeround es tremendamente tentador (alojado en NewSQL), pero no he podido encontrar ningún uso de buena información en la producción. Los pocos tweets que he visto han sido personas quejándose de que es un poco lento. Estoy bastante nervioso para pasar a algo que parece no probado.
El lado conservador de mí dice que seguir con RDS y utilizar un enfoque tradicional. Pero será realmente costoso en términos de tiempo de desarrollo.
Y a continuación, una parte de mí se pregunta si hay otra manera, tal vez una solución NewSQL alojado probado en batalla que no he oído hablar. O tal vez una solución NewSQL que tendríamos que alojar nosotros mismos, pero que tiene una historia realmente sólida.
Gracias de antemano por su opinión.