web applications - open - ¿Cómo se maximiza el rendimiento del servidor?
application monitoring open source (3)
He estado tratando de entender el rendimiento y la escalabilidad, y me gustaría saber qué hacen los desarrolladores / administradores de sistemas para mejorar sus sistemas. Para estandarizar las respuestas, sería útil que pudieras tomar la mejor decisión al responder a cualquiera de los siguientes:
- Perfil - Publicación de la revista en Joomla; Tablero de trabajos en CodeIgniter + OpenId + AJAX
- Rendimiento : ¿solicitudes máximas por segundo por servidor ?
- Hardware : ¿servidor, enrutador, disco, LAN?
- Software - Lighttpd, Memcache, Barniz, Nginx, Squid, Pound, LVS, eAccelerator, etc.
- Servicios : Amazon S3, Akamai, Google compute, etc.
- Configuración : hash estático, módulo Upstream, Memcache durante x minutos después de n solicitudes, deshabilitar solicitudes de registro de imágenes, etc.
- Otro - ¿Algo más? (Por ejemplo, las tablas normalizadas son malas para sitios con muchas lecturas)
Editar: vuelva a considerar antes de cerrar esta pregunta, ya que es importante para los desarrolladores web buscar estas cosas. Un programador podría modificar los puntos y comas de su código pero aún así perder ante un mal codificador que escribe para memcached o logra armar un CDN a través de Google App Engine.
No tengo tiempo para responder a tu pregunta bullet by bullet. =) Pero puedo recomendar una estrategia general para separar las preocupaciones y no unir los recursos del servidor cuando no hay una necesidad inmediata. mod_proxy (y cualquier equivalente) es tu amigo. Hace que sea fácil lanzar hardware a los problemas de rendimiento que se muestran. Por supuesto, no tiene que factorizar el sistema a la perfección desde el principio (ya que es realmente difícil anticipar dónde aparecerán los cuellos de botella reales). Pero cuando encuentras problemas Recuerda a tu amigo
Nuestro sistema: no puedo decirle mucho al respecto, pero es una gran aplicación SaaS que sirve a muchos clientes que pagan.
Cada pieza de trabajo de rendimiento / capacidad que hacemos se hace con mucho cuidado; no podemos simplemente probar las cosas para ver si funcionan.
Inicialmente habría algún análisis del rendimiento y la capacidad actuales, si podríamos seguir trabajando de todos modos.
Si es posible, reproduciremos los problemas de rendimiento en un sistema que no sea de producción en el que podamos crear un perfil del código y realizar cambios experimentales. No siempre podemos usar exactamente el mismo hardware que la producción (la producción tiene una gran cantidad de servidores de muy alta especificación; dev tiene solo unas pocas cajas de prueba de rendimiento dedicadas a las especificaciones de producción).
Si el problema no se puede analizar de manera significativa en un entorno que no sea de producción, enviaremos algunos instrumentos a nuestro código en producción (después de pruebas cuidadosas para garantizar que la instrumentación no afecte al sistema en sí). Esta instrumentación se enviaría "off" y se activaría selectivamente para recopilar datos suficientes.
Una vez que obtuviéramos un análisis preciso de un problema, veríamos posibles soluciones, y tal vez desarrollamos prototipos, estos podrían ser probados para la corrección funcional.
Normalmente optamos por la opción menos arriesgada si hay varias.
Luego se seguiría el proceso de lanzamiento normal: muchas pruebas, revisiones de códigos, etc.
Si es relevante, el cambio podría enviarse con un "interruptor de reversa" que le permitió apagar la producción rápidamente si hubiera un problema.
Hay muchas mejoras potenciales en el rendimiento que hemos identificado, la mayoría de las cuales no desarrollaremos más hasta que ocurra un problema (a menos que hagamos una refactorización no relacionada de esa pieza de software de todos modos).
No hay un plan maestro concreto para la optimización del rendimiento (como comenzar en el software "xyz" primero).
Enfoque general:
- Identifique (¡mida!) Su entidad más mejorable por medio de mejoras / tiempo invertido
- Optimizarlo
- Repetir