Optimización de Aplicaciones
Descripción
Mi aplicación esta lenta .. que hago ???
Proceso
A. Identifique los actores
Normalmente el desempeño de una aplicación origina en una larga lista de factores que siguiendo siguiendo modelos vista-controlador se puede dividir en tres grandes bloques:
- Backend
- Hardware:
Siempre es relevante tener la memoria y el CPU correctos tanto como la velocidad de los discos.
- Sistema Operativo:
Bases de datos como Oracle hace fine tunning del Kernel para adaptarse a sus necesidades
Una escogencia del sistema de archivos, del particionamiento y de otros
- Motor de Base de datos
La escogencia de un buen motor y una correcta configuración para sus necesidades puntuales es muy importante. No espere que Access le funcione para un gran número de consultas simultaneas
Hay factores como el cache de consultas y el numero de hilos disponibles que se pueden afinar para mejorar el desempeño.
- Conectividad:
Si se esta separado del Core, la conectividad y la latencia de esta conectividad puede convertirse en un factor relevante a evaluar en el desempeño del backend.
- Diseño y operación de la base de datos
Tómese el tiempo diseñando su modelo de datos, pensando en la cantidad de datos, en las consultas frecuentes y demas factores.
Adicionalemnte hay practicas y recomendaciones sencillas a seguir que mejoran inmensamente el desempeño de sus aplicaciones como: Use indices bien colocados, diseñe sus consultas para hacer filtros economicos, evite sentencias con union o similares.. etc
https://www.infoworld.com/article/3210905/sql/10-essential-performance-tips-for-mysql.html
- Core
- Hardware
Siempre es relevante tener la memoria y el CPU correctos tanto como la velocidad de los discos.
En ocasiones de mucha demanda, puede que tambien la cantidad de swap asignada afecte la velocidad de respuesta.
- Sistema Operativo
Entre mas delgado sea su sistema operativo, mas recursos estarán dedicados a servir aplicaiones. Escoja el adecuado y afinelo para que corra el menor numero de servicios.
- Servidor de Aplicaciones
La configuración de su servidor de aplicaciones puede ampliar considerablemente el alcance de su plataforma. Por ejemplo, el afinar el numero de hilos que lanza apache o Tomcat pueden aumentar el numero y velocidad de respuesta de un aplicativo.
- Lenguaje
El problema determina el lenguaje y no al reves. No use Java para hacer scripts de sistema operativo … o no haga juegos para celular en shell .. y espere una buena respuesta.
Hay fortalezas de lenguajes: Bash para scripts de SO, perl para procesar texto, PHP para web, java para portabilidad, C para velocidad, etc.
- Programa
El mayor factor de perdida de desempeño se encuentra en lo que las personas programan. Los sistemas operativos funcionan bien, los motores de bases de datos tambien, la redes suelen tambien hacerlo bien, pero donde se incluye la mano humana, ahi inician los problemas. Si quiere alto desempeño programe pensando en la escasez de recursos, en al cantidad de memoria que usa cada arreglo, en si hay alguna forma de hacerlo mejor:Es una disciplina y no algo que se deja para despues.
- Conectividad
Siempre relevante .. siempre influye. Normalmente se espera que las conectividades internas del aplicativo sean las mayores que la tecnologia pueda proveer en su momento.
- Despliegue
- Front-End , Navegador
Paradógico pero No todos los navegadores son iguales, al igual respecto a al compatibilidad. Cada casa matriz intenta que los aplicativos funcionen solo en sus navegadores propios … MALA PRACTICA. Procure ser portable, la portabilidad normalmente redunda en estabilidad porque es necesario tomar caminos seguros.
- Dispositivo de Despliegue
Nunca descarte el dispositivo que se despliega como uno de los causantes de problemas. Descartelo cuando el problema sea comun a todos.
- Conectividad
Siempre .. internet, siempre internet.
B.Tome mediciones
Nunca tome desiciones basadas en sospechas o en supersticiones. Tome mediciones.
El común de las personas suele señalar la red como el primer culpable (no tengo internet !!!) y el segundo es la capacidad de los servidores. En los tiempos antiguos se programaba con escasez de recursos: los primeros gozaban de 64K RAM, en los 80s quiza hasta 1M, en los 90s hasta 1G.. pero ahora son 100G facilmente .. entonces en nuestros dias se programa como si los recursos fueran infinitos, nadie se fija en la “complejidad” de un algoritmo ni en la memoria ocupada por un arreglo. Claro esta, esta filosfia es promovida por los fabricantes de hardware y de sistemas operativos comerciales porque fuerza la obsolescencia rápida de los equipos, pero ha llevado a terribles deudas tecnologicas en el softwre producido que a largo plazo son insostenibles.
OJO: El termino “complejidad” se refiere a la funcion matematica que describe los ciclos de cpu usados: Un recorrido de un arreglo es complejidad N, dos recorridos anidados son N^2 , una multiplicaccion de dos matrices cuadradas es de N^3.
Use herramientas como mrtg, Munin, cacti, zabbix, nagios permite obtener tanto indicadores de operación, memoria utilizada, CPU, uso de swap, hasta indicadores de Bases de Datos y Servidores de Aplicaciones, pasando por saturacion y errores de red.
Una vez tenga estos indicadores, puede aproximar un culpable del problema.
C.Tome medidas
Ajuste el factor de falla y vuelva y pruebe. No mueva mas de una cosa por vez antes de probar. Si no, no va a saber que fue lo que mejoró o empeoró la situación.
Referencias
-
FIN
Advertencia
Este documento es privado y es de u so exclusivo de sus autores y de SKINA TECH. Cualquier uso sin una autorización escrita es contra la ley de derechos de autor y de propiedad intelectual, y será motivo de una acción legal.
15-Marzo-2006 J.E.Gomez v1.0 Primera version