• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Escalabilidad - Apache y MySQL
 

Escalabilidad - Apache y MySQL

on

  • 9,597 views

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

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

Statistics

Views

Total Views
9,597
Views on SlideShare
8,878
Embed Views
719

Actions

Likes
5
Downloads
174
Comments
0

6 Embeds 719

http://blog.loretahur.net 667
http://www.pelogo.org 32
http://www.slideshare.net 17
http://loretahur.blogspot.com 1
http://66.102.9.104 1
http://feeds.feedburner.com 1

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

CC Attribution-ShareAlike LicenseCC Attribution-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Escalabilidad - Apache y MySQL Escalabilidad - Apache y MySQL Presentation Transcript

    • 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
    • Escalabilidad: ¿Qué es?
      • Rendimiento (performance)
        • Tiempo de respuesta
      • Capacidad
        • Operaciones por ud. de tiempo
    • 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
    • ¿Qué es Eficiencia?
      • Velocidad
        • Tiempo de ejecución
      • Espacio
        • Cuánto se ha usado (memoria, disco...)
    • ¿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
    • ¿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
    • 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...)
    • 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)
    • 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)
    • 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
    • Clasificando el tipo de carga... (IV)
      • Comercio
        • Ej. eBay, Amazon
        • Compra/Venta
        • Mezcla entre todos los anteriores
          • Búsquedas
          • Transacciones
          • Datos volátiles
    • Algunas técnicas de escalado...
      • Escalado vertical
        • Hacer más potentes los nodos que ya tenemos
      • Escalado horizontal
        • Aumentar el número de nodos
    • Escalado vertical
      • Una máquina más rápida
        • Mayor capacidad (opers/tiempo)
      • Una máquina especial (appliance)
        • Mayor capacidad
        • Mayor eficiencia
    • 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
    • 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
    •  
    • 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)
    • 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
    • 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
    • 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
    • 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”)
    • 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>
    • 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>
    • En resumen
      • Leer (documentación, artículos, ...)
      • ??? (Probar y Monitorizar)
      • Profit
    •  
    • ¿Sobre qué actuamos?
      • Hardware (CPU, memoria, disco, ...)
        • top, htop, mrtg
      • Parámetros del servidor (my.cnf)
      • Sentencias SQL
    • 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
    • htop
    • 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!!
    • 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
    • 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
    • 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;
    • 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
    • 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
    • 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
    • my.cnf
      • skip-name-resolve
      • set-variable=max_connections=500
      • > SHOW STATUS LIKE ‘max_used_connections’;
      • set-variable=wait_timeout=70
    • 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
    • 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)
    • 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)
    • 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, ...
    • 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
    • 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-
    • Este contenido está licenciado bajo Creative Commons by-sa 3.0