Transparencias usadas para la charla sobre escalabilidad en sistemas con apache y mysql (Semana ESIDE 2008).
- 1. Escalabilidad ApacheyMySQL SEL'08 Lorena Fernndez y Alvaro
Ura loretahur=gmail.com / fermat=rigel.deusto.es e-GHOST -
Universidad de Deusto
2. Escalabilidad: Qu es?
- Rendimiento (performance)
-
- Operaciones por ud. de tiempo
3. Escalabilidad: Metas
-
- Capacidad de cada componente
-
- Eficiencia de cada componente
- Reducir carga de cada componente
-
- AKA: Desplazar el problema (cuello de botella) a otro
componente
4. Qu es Eficiencia?
-
- Cunto se ha usado (memoria, disco...)
5. Qu problemas existen?
- Optimizar grficos (tamao...)
- BBDD: Anlisis de tablas (optimizando consultas SQL...)
- Cuellos de botella (I/O, ...)
- Aplicaciones mal diseadas/configuradas
- Sistemas con pocos recursos
6. Cmo resolverlos?: posibles pasos
- Entender el entorno de la aplicacin
- Clasificar el tipo de carga
- Determinar los componentes problemticos
- Seleccionar una tcnica para escalado
- Probar tcnica y reevaluar
7. Entendiendo el entorno...
- Conocer el diseo del sistema
-
- 3-tier: presentacin, aplicacin, datos
-
- 1-tier: LAMP en una sola mquina :D
- Conocer la carga de trabajo
-
-
- Sistema Operativo (nmero de procesos y sus estado, uso de
memoria, CPU...)
-
-
- Apache (nmero de conexiones, visitas, visitas nicas, pginas
vistas...)
-
-
- MySQL (consultas por minuto...)
8. Clasificando el tipo de carga... (I)
-
- Ej. Prensa online, motores de bsqueda
-
- Provee informacin al usuario
-
-
- riesgo en seguridad: bajo (no hay transacciones con
terceros)
9. Clasificando el tipo de carga... (II)
-
- Funcin: navegar y comprar
-
-
- contenido bastante esttico (catlogos), aunque variable en
ocasiones (promociones)
-
-
- Pocas pginas a ver, pero mucho trfico
-
-
- seguridad: medio (en el momento del cobro)
10. Clasificando el tipo de carga... (III)
-
- Ej. Banca online, Mensajera (FedEx, DHL...)
-
- Comprobar datos personalizados
-
-
- Conectando a 3s servicios
-
-
- Bancos: riesgo alto en seguridad
-
-
- Mucho trfico en transacciones
11. Clasificando el tipo de carga... (IV)
-
- Mezcla entre todos los anteriores
12. Algunas tcnicas de escalado...
-
- Hacer ms potentes los nodos que ya tenemos
-
- Aumentar el nmero de nodos
13. Escalado vertical
-
- Mayor capacidad (opers/tiempo)
- Una mquina especial (appliance)
14. Escalado horizontal
- Crear un cluster de mquinas
- Ocultar las mquinas tras un balanceador
-
- Reduccin de la carga de trabajo
- Dividir distintas aplicaciones en varias mquinas (no es
puramente un escalado horizontal)
-
- Reduccin de la carga de trabajo
15. Entre el hardware...
- Coexistencia de servicios en una misma mquina afecta al
funcionamiento
-
- Memoria RAM, muy importante (cacheo)
-
-
- mod_cache (Gestores de almacenamiento: mod_disk_cache,
mod_mem_cache)
- Discos duros: rpidos, mejor RAID
16. 17. El software... Apache (I)
- Cargar mdulos necesarios, nicamente
-
- Esttica: includos en el binario (incluso mdulos de 3s)
-
- Dinmica: slo se cargan cuando se van a usar (problema de
rendimiento)
18. El software... Apache (II)
- Uso de directivas de configuracin que necesitemos (no todas,
aunque sea por defecto)
-
- Comentar Multi-Processing Modules (MPMs) que no usemos
-
- Prefork: mejor en mquinas con 1 2 CPUs
-
- Worker: mejor en mquinas con muchas CPUs
19. El software... Apache (III)
- Ejecucin de CGIs asociada a un directorio
-
- Para no tener que comprobar cada fichero pedido
- Uso de intrpretes embebidos mejora el rendimiento (por ah dicen
que se reduce el tiempo de ejecucin en un 70%)
20. El software... Apache (IV)
- Evitar la comprobacin de .htaccess
- Reducir las llamadas a la funcin stat
- Reducir el consumo de red
21. El software... Apache (V)
- Mdulos de ayuda a la configuracin
-
- mod_status (/server-status)
-
- mod_log_forensic (y ForensicLog foo.log)
- Herramientas (apache2-utils)
-
-
- ab -kc 10 -t 30 http://example.com/
-
-
- ab -kc 5 -n 1000 http://example.com/
-
- check_forensic (anlisis de foo.log)
22. Prefork: Config. bsica
23. Worker: Config. bsica
24. En resumen
- Leer (documentacin, artculos, ...)
- ??? (Probar y Monitorizar)
25. 26. Sobre qu actuamos?
- Hardware (CPU, memoria, disco, ...)
- Parmetros del servidor (my.cnf)
27. Hardware
-
- Acceso recurrente de apache, mysql, logs, ficheros, ...
-
- Lo ptimo --> tener separado esto en diferentes discos (SATA
o mejor SAS)
-
- noatime en sistema de archivos:
-
-
- mount -o remount,noatime /
28. htop 29. Actuacin I
-
- En qu das y horas hay ms carga?
-
- Qu sentencias tardan ms en ejecutarse?
- Cambiar una cosa cada vez y medir el rendimiento
- Deshabilitar la cach para hacer pruebas!!
30. mytop
-
+----+-------------+-----------------+------+---------+------+----------------------------------+------------------+
- | Id | User| Host| db| Command | Time | State| Info
-
+----+-------------+-----------------+------+---------+------+----------------------------------+------------------+
- | 6|usuario|localhost| base_datos2| Query | 5018 | Sending data
|select * from tabla
31. Slow Querys I
- Sentencias SQL que llevaron ms delong_query_timesegundos para
ejecutarse completamente
-
-
- log-slow-queries= /var/log/mysql/mysql-slow.log
-
-
- #tambin se loguean consultas que no usan ndices
-
-
- log-queries-not-using-indexes
32. Slow Querys II
- Time : segundos que ha durado la ejecucin. No se tienen en
cuenta los bloqueos de tabla iniciales
- Lock : tiempos de bloqueos
- Rows : filas examinadas (nos ayuda a ver consultas sin
ndices)
User@Host: user_nireblog @ localhost [] Query_time: 12Lock_time:
0Rows_sent: 7Rows_examined: 248098 select * from tabla; 33. Slow
Querys III
- Y si el log es muy grande?
-
- Aumentamos log_query_time
- mysqldumpslow -s c -t 10 /var/log/mysql/slow.log
34. SQL I
- EXPLAIN sentencia --> Plan de ejecucin de una sentencia
-
- type: all -> escaneo completo
-
- type: index --> uso de ndices // key
-
- Sobre campos de bsqueda y no sobre las selecciones
-
- Sobre valores diferentes mejor que sobre duplicados
35. SQL II
- Evitar los tipos de columna variable (CHAR frente a
VARCHAR)
- Optimize table --> desfragmenta la tabla, la repara y la
ordena
36. my.cnf
- set-variable=max_connections=500
- > SHOW STATUS LIKE max_used_connections;
- set-variable=wait_timeout=70
37. Memoria
-
- Key_buffermemoriauso disco
-
- Servidores dedicados a BD de la RAM
-
- Uso de ndices: key_reads vs. key_read_requests
38. Cach I
-
- max_connections x n mximo de tablas en una join
- query_cache_size:tamao de la cach
- query_cache_limit--> MySQL no cachear consultas que sean ms
grandes que este valor
39. Cach II
- mysql> show status like 'Qcache%';
- +-------------------------+----------+
- +-------------------------+----------+
- | Qcache_queries_in_cache | 40| peticiones en la cach
- | Qcache_lowmem_prunes| 0|
- | Qcache_free_memory| 10383801 |cach usada = query_cache_size -
Qcache_free_memory
- | Qcache_total_blocks| 65|
- +-------------------------+----------+
40. MySQL Perfomance Tuning Primer Script
- Coge informacin de SHOW STATUS LIKE y SHOW VARIABLES LIKE
- Recomendable lanzarlo teniendo mysql + 48 h
- Recomendaciones: Slow Query Log, Max Connections, Worker
Threads, Key Buffer, Query Cache, Sort Buffer, ...
41. Benchmarks
- El paquete de pruebas de rendimiento de
MySQL:http://dev.mysql.com/doc/refman/5.0/es/mysql-benchmarks.html
- Open Source Database
Benchmark:http://osdb.sourceforge.net/
- Super Smack:http://jeremy.zawodny.com/mysql/super-smack
42. Referencias
-
- http://httpd.apache.org/docs/2.0/
-
- http://highscalability.com/tags/apache
-
-
http://www.ibm.com/developerworks/linux/library/l-tune-lamp-2.html
-
- http://www.serverwatch.com/
-
-
http://dev.mysql.com/doc/refman/5.0/es/mysql-optimization.html
-
-
http://www.ibm.com/developerworks/web/library/l-tune-lamp-3.html?ca=drs-
43. Este contenido est licenciado bajoCreative Commons by-sa
3.0