Escalabilidad - Apache y MySQL

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    1 Favorite

    Escalabilidad - Apache y MySQL - Presentation Transcript

    1. Escalabilidad Apache y MySQL SEL'08 Lorena Fernández y Alvaro Uría 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 ejecución
      • Espacio
        • Cuánto se ha usado (memoria, disco...)
    5. ¿Qué problemas existen?
      • Optimizar gráficos (tamaño...)
      • BBDD: Análisis de tablas (optimizando consultas SQL...)
      • Cuellos de botella (I/O, ...)
      • Aplicaciones mal diseñadas/configuradas
      • Sistemas con pocos recursos
    6. ¿Cómo resolverlos?: posibles pasos
      • Entender el entorno de la aplicación
      • Clasificar el tipo de carga
      • Determinar los componentes problemáticos
      • Seleccionar una técnica para escalado
      • Probar técnica y reevaluar
    7. Entendiendo el entorno...
      • Conocer el diseño del sistema
        • 3-tier: presentación, aplicación, datos
        • 1-tier: LAMP en una sola máquina :D
      • Conocer la carga de trabajo
        • Monitorización
          • Sistema Operativo (número de procesos y sus estado, uso de memoria, CPU...)
          • Apache (número de conexiones, visitas, visitas únicas, páginas vistas...)
          • MySQL (consultas por minuto...)
    8. Clasificando el tipo de carga... (I)
      • Patrón publish/subscribe
        • Ej. Prensa online, motores de búsqueda
        • Provee información al usuario
        • Características
          • 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
        • Función: navegar y comprar
        • Características
          • contenido bastante estático (catálogos), aunque variable en ocasiones (promociones)
          • Pocas páginas a ver, pero mucho tráfico
          • seguridad: medio (en el momento del cobro)
    10. Clasificando el tipo de carga... (III)
      • Autoservicio de clientes
        • Ej. Banca online, Mensajería (FedEx, DHL...)
        • Comprobar datos personalizados
        • Características
          • Conectando a 3ºs servicios
          • Bancos: riesgo alto en seguridad
          • Poco tráfico en búsquedas
          • Mucho tráfico en transacciones
    11. Clasificando el tipo de carga... (IV)
      • Comercio
        • Ej. eBay, Amazon
        • Compra/Venta
        • Mezcla entre todos los anteriores
          • Búsquedas
          • Transacciones
          • Datos volátiles
    12. Algunas técnicas de escalado...
      • Escalado vertical
        • Hacer más potentes los nodos que ya tenemos
      • Escalado horizontal
        • Aumentar el número de nodos
    13. Escalado vertical
      • Una máquina más rápida
        • Mayor capacidad (opers/tiempo)
      • Una máquina especial (appliance)
        • Mayor capacidad
        • Mayor eficiencia
    14. Escalado horizontal
      • Crear un cluster de máquinas
        • Mayor capacidad
      • Ocultar las máquinas tras un balanceador
        • Reducción de la carga de trabajo
        • Mayor eficiencia
      • Dividir distintas aplicaciones en varias máquinas (no es puramente un escalado horizontal)
        • Reducción de la carga de trabajo
        • Mayor eficiencia
    15. Entre el hardware...
      • Coexistencia de servicios en una misma máquina afecta al funcionamiento
      • Para contenido estático
        • Memoria RAM, muy importante (cacheo)
          • mod_cache (Gestores de almacenamiento: mod_disk_cache, mod_mem_cache)
      • Para contenido dinámico
        • Uso intensivo de CPU
      • Discos duros: rápidos, mejor RAID
    16.  
    17. El software... Apache (I)
      • Cargar módulos necesarios, únicamente
        • Coste en RAM
      • Compilación de módulos
        • Estática: incluídos en el binario (incluso módulos de 3ºs)
        • Dinámica: sólo se cargan cuando se van a usar (problema de rendimiento)
    18. El software... Apache (II)
      • Uso de directivas de configuración que necesitemos (no todas, aunque sea por defecto)
        • Comentar “Multi-Processing Modules” (MPMs) que no usemos
      • MPMs
        • Prefork: mejor en máquinas con 1 ó 2 CPUs
        • Worker: mejor en máquinas con muchas CPUs
    19. El software... Apache (III)
      • Ejecución de CGIs asociada a un directorio
        • Para no tener que comprobar cada fichero pedido
      • Uso de intérpretes embebidos mejora el rendimiento (por ahí dicen que se reduce el tiempo de ejecución en un 70%)
        • mod_perl vs. CGI
    20. El software... Apache (IV)
      • Evitar la comprobación de .htaccess
        • AllowOverride None
      • Reducir las llamadas a la función stat
        • Options FollowSymLinks
      • Reducir el consumo de red
        • HostnameLookup off
    21. El software... Apache (V)
      • Módulos de ayuda a la configuración
        • 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” (análisis de “foo.log”)
    22. Prefork: Config. básica
      • Timeout 300
      • KeepAlive On
      • MaxKeepAliveRequests 100
      • KeepAliveTimeout 15
      • <IfModule mpm_prefork_module>
      • StartServers 5
      • MinSpareServers 5
      • MaxSpareServers 10
      • MaxClients 150
      • MaxRequestsPerChild 0
      • </IfModule>
    23. Worker: Config. básica
      • Timeout 300
      • KeepAlive On
      • MaxKeepAliveRequests 100
      • KeepAliveTimeout 15
      • <IfModule mpm_worker_module>
      • StartServers 2
      • MaxClients 150
      • MinSpareThreads 25
      • MaxSpareThreads 75
      • ThreadsPerChild 25
      • MaxRequestsPerChild 0
      • </IfModule>
    24. En resumen
      • Leer (documentación, artículos, ...)
      • ??? (Probar y Monitorizar)
      • Profit
    25.  
    26. ¿Sobre qué actuamos?
      • Hardware (CPU, memoria, disco, ...)
        • top, htop, mrtg
      • Parámetros 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. Actuación I
      • Medir el sistema
        • ¿En qué días y horas hay más carga?
          • mrtg
          • mytop
        • ¿Qué sentencias tardan más en ejecutarse?
          • opción --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 más de long_query_time segundos para ejecutarse completamente
      • En my.cnf:
          • long_query_time = 10
          • log-slow-queries = /var/log/mysql/mysql-slow.log
          • #también se loguean consultas que no usan índices
          • log-queries-not-using-indexes
    32. Slow Querys II
      • Time : segundos que ha durado la ejecución. 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: 12 Lock_time: 0 Rows_sent: 7 Rows_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 ejecución de una sentencia
        • type: all -> escaneo completo
        • type: index --> uso de índices // key
      • Índices
        • Sobre campos de búsqueda 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 múltiples
      • 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_buffer memoria uso 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º máximo de tablas en una join
      • query_cache_size: tamaño de la caché
      • query_cache_limit --> MySQL no cacheará consultas que sean más grandes que este valor
      • SQL_NO_CACHE (código)
    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 de aquí
      • Coge información 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 bajo Creative Commons by-sa 3.0

    Lorena FernándezLorena Fernández, 2 years ago

    custom

    2849 views, 1 favs, 5 embeds more stats

    Transparencias usadas para la charla sobre escalabi more

    More Info

    CC Attribution-ShareAlike LicenseCC Attribution-ShareAlike License

    Go to text version
    • Total Views 2849
      • 2610 on SlideShare
      • 239 from embeds
    • Comments 0
    • Favorites 1
    • Downloads 60
    Most viewed embeds
    • 209 views on http://blog.loretahur.net
    • 27 views on http://www.pelogo.org
    • 1 views on http://loretahur.blogspot.com
    • 1 views on http://66.102.9.104
    • 1 views on http://feeds.feedburner.com

    more

    All embeds
    • 209 views on http://blog.loretahur.net
    • 27 views on http://www.pelogo.org
    • 1 views on http://loretahur.blogspot.com
    • 1 views on http://66.102.9.104
    • 1 views on http://feeds.feedburner.com

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as innappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel

    Categories