Escalabilidad - Apache y MySQL

Embed Size (px)

DESCRIPTION

Transparencias usadas para la charla sobre escalabilidad en sistemas con apache y mysql (Semana ESIDE 2008).

Citation preview

  • 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