Download - Escalabilidad - Apache y MySQL
- 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)
-
- Tiempo de respuesta
- Capacidad
-
- Operaciones por ud. de tiempo
3. Escalabilidad: Metas
- Incrementar
-
- 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?
- Velocidad
-
- Tiempo de ejecucin
- Espacio
-
- 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
-
- Monitorizacin
-
-
- 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)
- Patrn publish/subscribe
-
- Ej. Prensa online, motores de bsqueda
-
- Provee informacin al usuario
-
- Caractersticas
-
-
- contenido muy variable
-
-
-
- riesgo en seguridad: bajo (no hay transacciones con terceros)
-
9. Clasificando el tipo de carga... (II)
- Compra online
-
- Ej. Tiendas como FNAC.es
-
- Funcin: navegar y comprar
-
- Caractersticas
-
-
- 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)
- Autoservicio de clientes
-
- Ej. Banca online, Mensajera (FedEx, DHL...)
-
- Comprobar datos personalizados
-
- Caractersticas
-
-
- Conectando a 3s servicios
-
-
-
- Bancos: riesgo alto en seguridad
-
-
-
- Poco trfico en bsquedas
-
-
-
- Mucho trfico en transacciones
-
11. Clasificando el tipo de carga... (IV)
- Comercio
-
- Ej. eBay, Amazon
-
- Compra/Venta
-
- Mezcla entre todos los anteriores
-
-
- Bsquedas
-
-
-
- Transacciones
-
-
-
- Datos voltiles
-
12. Algunas tcnicas de escalado...
- Escalado vertical
-
- Hacer ms potentes los nodos que ya tenemos
- Escalado horizontal
-
- Aumentar el nmero de nodos
13. Escalado vertical
- Una mquina ms rpida
-
- Mayor capacidad (opers/tiempo)
- Una mquina especial (appliance)
-
- Mayor capacidad
-
- Mayor eficiencia
14. Escalado horizontal
- Crear un cluster de mquinas
-
- Mayor capacidad
- Ocultar las mquinas tras un balanceador
-
- Reduccin de la carga de trabajo
-
- Mayor eficiencia
- Dividir distintas aplicaciones en varias mquinas (no es puramente un escalado horizontal)
-
- Reduccin de la carga de trabajo
-
- Mayor eficiencia
15. Entre el hardware...
- Coexistencia de servicios en una misma mquina afecta al funcionamiento
- Para contenido esttico
-
- Memoria RAM, muy importante (cacheo)
-
-
- mod_cache (Gestores de almacenamiento: mod_disk_cache, mod_mem_cache)
-
- Para contenido dinmico
-
- Uso intensivo de CPU
- Discos duros: rpidos, mejor RAID
16. 17. El software... Apache (I)
- Cargar mdulos necesarios, nicamente
-
- Coste en RAM
- Compilacin de mdulos
-
- 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
- MPMs
-
- 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%)
-
- mod_perl vs. CGI
20. El software... Apache (IV)
- Evitar la comprobacin de .htaccess
-
- AllowOverride None
- Reducir las llamadas a la funcin stat
-
- Options FollowSymLinks
- Reducir el consumo de red
-
- HostnameLookup off
21. El software... Apache (V)
- Mdulos de ayuda a la configuracin
-
- mod_status (/server-status)
-
- mod_info (/server-info)
-
- mod_log_forensic (y ForensicLog foo.log)
- Herramientas (apache2-utils)
-
- ab (Apache Benchmarking)
-
-
- 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
- Timeout 300
- KeepAlive On
- MaxKeepAliveRequests 100
- KeepAliveTimeout 15
- StartServers5
- MinSpareServers5
- MaxSpareServers10
- MaxClients150
- MaxRequestsPerChild0
23. Worker: Config. bsica
- Timeout 300
- KeepAlive On
- MaxKeepAliveRequests 100
- KeepAliveTimeout 15
- StartServers2
- MaxClients150
- MinSpareThreads25
- MaxSpareThreads75
- ThreadsPerChild25
- MaxRequestsPerChild0
24. En resumen
- Leer (documentacin, artculos, ...)
- ??? (Probar y Monitorizar)
- Profit
25. 26. Sobre qu actuamos?
- Hardware (CPU, memoria, disco, ...)
-
- top, htop, mrtg
- Parmetros del servidor (my.cnf)
- Sentencias SQL
27. Hardware
- Disco
-
- 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 /
-
- Memoria
- CPU
28. htop 29. Actuacin I
- Medir el sistema
-
- En qu das y horas hay ms carga?
-
-
- mrtg
-
-
-
- mytop
-
-
- Qu sentencias tardan ms en ejecutarse?
-
-
- opcin --log-slow-queries
-
-
-
- mysqldumpslow
-
- Cambiar una cosa cada vez y medir el rendimiento
- Deshabilitar la cach para hacer pruebas!!
30. mytop
- Un top para MySQL
- show processlist // kill
- +----+-------------+-----------------+------+---------+------+----------------------------------+------------------+
- | 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
- En my.cnf:
-
-
- long_query_time= 10
-
-
-
- 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)
- Host
- Consulta
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
- Top 10 de sentencias:
- 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
- ndices
-
- Sobre campos de bsqueda y no sobre las selecciones
-
- Sobre valores diferentes mejor que sobre duplicados
-
- No abusar
35. SQL II
- Evitar los tipos de columna variable (CHAR frente a VARCHAR)
- Insertar filas mltiples
- Optimize table --> desfragmenta la tabla, la repara y la ordena
36. my.cnf
- skip-name-resolve
- set-variable=max_connections=500
- > SHOW STATUS LIKE max_used_connections;
- set-variable=wait_timeout=70
37. Memoria
- key_buffer(ndices)
-
- Key_buffermemoriauso disco
-
- Servidores dedicados a BD de la RAM
-
- Uso de ndices: key_reads vs. key_read_requests
38. Cach I
- table_cache
-
- N de tablas abiertas
-
- 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
- SQL_NO_CACHE (cdigo)
39. Cach II
- mysql> show status like 'Qcache%';
- +-------------------------+----------+
- | Variable_name| Value|
- +-------------------------+----------+
- | Qcache_queries_in_cache | 40| peticiones en la cach
- | Qcache_inserts| 40|
- | Qcache_hits| 25|
- | Qcache_lowmem_prunes| 0|
- | Qcache_not_cached| 1|
- | Qcache_free_memory| 10383801 |cach usada = query_cache_size - Qcache_free_memory
- | Qcache_free_blocks| 1|
- | Qcache_total_blocks| 65|
- +-------------------------+----------+
- 8 rows in set (0.00 sec)
40. MySQL Perfomance Tuning Primer Script
- Descargar deaqu
- Coge informacin de SHOW STATUS LIKE y SHOW VARIABLES LIKE
- Genera recomendaciones
- 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
- Apache
-
- 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/
- MySQL
-
- 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