Requerimientos mínimos de servidor

He realizado una aplicación en PHP+Mysql para realizar un test universitario en linea, el sistema es bastante sencillo y tendrá un aproximado de 250 usuarios conectados, la aplicación realiza un update a un único registro en una única tabla de la base de datos cada vez que el estudiante contesta.

Mi pregunta se relaciona con los requerimientos mínimos del servidor para que la aplicación no colapse, en el sentido de memoria, procesador y de ser posible la capacidad de la red para soportar la interacción de esta cantidad de usuarios.

3 Respuestas

Respuesta
1

No se exactamente cuantos datos tiene que transmitir cada usuario en los test ni tampoco la cantidad de memoria que consumen los 250 usuarios, pero creo que el cuello de botella estará en el acceso a la base de datos aunque tendrías que saber cuanto tiempo dura el acceso de lectura de datos y tiempo de grabado en la base de datos y numero de accesos totales en cada usuario.

Por ponerte un ejemplo, si el formulario para cargarlo se necesita en cada usuario 1 seg para acceder/grabar el test de 1Mb y el usuario de tiempo medio tarda 4 minutos en responder tendrás que en 4 minutos solo ha usado cada usuario 1 seg la base de datos y te podrá servir prácticamente cualquier PC y usarlo como servidor, en cambio si el test es muy pesado tanto en recursos de RAM, como en transferencia de datos necesitaras un equipo muy potente para poder soportar tantos usuarios.

¿Los 250 usuarios estarían dentro de la LAN de la universidad o se conectarían a través de internet?

Al momento de ingresar al sistema al usuario se le carga todo el test (realizando todas las consultas de select, insert necesarias), aproximadamente entre 500 KB a 1MB de información entre texto e imágenes.


Por cada vez que el estudiante responda una pregunta se realizará la actualización de información en la base de datos de un único registro, en una única tabla, este registro posee 8 campos tipo texto a parte del id autoincremental.


En este caso, existirán 250 estudiantes concurrentes, pero no todos realizarán el grabado de información al mismo tiempo, pues varia en la velocidad de lectura/respuesta de cada estudiante; una vez realizado el grabado la página deberá volverse a cargar, es por ello que necesitaría alguna información respecto del ancho de banda de la red, puesto que el servidor estará en una intranet de la Universidad, aunque existen equipos fuera de la red, mayoritariamente el manejo de información es dentro del campus.


Mil gracias por su respuesta anterior, espero pueda colaborarme despejando mis dudas

Te cuento un poco, la velocidad "normal" de grabación de un HDD es de solo 22-30MB por segundo, lo que significa que si cada usuario consume 1MB al iniciar el test y vamos a suponer que entre el refresco de cada contestación y la pantalla final en total son unos 3 MB significa que solo podrían usarlo 10 usuarios al mismo tiempo, la ventaja como tu dices es que aunque sean 250 usuarios si en total tardan 4 minutos en hacer el test te podría servir sin problemas un PC normal y corriente.

Una gran ventaja para tu sistema seria que consiguieses meter todos los formularios en memoria RAM y que se pudiesen enviar a los usuarios sin tener que acceder al HDD y usar solo este para grabar los datos en formato texto, que ocupan una mínima parte e iría muchísimo mas rapido el equipo.

En cuanto a la LAN puedes utilizar una conexión de 1Gb con un cable normal UTP y conexiones de 100MB para los usuarios.

Respuesta
1

Lamentablemente la información que me das no es suficiente.

Para llegar a calcular el requerimiento de hardware necesito saber más cosas sobre software.

Sobretodo quisiera saber tres cosas:

- ¿Cuántas updates/insert/deletes estimas se harán en la BBDD cada segundo?

- ¿Cuántos Selects por minuto?

- ¿Has cuidado los índices de MySql?

Al momento de ingresar al sistema al usuario se le carga todo el test (realizando todas las consultas de select, insert necesarias), aproximadamente entre 500 KB a 1MB de información entre texto e imágenes.

Por cada vez que el estudiante responda una pregunta se realizará la actualización de información en la base de datos de un único registro, en una única tabla, este registro posee 8 campos tipo texto a parte del id autoincremental.

En este caso, existirán 250 estudiantes concurrentes, pero no todos realizarán el grabado de información al mismo tiempo, pues varia en la velocidad de lectura/respuesta de cada estudiante; una vez realizado el grabado la página deberá volverse a cargar, es por ello que necesitaría alguna información respecto del ancho de banda de la red, puesto que el servidor estará en una intranet de la Universidad, aunque existen equipos fuera de la red, mayoritariamente el manejo de información es dentro del campus.

Mil gracias por su respuesta anterior, espero pueda colaborarme despejando mis dudas

Por lo que me comentas, el mayor cuello de botella está en el inicio del test.

Poniéndonos en el caso peor, si se conectan 250 estudiantes a la vez, habrá un pico de 250 megas de tráfico.

Dado que duda que se conecten todos en el mismo instante, y suponiendo una red intranet Ethernet de baja calidad (10 Mb/s), con que se reparta su entrada al test durante un minuto no debería haber problema.

En cuanto a la Base de Datos, por lo que me comentas no parece que vaya a haber demasiada carga. Un MySql con índices bien configurados debería aguantar bien incluso con equipos no muy potentes.

Respuesta
1

Habría que ver en que estado esta el código, si esta lo suficientemente depurado y tratado de errores, que no existan conexiones que queden siempre abiertas o procesos "zombie" (en el caso de que existieran).

Por todo lo demás, yo recomendaría hacer pruebas en servidores "domésticos" o ordenadores que no sean de "producción" y mirar hasta donde se puede extender los requerimientos ya que no es una ciencia cierta.

Aun así, para tener mas datos y poder darte una idea aproximada.

.- ¿Los 250 usuarios seria en la mayoría de los casos concurrentes?

.- ¿Sera en una red Local o vía Internet?

.- ¿Qué sistema operativo se pretende usar, Windows o Linux?

.- ¿A qué te refieres cuando hablas de "capacidad de la red"?

Comentame eso y seguimos hablando.

Un atento saludo

En cuanto a lo que se refiere a depuración de código me he asegurado que toda conexión a la base, realice la consulta y se cierre la conexión. Se trabajará sobre Linux, Apache, Mysql y PHP

Al momento de ingresar al sistema al usuario se le carga todo el test (realizando todas las consultas de select, insert necesarias), aproximadamente entre 500 KB a 1MB de información entre texto e imágenes.


Por cada vez que el estudiante responda una pregunta se realizará la actualización de información en la base de datos de un único registro, en una única tabla, este registro posee 8 campos tipo texto a parte del id autoincremental.


En este caso, existirán 250 estudiantes concurrentes, pero no todos realizarán el grabado de información al mismo tiempo, pues varia en la velocidad de lectura/respuesta de cada estudiante; una vez realizado el grabado la página deberá volverse a cargar, es por ello que necesitaría alguna información respecto del ancho de banda de la red, puesto que el servidor estará en una intranet de la Universidad, aunque existen equipos fuera de la red, mayoritariamente el manejo de información es dentro del campus.


Mil gracias por su respuesta anterior, espero pueda colaborarme despejando mis dudas

Te puedo dar, mas o menos los requisitos que podría llegar a necesitar el sistema para funcionar bien, sin necesidad de gastar demasiado en ese sistema.

De todas formas (y antes de darte la información, ya que puede variar dependiendo de la respuesta) ¿Es necesario que cada vez que el usuario realize una modificación, el sistema la guarde, y cargue de nuevo la pagina?

Eso hace que nada mas entrar, y cada vez que el usuario, modifica alguna de las respuestas, se haga una petición a la base de datos, primero para guardar y luego para cargar de nuevo todos los campos de la pagina.

Eso hace que en un momento determinado, y si todos lo hicieran a la vez (aunque es muy improbable que ocurra) se ejecuten unas 500 peticiones en pocos segundos, 250 de guardar y otras 250 de petición de datos.

Esos campos, que se usan en el cuestionario, ¿son siempre fijos? ¿O varían dependiendo el usuario o las respuestas anteriores del mismo?

Si son estáticos, pueden incluirse directamente en la web, e incluso mas seguro (si es eso lo que se busca con las peticiones), hacerse en una carga de un XML, lo que reduce drásticamente la carga a la BBDD, y hace el sistema mucho mas ligero.

Miralo y me comentas.

En realidad se realiza la carga a la base cada vez que el usuario contesta una pregunta (realizado mediante Ajax) pues podría suceder que el CPU se apague o el usuario cierre el navegador, lo cual nos dejaría sin las últimas respuestas.

Las preguntas que forman el cuestionario son una combinación aleatoria de un gran banco de preguntas, lo que representaría la mayor carga de consultas a la base y trabajo de procesador.

Gracias por tus ideas para mejorar el trabajo de este proyecto, si tienes alguna otra sugerencia lo agradezco de antemano

Dado que Ajax te simplifica mucho ese tipo de transferencias de datos (Gracias a los XML) y que con ellos reduces drásticamente las peticiones y respuestas del servidor...

Yo creo que con unos 4GB de RAM DDR2 o 2GB DDR3 (tirando a lo máximo) y un doble núcleo (podría ser mas dependiendo del proceso de selección de las preguntas y su correspondiente procesamiento, pero como un E6860 creo que de sobra) o similares te puede servir

Con eso tendrías suficiente. Ademas eso si, te recomendaría una tarjeta de red de por lo menos una Gigabit Ethernet (10/100/1000) para dar ancho de banda a todas las peticiones, aunque luego eso dependerá de la categoría y hardware sobre la que este construida la red LAN.

De todas formas no se si tienes presupuesto para esto, o si ya disponéis de servidores/ordenadores con lo que hacer pruebas, porque también habría que hacerle pruebas de estrés y demás.

Lo mejor es probarlo todo en una maquina virtual con un Host potente e ir aumentando los requerimientos si se ve flojo, es la mejor manera de sacarle provecho a un servidor potente.

Yo tengo un HP ML110 G6 y lo tengo todo con maquinas virtuales. Si las haces por hardware aprovechas mucho mejor el servidor que si lo haces por ejemplo con VirtualBox o demás software que hace virtualización de escritorios...

Te recomiendo KVM o XEN, son ahora mismo los mejores.

Yo lo tengo con XEN y de maravilla.

Miralo y me comentas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas