2010-05-31 6 views
23

Estoy planeando crear una aplicación que obtendrá una gran cantidad de tráfico. (Por favor, no diga que no obtendré tráfico, esto es para una red interna, por lo que el tráfico estará allí. Solo trato de evitar el 'No obtendrá mucho tráfico, no se preocupe').¿Qué se necesita para hacer un sitio web que necesite escalar?

En cuanto a qué tipo de tráfico estoy esperando, los usuarios buscarán varias creadas dinámicamente (según los detalles de la cuenta de usuario). En esos sitios, el usuario puede enviar entradas de texto. Tanto cargar las páginas como manejar la entrada del usuario golpearán la base de datos. Las cargas obviamente serán leídas, pero la entrada de manejo requerirá las dos lecturas &. Las entradas también pueden afectar las vistas de otros usuarios. Si esto sucede, tendré que notificar a los otros usuarios para actualizar la página.

¿Qué tipo de cosas debo hacer para que no solo se cuelguen bajo la carga de una gran cantidad de usuarios?

¿Cuáles son los factores limitantes? ¿Bases de datos? E/S con front end?

Nunca antes había desarrollado una aplicación web seria y estoy buscando ayuda.

EDIT: Estaba considerando usar Erlang para el backend ya que lo he usado un poco y realmente me gustan todas las cosas de concurrencia. ¿Sería esta una opción viable o debería intentar algo más tradicional?

+5

Consulte http://highscalability.com/ - artículos muy interesantes sobre exactamente su tema. Especialmente los casos y las explicaciones de la vida real (aunque escuetos) son difíciles de leer. –

+1

Especifique el tipo de tráfico que espera tener. ¿Habrá grandes cargas/descargas de archivos? ¿Va a ser interactivo? ¿Será una de las principales aplicaciones en esa red? ¿O simplemente haciendo clic y viendo páginas estáticas varias veces al día? – stagas

+0

Pertenece a ServerFault, creo. –

Respuesta

17

Este es un tema muy importante, y es probable que desee hacer tanta investigación como lo permita el tiempo. Hay varios grandes temas a considerar.

  1. Almacenamiento de estado de sesión. Obviamente, el almacenamiento de la sesión ocupa memoria o espacio en el disco. Debe tener una estrategia para almacenar la información de la sesión correctamente y de una manera que pueda ser utilizada por una granja de servidores web.

  2. Almacenamiento en caché. Una estrategia sólida de almacenamiento en caché puede reducir las cargas de manera espectacular. Investigue mucho sobre cuándo, qué y dónde debe almacenar en caché.

  3. Escalabilidad y pruebas de carga. Se debe pensar más en cada operación de obtención de recursos para asegurarse de que se realice las veces que sea necesario. Las pruebas de carga y los perfiles de código pueden ayudar a identificar los cuellos de botella aquí si usa buenas herramientas.

  4. Optimización de la base de datos. Asegúrese de comprender cómo optimizar adecuadamente su base de datos para miles (millones) de operaciones por minuto. Si su aplicación tiene mucha carga de escritura, es posible que deba considerar el almacenamiento de datos anteriores que ya no es necesario incluir en los índices para acelerar sus operaciones de escritura.

  5. Ruta de actualización. ¿Su tráfico aumentará con el tiempo? Asegúrese de comprender cómo conectará más servidores y memoria a su aplicación si es necesario y lo que se requeriría.

Hay muchos libros alrededor de los que podrías invertir que probablemente darían grandes dividendos. Haga una búsqueda para "crear aplicaciones web escalables" en Amazon o en capítulos y probablemente encontrará muchos textos para seguir, tanto específicos de tecnología como agnósticos.

+0

Gracias! Eso proporciona algunas cosas para mirar. – samoz

+0

Si está utilizando ASP.Net o ASP.Net MVC como su pila de tecnología, el sitio de MSDN tiene muchos artículos que pueden ayudarlo a comenzar con todos estos conceptos para esas tecnologías. – womp

+0

Un buen consejo sobre el n. ° 2 es usar un proxy de almacenamiento en caché siempre que sea posible, p. Barniz o Calamar Eso puede reducir drásticamente la carga en los servidores de su aplicación, ya que no tendrán que regenerar páginas para cada visitante. – Martin

0

simplemente no haga más de lo necesario. si te aferras a eso, puedes manejar la mayoría de las cosas sin los efectos del metablog.

1

Además de todo lo mencionado aquí, debería estar mirando el tiempo de su tráfico.¿Es relativamente constante a lo largo del tiempo? ¿O viene en ráfagas, donde obtendrá una mayor cantidad de tráfico en un corto período de tiempo?

En general, querrá diseñar un sistema que pueda manejar las cargas pico con elegancia (aunque no necesariamente en el nivel de rendimiento ideal). Si su tráfico es muy acelerado, tendrá que dedicar más esfuerzo para hacerlo a escala de lo que lo haría si recibiera la misma cantidad de tráfico gradualmente.

1

Por lo que respecta a Erlang, suena como un lenguaje aceptablemente bueno (basado en lo poco que sé sobre él), pero ciertamente no es una varita mágica que le da escalabilidad. Hay docenas de diferentes factores y productos a considerar. La elección del idioma es solo una de ellas ... y probablemente una de las menos significativas.

Puede ser mejor que vaya con lo que ya sabe & aprendiendo cómo hacerlo a escala, en lugar de ir a una tecnología nueva/desconocida y esperando que se adapte a usted.

+0

Bueno, vengo de un fondo incrustado o de nivel de sistema C, por lo que puedo comenzar donde sea. Me gustó mirar a Erlang porque es un lenguaje funcional, pero también por los altos aspectos de simultaneidad que ha promocionado. – samoz

1

El almacenamiento de fondo, el manejo de la base de datos, el contenido dinámico del front-end y el almacenamiento en caché es una cosa. La consideración de su proveedor de servicios de host y el ancho de banda de red disponible es la otra.

Consulte con su servicio de alojamiento sus límites de ancho de banda, la asignación máxima de memoria por solicitud, los tamaños máximos de carga de archivos y las consultas máximas de la base de datos. Si su host actual no ofrece servicios baratos que coincidan con sus requisitos de escala, entonces cambie a otro host antes de que se cierre o quede fuera de guardia mediante una factura mensual de tres dígitos para revisar su ancho de banda asignado.

Editar: simplemente vuelva a leer y capte su referencia de "red interna". Por lo tanto, en este caso, es probable que el administrador de su red no le impida un recibo de varios cientos de dólares, pero aún así pueden clausurarlo. Asegúrese de mantener abiertas las líneas de comunicación con los administradores de red y los administradores de cualquier otro servicio con el que interactúe su propio sitio, o es probable que se convierta en enemigo de todos ellos con bastante rapidez. En otras palabras: buena etiqueta de red.

Además, si es propietario y construye el servidor, asegúrese de que el sistema operativo, la pila de software y el hardware estén actualizados con versiones estables de software y firmware, que puedan manejar la carga y supervisados ​​para funcionar sin problemas en todo el tiempo.

Edición n. ° 2: Sé que usted preguntó específicamente cómo su aplicación puede manejar la carga, y es posible que esté despotricando fuera del tema, pero también debe considerar si usted y sus compañeros de equipo pueden manejar la carga. El ancho de banda de Manpower es igual de importante, y la carga de trabajo desanima la forma en que fracasan proyectos como este. Beer es el mejor amigo de un programador, especialmente cuando aborda tareas de programación complejas y creativas, pero puede conducir a serios problemas de bebida si la mano de obra no se maneja correctamente o si faltan recursos de mano de obra. ¿Quién va a responder a la notificación de interrupción a las 3 de la mañana? ¿Quién va a responder al correo electrónico de odio de los fundamentalistas religiosos o trolls, o rastrear a través de la ley y las patentes para verificar si ese aviso de desmontaje es falso? A menos que sea un concierto que pueda pagar las facturas, es probable que la mayoría de la gente no pueda dedicar mucho tiempo y energía. No pretendo desanimarte en absoluto, y espero que ya lo hayas cubierto.

+0

Gracias por el consejo. Si trasladamos esto a internet (puede suceder eventualmente si este piloto tiene éxito), recordaré investigarlo. – samoz

Cuestiones relacionadas