Dimensionar MySQL y Frontales

J

Hola a tod@s:

Estoy buscando ayuda para solucionar unos "pequeños cálculos" que no encuentro cómo realizar. A ver si hay algún experto que me pueda dar sus estimaciones o alguien me puede decir dónde o cómo aprender a hacerlos.

Os pongo en antecedentes rápidamente. Estoy montando una aplicación web que va a funcionar, o eso espero, tirando de Lighttpd y MySQL Cluster (NDB, sí). Ya está, éste es el problema: no sé cómo dimensionar ambos, es decir, tanto los frontales como el cluster, máquina a máquina, para soportar según qué tráficos y peticiones. Obviamente, empezaremos como todo el mundo con cero usuarios, pero no quiero que nos pillemos los dedos y he hecho cálculos para todo:

1.000 usuarios => 5,25 tx/s => 1,25 KB/s
10.000 usuarios => 52,5 tx/s => 12,5 KB/s
100.000 usuarios => 1.000 tx/s => 240 KB/s
1.000.000 usuarios => 10.500 tx/s => 2.45 MB/s
10.000.000 usuarios => 105.000 tx/s => 24.5 MB/s
100.000.000 usuarios => 1.050.000 tx/s => 245 MB/s

Son estimaciones de cuántas transacciones (tx) por segundo tendría en la base de datos y el total de tráfico por segundo que moverían esas transacciones. La cuestión, como os digo es: ¿Cuántos frontales necesitaría en cada caso y cuál sería su configuración (RAM, procesadores, balanceo de carga en caso de ser necesario...)? Y ¿cuántos nodos debería tener el Cluster MySQL de cada tipo (API, datos, gestión) y cuál sería su configuración (RAM, procesadores, conexión de Mbit o Gbit...)?

Lo que realmente me gustaría es encontrar la forma de calcular o estimar esto, aunque fuera vagamente, más que alguien me dijera "necesitas esto", porque quiero saber el por qué de las cosas, pero no encuentro información. ¿Alguien me puede decir algo?

Por cierto, también tengo los tamaños de la base de datos:

1.000 usuarios => Unos 10 MB
10.000 usuarios => Unos 50 MB
100.000 usuarios => Entre 200 y 500 MB
1.000.000 usuarios => Entre 1,5 GB y 2,3 GB
10.000.000 usuarios => Entre 9 y 20 GB
100.000.000 usuarios => Entre 110 y 300 GB

Conforme más se descontrola el número de usuarios, más horquilla veo que me dan los cálculos, pero bueno, es una pista al menos...

Gracias de antemano!!

suaveSHOW

#1 Oye, sin aportar nada a tu tema, que me metí por curiosidad, no crees que la cifra de 10.000.000 de usuarios es ya un poquito exagerada? pocas webs tienen tantos no? xD

1 respuesta
HeXaN

#2 Seguramente sea algún tipo de ejercicio de la facultad o cualquier cosa de esas. O eso o que tiene una proyección de negocio alucinante y quiere dejarlo todo atado desde el principio.

Soltrac

Es una gran pregunta la que te haces. Es imposible darte una respuesta exacta, pero hay alguien que lleva una página importante y ha tenido por supuesto las mismas dudas que tú. Échale un vistazo a la solución que sigue:

http://gallir.wordpress.com/2009/12/30/como-montamos-meneame-en-amazon-ec2/

J

suaveSHOW, sí, 10 millones da miedo. Llegaremos o no llegaremos, pero tenemos que intentarlo y pensar las cosas bien desde le principio. El objetivo no es 10, sino más y lo hacemos pensando en ese objetivo. Si no funciona, pues bueno, desistimos y al menos lo hemos intentado, pero no hemos pensado en pequeño y nos hemos quedado pequeños y sin capacidad de respuesta por no hacer una buena previsión de posibilidades.

HeXaN, no es un ejercicio teórico. Es algo real y pretendemos que pronto vea la luz. Sí, tenemos una proyección de negocio muy potente y como dices, quiero tener todo claro desde el principio.

Soltrac, cuento con que es imposible dar una respuesta exacta, pero algo como lo que me has pasado es lo que busco, si nadie puede darme una estimación aunque sea vaga o algunos criterios para hacer cálculos. Eso sí, conocía ese caso que me has puesto y yo mismo me planteo usar Amazon, aunque no de esa forma. El problema es que el caso es un poco diferente. No sé si meneame sigue funcionando con InnoDB, pero nosotros lo haremos con MySQL Cluster y montar eso con Amazon, al parecer, es harto complicado, aparte de no muy eficiente. Es lo que he encontrado buceando por ahí que decía alguien que trabaja para Percona y tuvo que montar un sistema MySQL Cluster usando Amazon. Si no recuerdo mal, pensó que era imposible inicialmente, pero después lo consiguió. Pero aun así, no es la forma idónea de montar esto. Aparte de que la hora de Percona está a 300 dólares y no me lo puedo permitir.

No obstante, os agradezco mucho a los tres el interés y el aporte de meneame a ti, Soltrac, de verás.

Bueno, ¿alguna otra idea, sugerencia, experiencia, conocido que sepa...?

Gracias de nuevo!

2 respuestas
B

#5 estás basando toda la escalabilidad de tu proecto a nivel hardware?. Solo pocas plataformas llegan a 10M de usuarios y como ejemplo te puedo decir que trabajo en una red social de contactos muy popular en sudamérica que lleva desde el 2004 y anda sobre los 2M de usuarios... Como ya te han dicho es imposible determinado la escalabilidad del proyecto en base al número de usuarios.

1 respuesta
BLZKZ

#5 por mucho que planifiques para 10 millones vas a tener que meter mucho músculo y usar treaks y muchas mierdas con mysql.

Con previsión de 10 millones de usuarios publicando contenido no bajaría de nosql para BBDD nunca, o eso o ve ahorrando varios cientos de miles de € xD

1 respuesta
J

#6 Igual no te estoy entendiendo bien. Me explico, no sólo estoy intentando estar preparado para el futuro a nivel de hardware, también a nivel de software, incluido el código con el que trabajamos en la base de datos. No sé si esto te responde. La cuestión es que a nivel soft, no veo tantos problemas. Ahí creo que me muevo con algo más de soltura, aunque hay miles de cosas que desconozco, como todo el mundo, pero en parte por experiencia en parte porque consigo encontrar la información que necesito no me veo tan limitado.

Mi limitación está en el asunto del hardware. Dicho esto, comprendo lo que quieres decir, pero no tenemos otro dato. Si te resulta más realista, olvida la "columna" de la izquierda y considera sólo tx/s, tráfico por segundo y tamaño de base de datos. La realidad después será como sea, eso es indiscutible, pero tenemos esas estimaciones y necesito establecer una correspondencia, si es posible, que no lo sé, entre tx/s, tráfico y tamaño de la base de datos por un lado y configuración del cluster por otro. Con eso supongo que podría ver en cada momento cuando se acerca una situación de no ser capaz de soportar la demanda. Si después sólo conseguimos 10 usuarios y 4 transacciones por minuto, pues nada, cerramos el chiringuito, pero quiero saber lo que necesito para esas 4 transacciones por minuto (por poner una cifra), si es que es algo que se pueda saber. Y teniendo una correspondencia entre las cifras que doy y el hw necesario puedo tener precios, que es de lo que se trata y de lo que quieren oír hablar los inversores. Ni quiero gastar más de lo necesario ni menos de lo necesario. Quiero gastar lo necesario y dar un servicio a la altura del producto que vamos a ofrecer.

Viendo que parece que tienes mucha experiencia en eso de tratar con bases de datos considerables, con esos 2 millones de usuarios de la red social, aunque lo nuestro no es una red social, el problema se parece mucho. No sé si usáis MySQL y, en caso de que sí, si usáis MySQL Cluster como hacemos nosotros, pero entiendo que tú posiblemente sepas las necesidades de hw que habéis tenido que satisfacer para dar soporte a una demanda de usuarios de ese calibre, y si estabas desde el principio, sabrás qué hizo falta para pocos usuarios, para una cifra mediana, para muchos, para muchiiiiiiiiisimos y para una cifra brutal como la de los dos millones. ¿Me podrías aportar algo en ese sentido? ¿Alguna pista, quizás?

Muchas gracias!

2 respuestas
HeXaN

#8 Pues la verdad no sé que haces preguntando en MV y no directamente a un analista o algún tipo de esos que cobran por estas cosas xD

Lo digo porque proyectos grandes requieren cosas grandes y dudo que en MV encuentres las respuestas para este tema en concreto.

1 respuesta
J

#7 Jeje, qué manía con los 10 millones... Llegaremos o no llegaremos, eso es lo de menos en este momento. Yo creo que sí, que llegaremos. Es más, estoy seguro de que los 10 millones nos sabrán a poco dentro de unos años (2, 3 años calculo, como mucho). Y es más aún, puede que nosotros no lleguemos, pero alguien haciendo algo similar llegará.

Pero insisto, eso es lo de menos. Siempre que entro en algún sitio, sin registrarme siquiera ni escribir, sino simplemente googleando, buscando información de aplicaciones web con muchos usuarios, aparece lo mismo: mucha gente diciendo, más o menos: "menos lobos, hombre", pero nadie responde realmente a la pregunta. Vale, jeje, si seguramente tendréis razón y no llegaremos ni a 10000, sólo el tiempo lo dirá. Pero eso en este momento es irrelevante. Si eso fuera lo relevante habría abierto un post del tipo "Creéis que se puede llegar a 10 millones de usuarios haciendo ...". Lo que busco no es que creáis en mi proyecto, para eso ya estoy yo :P. Lo que busco es que si alguien sabe cómo estimar qué hw hace falta para algo como eso, que me aporte algo de luz.

Después si yo me equivoco y no llego a nada, os invito a unas cañas. Pero si acierto, me invitáis vosotros, y me voy a pillar el pelotazo del siglo :P. Menos mal que no bebo, jeje.

Enga, gracias a todos!

1 respuesta
B

#8 Está montado bajo Mysql + instancias lighthttp en amazon ec2 autoescalables. No está montado en modo cluster sino master/slave balanceando las peticiones de escritura a master y las de lectura a slave. Ahora mismo los únicos cuellos de botella que tenemos son ocasionados por un esquema de base de datos obsoleto y por código mal optimizado. Casi todo está cacheado con memcache para reducir consultas redundantes y usamos sphinx como indexador de búsquedas.
También te puedo dar otro ejemplo donde un solo servidor web con nginx y un mysql aguanta 6000 usuarios con uso intenso del tráfico(juegos) sin problemas.

1 respuesta
J

#9 Pues mira, pregunté aquí porque vi un hilo donde algunos usuarios con bastante idea, o eso parecía, que habían creado plataformas en internet que funcionan respondían a otro usuario que tenía problemas con su base de datos. Y las respuestas me parecieron muy útiles.

Y no creas que no lo he mirado: 300 dólares la hora cobran los amigos de Percona. Pero precisamente esa es la pescadilla que se muerde la cola: los inversores quieren saber de qué cifras estamos hablando como inversión inicial, porque yo no puedo afrontar toda la inversión si queremos salir con músculo al mercado. Y no puedo dar esa estimación sin saber qué hw necesito. Todo lo demás ya está estimado. Pero para estimar el HW o me busco la vida (como hago aquí y con esto supongo que respondo) o pago un pastizal que no me puedo permitir a una consultora. Pero para pagar ese pastizal necesitaría que el inversor aflojara la pasta. Y él no afloja sin estimación.

Plis, la cuestión no ésta, la cuestión es: ¿alguien sabe de lo que necesito? Y, si alguien sabe, ¿está dispuesto a arrojar algo de luz sobre mi oscuridad? Si una de las dos preguntas tiene como respuesta "no", pues fin. Voy a buscar a otro sitio :P. De hecho, tengo varios frentes más abiertos, pero tengo que intentarlo por todos los medios a mi alcance ;)

BLZKZ

#10 si yo no he dicho que no vayas a llegar, he dicho que en el caso de que llegues tu planificación de sw y hw actual se quedará corta no, cortísima xD

Por desgracia vivo en el mundo de las BBDD (no por ello tengo más o menos razón) pero si algo he aprendido es que las planificaciones de este tipo suelen fallar, y terminas teniendo que meter más chicha (HW)

1 respuesta
J

#11 Mola, 10 millones de gracias umbranoide ;) Amazon era una opción que me planteaba y con el esquema que tenemos podríamos trabajar con otro motor distinto de NDB sin cambiar nada en el código y migrar entonces en un futuro a cluster si fuera necesario. ¿Entiendo que usáis InnoDB o estoy metiendo la pata?

La pega que le veía a Amazon era esa, que montar el cluster no era recomendable, pero si funcionáis bien y tenéis mucha carga (entiendo que los juegos generan un tráfico formidable), empiezo a pensar que a lo mejor no es necesario de inicio tirar por cluster. A lo mejor pienso que el código es bueno y después petamos el sistema con 100 usuarios (no lo creo), pero debo entender de lo que dices que es posible trabajar con Amazon y tener un buen rendimiento incluso para cosas muy tochas.

¿Crees que podríais seguir con el mismo sistema, escalándolo, aunque aumente considerablemente vuestro tráfico?

Muchas gracias de nuevo!

J

#13 Claro compañero, con eso cuento. Es más, mi configuración actual no puede soportar nada :P porque estamos en un servidor montado por mí mismo, tirando a la vez de todo, un cluster virtual con un total de 6 nodos, lightty y php. Es simplemente un entorno de pruebas.

Pero al inversor, a priori, eso le da un poco lo mismo. Quiere ver un número. Si tengo una estimación inicial, ya tengo algo. A la larga, la estimación se verá que no se corresponde con la realidad (no sé en tu trabajo, pero en el mío se suele decir que las estimaciones están para incumplirlas :P), pero si, digamos, montamos algo inicialmente que se corresponde con la estimación de tráfico para X, y después cuando vayamos por X - Y ya nos estamos pillando los dedos, es que la cosa marcha, tendremos ingresos y podremos afrontar las cosas sin necesidad de acudir al inversor inicial, con lo que ya dará igual. Y si tenemos que seguir acudiendo a él, siempre podemos decir algo del tipo: "es que va todo tan bien que todas las estimaciones se han roto porque generamos tanto tráfico que no lo podemos soportar ya. Mete más pasta y habrá más beneficios", tú me entiendes, pero hasta entonces habremos estado funcionando y más vale pillarnos los dedos cuando vayamos por X - Y que pillárnoslos cuando estemos en X - Y - Z - Q - W :P, que es algo que quiero evitar.

Y que nadie se ofenda por lo que he dicho de los 10 millones, que por cierto, no iba por ti BLZKZ (siento confundirte al enlazar, no lo hice correctamente), no pretendo eso ni mucho menos. Simplemente lo he puesto como algo general que veo y que en realidad, ahora mismo no le veo importancia (en el futuro se la veré tanto si llegamos como si no, xD). Por tu parte, te agradezco lo que me dices de NoSQL. De hecho había leído algo sobre ello, y de ahí lo de intentar tirar de MySQL Cluster. Un experto con el que, desgraciadamente, no puedo contar ahora para esto, ya me dijo que en realidad MySQL es casi más NoSQL que SQL, vamos que no es en realidad una solución SQL. Lo he leído en más sitios, aunque en ese sentido me tengo que creer lo que me digan, porque tampoco yo lo tengo muy claro.

Usuarios habituales