Sitios web de alto rendimiento y alta disponibilidad
26 Jan 2015•0 j'aime
3 j'aime
Soyez le premier à aimer ceci
afficher plus
•2,741 vues
vues
Nombre de vues
0
Sur Slideshare
0
À partir des intégrations
0
Nombre d'intégrations
0
Signaler
Logiciels
Qué cosas se deben tomar en cuenta al momento de pensar en crear o mejorar una aplicación web que va a ser utilizada por miles de usuarios... por segundo.
Enfocado principalmente en proyectos basados en PHP
Sitios web de alto rendimiento y alta disponibilidad
Sitios web de alto
rendimiento y
disponibilidad
IIG. Iván G. Campaña N.
@icampana
Qué es un sitio web de alto rendimiento
Un sitio que recibe desde miles a millones de visitas por segundo.
Va asociado a sitios con un flujo alto de información (medios de
comunicación, páginas de entidades de gobierno, sitios de famosos,
etc...).
Los visitantes esperan poder acceder al contenido en cualquier
momento y sin interrupciones.
El tiempo fuera de línea puede implicar pérdidas monetarias o daño de
imagen para la empresa.
Título de la presentación
Qué es un sitio web de alto rendimiento
Sitios nacionales configurados con infraestructura para soporte de alto número
de visitas:
● El Universo (eluniverso.com)
● Ecuavisa (ecuavisa.com)
● Revista Estadio (estadio.ec)
Ejemplos internacionales
● La casa blanca (www.whitehouse.gov)
● The Economist (economist.com)
Requieren no sólo de infraestructura, sino también de una estrategia de
optimización muy específica enfocado en los servicios que se quiere prestar .
Uno de los puntos de quiebre a nivel nacional (30S 2010), a nivel internacional
Tsunami de Japón
Título de la presentación
Desarrollo común de una app web
Título de la presentación
● En las versiones iniciales de una app, se enfoca en el
desarrollo de funcionalidades en un ambiente controlado.
● Se trabaja en base a la experiencia de sistemas
transaccionales tradicionales.
○ Colas de espera / Respuesta síncrona
● No se toma en cuenta pruebas de estrés (de la aplicación).
● Se piensa más en diseño que en rendimiento.
● Los problemas de rendimiento aparecen en ambiente de
producción.
El planeamiento de crecimiento por niveles debe incluirse
desde la partida.
¿Qué buscamos con alto
desempeño?
● Tiempos de respuesta bajos
● Escalabilidad
○ Poder agregar componentes a la infraestructura sin que
esto implique tiempo fuera de línea (downtime).
○ Reaccionar ante el aumento de la demanda de manera
transparente.
● Optimizar el consumo de recursos.
Título de la presentación
Problemas comunes
● Distribución de contenido
● Manejo de archivos de gran tamaño (videos, multimedia, etc…)
● Búsquedas en archivos históricos
● Servicios a usuarios
● Cantidad de usuarios con una sesión activa
Además:
● PHP es lento
○ Necesita re-compilar el código en cada ejecución.
● BDs son lentas
● Lectura/escritura en disco es lenta (cuello de botella)
● Incrementar infraestructura no siempre es posible
Título de la presentación
¿Qué se necesita para hacerlo?
Título de la presentación
● Conocimientos :)
● Recursos :(
Título de la presentación
¿La aplicación se cayó, quien lo
arregla?
( O Quien apaga el incendio)
Aparece un nuevo concepto Devops
● Los problemas no son exclusivos de Desarrollo
● Ni tampoco son exclusivos de Operaciones (Infraestructura)
● Es un trabajo conjunto / con un equipo especial dedicado (DEVOPS).
Título de la presentación
¿La solución?
● No existe una fórmula mágica.
● Se necesita planificación y adaptar el sitio para poder responder a la
demanda.
● Nos podemos basar en fórmulas, pero pesa mucho la experiencia.
● Hay que pensar en software y hardware
● Integración de servicios de distribución y balanceo de carga
● Mejorar acceso a recursos lentos (Sistema de archivos, BD, Red, E/S en
general)
● Redundancia.
● Se puede pensar en utilizar servicios en la nube (cloud SAS).
Título de la presentación
¿La solución?
● Más infraestructura sin
optimización = Desperdicio de
dinero.
● Establecer un mínimo y un
máximo de visitantes
esperados.
● ¿Qué puedo lograr con mis
recursos?
● Identificar qué características
del sitio requieren atención
especial:
○ Ej: Contenido altamente
dinámico, llamadas AJAX,
número de usuarios
logueados
concurrentemente.
Título de la presentación
Cómo hacer pruebas de rendimiento
Se deben realizar en ambiente de QA o Staging.
● En casos en los que no contemos con un área de QA, realizar las pruebas
sobre producción de forma controlada (para obtener mejores
mediciones).
● jMeter
○ Pruebas con los tipos de usuarios que se van a manejar
○ Páginas estáticas
○ Páginas con bloques de contenido dinámico.
○ Páginas que varían dependiendo de parámetros:
■ Por Rol
■ Por Usuario
■ Por variables
Título de la presentación
Cómo hacer pruebas de rendimiento
● Apache Benchmark
○ Pruebas básicas
○ Simulación de usuarios concurrentes
○ Se puede enviar cookies y parámetros para simular sesiones de
usuario.
○ Se maneja a nivel de scripting o en consola
● New Relic ( http://newrelic.com/ )
○ Permite identificar cuellos de botella en el rendimiento del sitio o la
infraestructura.
○ Integración directa con drupal (servicio pro)
○ Monitoreo constante durante las pruebas de rendimiento
● BlazeMeter ( http://blazemeter.com/ )
Título de la presentación
Herramientas de caché
● Herramientas disponibles bajo esquema open source:
○ Memcached
○ APC
○ Wincache
○ Varnish
○ Redis
○ Cache de BD
■ Integración de ADODB con alguno de los
motores anteriores.
Título de la presentación
Motores de base de datos
●Estándar:
○ Mysql
○ PostgreSQL
●Versiones modificadas (especializadas):
○ MariaDB
○ Percona SQL
●MongoDB (NOSQL)
Título de la presentación
Errores comunes en BD
● Bloqueo a nivel de fila
● Bloqueo de tablas
● Índices lentos
● Búsquedas secuenciales
● Fragmentación
● Concurrencia y escritura
Casos específicos:
● PostgreSQL.- Soporte limitado dependiendo de los proveedores
de hosting.
● MySQL.- problemas en consultas que necesitan índices inversos
(soporte experimental)
Título de la presentación
Capas de caché
● Caché de MySQL / BD en general
● Caché de OPCode (PHP)
● Caché interno de la aplicación web
● HTTP Caché (Proxy reverso)
● Caché del cliente
● Caché de HTML5 (Modo desconectado)
Título de la presentación
Optimización de nivel básico
● Caché en los navegadores
○ e-tags
○ Fecha de expiración de archivos
○ Usar dominios sin cookies
○ Usar una red CDN
■ (Se puede crear un CDN falso con un servidor secundario)
○ Proxy inverso (Varnish, nginx)
○ Agregación CSS/JS
● Primera forma de evaluación:
○ Google Page Speed
○ Yahoo YSlow
Título de la presentación
Optimización de nivel básico
● Forma de evaluación:
○ Yahoo YSlow
http://developer.yahoo.com/yslow/
○ Google Page Speed
https://developers.google.com/speed/pagespeed
● Mantener las funcionalidades personalizadas modulares, pero
compactas.
○ Desagregar el código para reducir la cantidad de espacio
utilizado en memoria
○ Cada bloque de memoria se debe multiplicar por la cantidad
de usuarios conectados
Título de la presentación
●Caché de código
○ Mantiene el código cargado en memoria
○ Se precompila cada vez que hay un cambio.
○ Evita hacer “hits” al disco por cada archivo
■ Una instalación de una aplicación web (Orfeo / Quipux)
incluyendo los módulos contribuidos puede tener cerca de
2,855 archivos de código.
■ Cada archivo debe ser recompilado y ejecutado.
● Caché de variables y consultas
○ Memcached con múltiples “espacios”
○ Caché de bloques y de páginas
● Opciones: APC, Zend Optimizer
Optimización de nivel medio
Título de la presentación
● La herramienta utilizada por defecto es Memcached.
○ Requiere soporte de módulo de PHP
○ Se pueden definir múltiples instancias para los diferentes
componentes del sitio.
○ Se mantiene el resultado en memoria RAM.
○ Permite reemplazar caché estándar, así como caché de
sesiones y de bloqueo (lock)
Optimización de nivel medio
Título de la presentación
Reemplazar servidor Web.
● Servidore compatibles:
○ Apache.- Opción por defecto, estable aunque con mayor
consumo de recursos.
○ Nginx.- Mejor rendimiento con archivos estáticos y opción de
habilitar microcaché.
■ Microcaché permite almacenar temporalmente la página
renderizada.
○ Lighttpd.- Funciona en modo fast-cgi consumo de recursos
bajo (hay que configurar el número de listeners de acuerdo a
las características del equipo físico).
Optimización de nivel medio
Título de la presentación
Optimización de nivel avanzado
● Proxy inverso
○ Varnish 3.0
○ Permite almacenar todo el contenido de la página en
caché
○ Integración con ESI para contenido dinámico
■ Edge Side Includes
● Podemos establecer reglas específicas de expiración (necesita
soporte de la aplicación).
○ Establecer reglas para eliminar caché en momentos
específicos
● Integrar búsquedas a través de Apache Solr
Título de la presentación
Búsquedas con Apache Solr
● Uno de las áreas más explotadas de un sitio web
○ Búsqueda de contenidos.
● La búsqueda en base de datos es costosa.
○ Consume un alto porcentaje de CPU y memoria.
○ Bloquea la respuesta del webserver hasta obtener respuesta
de la BD.
○ El caché de usuarios anónimos es pobre o ineficiente.
● Apache Solr es un motor de búsqueda configurable.
○ Se integra fácilmente con cualquier app web
○ Podemos personalizar los resultados.
○ Eliminamos la carga de búsqueda a la BD.
● Se puede hacer uso de facets para filtrar los resultados de
búsquedas
● Permite exponer contenidos “relacionados”
Título de la presentación
Nivel avanzado de optimización
● Varnish 3.0 es la opción más utilizada (no es la única).
● Permite reducir el número de hits que llegan al servidor
web.
● Maneja archivos de scripting para evaluar cómo se debe
manejar las solicitudes.
● Permite hacer balanceo de carga entre múltiples servidores.
● Podemos configurar un “fallback” en caso de que el pool de
servidores web no responda.
● Puede alterar las cabeceras de respuesta para eliminar o
agregar elementos.
Título de la presentación
Optimización en base a SaS
● Utilizar herramientas de balanceo de carga, proxy inverso, CDN
○ Emplear herramientas de terceros para reducir carga
(opcionales):
■ Cloudflare
■ Apache Mahout
Título de la presentación
¿Qué es ESI?
● Edge Side Includes (http://en.wikipedia.
org/wiki/Edge_Side_Includes)
● Generación de contenido dinámico en base a páginas estáticas.
● Se integra con Varnish, Akamai, Squid y NginX
○ Permite integrar contenido dinámico para usuarios logueados
disminuyendo el consumo de recursos.
○ Necesita desarrollo de partes de la aplicación con soporte
ajax.
Título de la presentación
Optimización en base a terceros
● Servicios de terceros
● Redes CDN
○ Akamai
○ Amazon
○ Cloudflare
○ Rackspace
● CDN Falso
○ Enlace de comunicación separado para ese servidor
○ Distribuye parte del contenido
○ Soporta los métodos Pull y Request
Título de la presentación
Mejoras para PHP
●Optimización del código a través de precompilado:
○ Xcache
○ APC
○ Zend Optimizer
Título de la presentación
Cloudflare
● CDN.- Content Delivery Network
○ Distribuye copias del contenido estático dentro de su
red (javascript, imágenes, css).
○ Tiene servidores distribuidos dentro de diferentes
zonas geográficas.
● Opción de optimizar el contenido
○ Minimizar js, css.
● Firewall de aplicación (Servicio Pro)
○ Protección contra ataques.
● Proxy inverso
● Utilizando scripts se puede forzar la limpieza del caché
de archivos de cloudflare de manera selectiva.
Título de la presentación
Manejo de cambios (Sine qua non)
● Se debe contar con espacios de desarrollo, pruebas y
producción.
● Permite optimizar los recursos necesarios para cada
espacio y función.
● Reduce la carga operativa en producción.
● Se puede tener la opción de manejar el contenido
desde un sitio “réplica” y sincronizar la información en el
sitio real.
● Mantener la mayor cantidad de funcionalidades en
forma de código exportable (sin utilizar features).
Título de la presentación