Slideshow transcript
Slide 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
Slide 2: Escalabilidad: ¿Qué es? ● Rendimiento (performance) – Tiempo de respuesta ● Capacidad – Operaciones por ud. de tiempo
Slide 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
Slide 4: ¿Qué es Eficiencia? ● Velocidad – Tiempo de ejecución ● Espacio – Cuánto se ha usado (memoria, disco...)
Slide 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
Slide 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
Slide 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...)
Slide 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)
Slide 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)
Slide 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
Slide 11: Clasificando el tipo de carga... (IV) ● Comercio – Ej. eBay, Amazon – Compra/Venta – Mezcla entre todos los anteriores ● Búsquedas ● Transacciones ● Datos volátiles
Slide 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
Slide 13: Escalado vertical ● Una máquina más rápida – Mayor capacidad (opers/tiempo) ● Una máquina especial (appliance) – Mayor capacidad – Mayor eficiencia
Slide 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
Slide 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
Slide 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)
Slide 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
Slide 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
Slide 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
Slide 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”)
Slide 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>
Slide 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>
Slide 24: En resumen 1. Leer (documentación, artículos, ...) 2. ??? (Probar y Monitorizar) 3. Profit
Slide 26: ¿Sobre qué actuamos? ● Hardware (CPU, memoria, disco, ...) – top, htop, mrtg ● Parámetros del servidor (my.cnf) ● Sentencias SQL
Slide 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
Slide 28: htop
Slide 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!!
Slide 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
Slide 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
Slide 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;
Slide 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
Slide 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
Slide 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
Slide 36: my.cnf ● skip-name-resolve ● set- variable=max_connections=500 > SHOW STATUS LIKE ‘max_used_connections’; ● set-variable=wait_timeout=70
Slide 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
Slide 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)
Slide 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)
Slide 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, ...
Slide 41: Benchmarks ● El paquete de pruebas de rendimiento de MySQL: http://dev.mysql.com/doc/refman/5.0/es/mysq ● Open Source Database Benchmark: http://osdb.sourceforge.net/ ● Super Smack: http://jeremy.zawodny.com/mysql/super-smac
Slide 42: Referencias ● Apache – http://httpd.apache.org/docs/2.0/ – http://highscalability.com/tags/apache – http://www.ibm.com/developerworks/linux/library – http://www.serverwatch.com/ ● MySQL – http://dev.mysql.com/doc/refman/5.0/es/mysql-op – http://www.ibm.com/developerworks/web/library/
Slide 43: Este contenido está licenciado bajo Creative Commons by-sa 3.0






Add a comment on Slide 1
If you have a SlideShare account, login to comment; else you can comment as a guest- Favorites & Groups
Showing 1-50 of 1 (more)