Post on 21-Jan-2015
description
organizan patrocinan
colaboran
Jornadas Symfony 5 y 6 de julio 2010Universitat Jaume I, Castellón
http://decharlas.uji.es/symfony
Symfony, cloud computing y web escalablesAsier Marqués, blackslot.com
Jornadas Symfony 5 y 6 de julio 2010Universitat Jaume I, Castellón
http://decharlas.uji.es/symfony
http://blackslot.com
Jornadas Symfony http://decharlas.uji.es/symfony
Proveemos y gestionamos infraestructuras basadas en servidores y soluciones cloud
http://blackslot.com
Jornadas Symfony http://decharlas.uji.es/symfony
Proveemos y gestionamos infraestructuras basadas en servidores y soluciones cloud
Desarrollamos aplicaciones web
http://blackslot.com
Jornadas Symfony http://decharlas.uji.es/symfony
Proveemos y gestionamos infraestructuras basadas en servidores y soluciones cloud
Desarrollamos aplicaciones web
Por supuesto, en Symfony
Jornadas Symfony http://decharlas.uji.es/symfony
Agenda
0. Presentación/Spam
1. Arquitectura web: escalabilidad y rendimiento
2. Cloud computing
3. Preguntas
Jornadas Symfony http://decharlas.uji.es/symfony
Agenda
0. Presentación
1. Arquitectura web: escalabilidad y rendimiento
2. Cloud computing
3. Preguntas
Jornadas Symfony http://decharlas.uji.es/symfony
Escalabilidad:• Capacidad de crecimiento• Rendimiento• Alta disponibilidad• Gestión simplificada
Jornadas Symfony http://decharlas.uji.es/symfony
Escalabilidad:• Capacidad de crecimiento• Rendimiento• Alta disponibilidad• Gestión simplificada
Jornadas Symfony http://decharlas.uji.es/symfony
Conceptos
Jornadas Symfony http://decharlas.uji.es/symfony
Una aplicación web o infraestructura es escalable cuando es capaz de aumentar la capacidad de dar servicio y funcionalidad, con la menor carga administrativa y de desarrollo posible.
Escalabilidad
Jornadas Symfony http://decharlas.uji.es/symfony
Disponemos de buen rendimiento cuando somos capaces de soportar la mayor carga de trabajo posible con los menores recursos de hardware posibles.
Rendimiento
Jornadas Symfony http://decharlas.uji.es/symfony
Gozamos de Alta disponibilidad cuando seguimos dando servicio aunque nuestra infraestructura sufra problemas en algunas de sus partes críticas.
Alta disponibilidad
Jornadas Symfony http://decharlas.uji.es/symfony
- Implementación nativa de MVC
- Flexible gracias a especialización y configuración
- Arquitectura REST
- Potente framework para automatizar tareas mediante línea de comandos
Symfony
Jornadas Symfony http://decharlas.uji.es/symfony
- Desarrollo
- Base de datos
- Caché
- División de nuestra aplicación en capas críticas
- Gestión de la infraestructura
Escalabilidad / puntos críticos
Jornadas Symfony http://decharlas.uji.es/symfony
- Desarrollo (pensando en nuestra infraestructura)
- Base de datos
- Caché
- División de nuestra aplicación en capas críticas
- Gestión de la infraestructura
Escalabilidad / puntos críticos
Jornadas Symfony http://decharlas.uji.es/symfony
DesarrolloDesarrolla pensando en la infraestructura
Jornadas Symfony http://decharlas.uji.es/symfony
Usa la configuraciónPermite que una persona no programador mantenga tu aplicación.
Automatiza el mantenimiento mediante tareas.
Symfony / Desarrollo
Jornadas Symfony http://decharlas.uji.es/symfony
ejemplo
SITUACIÓN
1. Son las 4am y nuestro administrador de sistemas necesita añadir un nuevo nodo de memcached al pool
2. Nosotros estamos ([ durmiendo | en Tokio | bien acompañados ]+)
Jornadas Symfony http://decharlas.uji.es/symfony
Problema: implementación actual
Jornadas Symfony http://decharlas.uji.es/symfony
Problema: implementación actual
Ips hardcodeadas en el código
Jornadas Symfony http://decharlas.uji.es/symfony
Problema: implementación actual
Ips hardcodeadas en el código
Jornadas Symfony http://decharlas.uji.es/symfony
Problema: implementación actual
Usamos nuestro propio sistema de cache
Jornadas Symfony http://decharlas.uji.es/symfony
- Las ips de los servidores están hardcodeadas en el código
- Si un administrador añade un nuevo servidor de memcached, debe modificar el código para que nuestra aplicación lo pueda utilizar
- No es fácilmente automatizable
Problema: implementación actual
Jornadas Symfony http://decharlas.uji.es/symfony
Configuración de caché propia
config / bsCache.yml
Jornadas Symfony http://decharlas.uji.es/symfony
Configuración de caché propia
Más elegante y mantenible
config / bsCache.yml
Jornadas Symfony http://decharlas.uji.es/symfony
Configuración de caché propia
Jornadas Symfony http://decharlas.uji.es/symfony
Configuración de caché propia
Cacheamos el archivo de configuración
Leemos la configuración desde cache
Jornadas Symfony http://decharlas.uji.es/symfony
- Hemos dejado más accesible la configuración a los sysadmin y otras personas no programadoras que mantengan el pool de memcached
- Estaría bien que se pudiese automatizar el despliegue de nuevos nodos para memcached de forma fácil
Configuración de caché propia
Jornadas Symfony http://decharlas.uji.es/symfony
Automatizamos el añadir nuevos servers al pool
Jornadas Symfony http://decharlas.uji.es/symfony
Automatizamos el añadir nuevos servers al pool
Leemos la configuración y agregamos un nuevo servidor en el caso de que sea necesario
Jornadas Symfony http://decharlas.uji.es/symfony
Resultado
Jornadas Symfony http://decharlas.uji.es/symfony
Resultado
Con un solo comando la aplicación usará el nuevo nodo del pool de memcached
Jornadas Symfony http://decharlas.uji.es/symfony
MySQL
Jornadas Symfony http://decharlas.uji.es/symfony
Suele ser la primera necesidad a la hora de escalar y el principal cuello de botella en rendimiento
Opciones habituales:
• Arquitectura Master – Slave• Optimización de consultas , ¿ORM, DQL? y
mysql • Desnormalización y No-SQL• Particiones o estrategias federated• Busquedas: Sphinx
Symfony / MySql
Jornadas Symfony http://decharlas.uji.es/symfony
Nodos master: para escribir
Nodos slaves: para leer
Objetivos:
- Replicación y alta disponibilidad.
- Delegamos las consultas read-only en los Slaves, liberando de esa carga a los servidores Master.
MySql / Master - Slave
Jornadas Symfony http://decharlas.uji.es/symfony
MySql / Master - Slave
Jornadas Symfony http://decharlas.uji.es/symfony
MySql / Master - Slave
lecturas y escrituras
Jornadas Symfony http://decharlas.uji.es/symfony
MySql / Master - Slave
Jornadas Symfony http://decharlas.uji.es/symfony
MySql / Master - Slave
LECTURASESCRITURAS
Jornadas Symfony http://decharlas.uji.es/symfony
MySql / Master - Slave
LECTURASESCRITURAS
Jornadas Symfony http://decharlas.uji.es/symfony
MySql / Master - Slave
Jornadas Symfony http://decharlas.uji.es/symfony
MySql / Master - Slave
Jornadas Symfony http://decharlas.uji.es/symfony
MySql / Master - Slave
Extendemos las clases Doctrine_Query y Doctrine_Record
Jornadas Symfony http://decharlas.uji.es/symfony
MySql / Master - Slave
Jornadas Symfony http://decharlas.uji.es/symfony
MySql / Master - Slave
Si la query es de tipo SELECT la conexión se hará a un servidor Slave, en caso contrario al master
Jornadas Symfony http://decharlas.uji.es/symfony
MySql / Master - Slave
Jornadas Symfony http://decharlas.uji.es/symfony
MySql / Master - Slave
Cuando salvemos, la consulta se hará contra el servidor master
Jornadas Symfony http://decharlas.uji.es/symfony
Reducir el número de consultas VS desglosar una consulta compleja en varias sencillas
QueryCache
Sustituir Count(*) por FOUND_ROWS()
Olvidarnos de DQL en consultas complejas
Desnormalizar VS usar NO-SQL: Memcached, Redis, Cassandra..
MySql / Optimizar
Jornadas Symfony http://decharlas.uji.es/symfony
MySql / sfPager sin Count
Jornadas Symfony http://decharlas.uji.es/symfony
MySql / sfPager sin Count
Añadimos SQL_CAC_FOUND_ROWS al SELECT
Jornadas Symfony http://decharlas.uji.es/symfony
MySql / sfPager sin Count
Contamos las tuplas totales con FOUND_ROWS
Jornadas Symfony http://decharlas.uji.es/symfony
Limitaciones de MySql en búsquedas
Bajo rendimiento en tablas con muchas tuplas en las que es necesario buscar en campos de texto muy grandes.
No distingue resultados en base a su relevancia.
A menudo obliga a desnormalizar.
MySql / Búsquedas
Jornadas Symfony http://decharlas.uji.es/symfony
Sphinx
- Ranking de resultados por relevancia
- Distribuido
- Muy rápido, tanto indexando como a la hora de devolver los resultados
- Indexación en caliente
MySql / Búsquedas
Jornadas Symfony http://decharlas.uji.es/symfony
Sphinx: proceso de búsqueda
MySql / Búsquedas
APLICACIÓN
Jornadas Symfony http://decharlas.uji.es/symfony
Sphinx: proceso de búsqueda
MySql / Búsquedas
APLICACIÓN
Jornadas Symfony http://decharlas.uji.es/symfony
Sphinx: proceso de búsqueda
MySql / Búsquedas
APLICACIÓN
Jornadas Symfony http://decharlas.uji.es/symfony
Sphinx: proceso de búsqueda
MySql / Búsquedas
APLICACIÓN
Jornadas Symfony http://decharlas.uji.es/symfony
Cache
Jornadas Symfony http://decharlas.uji.es/symfony
ViewCache (Symfony <=1.4)
- Caché a nivel de acción
- Caché a nivel de componente y partial
Doctrine posee caché a nivel de consultas
Opciones:
APC, Xcache, Memcached, SQLite, Disco…
Symfony / Cache
Jornadas Symfony http://decharlas.uji.es/symfony
Cache / APC
Jornadas Symfony http://decharlas.uji.es/symfony
Cache / APC
Cada servidor web almacena objetos localmente, inaccesibles desde el resto de frontales
Jornadas Symfony http://decharlas.uji.es/symfony
Pros
- Opcode para php, reduce carga de procesador- Nos permite almacenar información- Caché muy rápida Contras
- La caché es local- No escala horizontalmente
Cache / APC
Jornadas Symfony http://decharlas.uji.es/symfony
apc.shm_size (por defecto 30MB)Tamaño de memoria compartida utilizada para almacenar objetos.
apc.stat (por defecto 1)Si se encuentra activado comprueba por cada ciclo deejecución si el código ha cambiado. Estableciéndolo 0 incrementa el rendimiento siempre que
usemos rutas absolutas en los requires/includes.
Cache / APC
Jornadas Symfony http://decharlas.uji.es/symfony
Cache / Memcached
Jornadas Symfony http://decharlas.uji.es/symfony
Cache / Memcached
Cualquier servidor web puede gestionar la información de cache
Jornadas Symfony http://decharlas.uji.es/symfony
Cache / Memcached
Cualquier servidor web puede gestionar la información de cache
Cada servidor de memcached es el responsable de una serie de objetos
Jornadas Symfony http://decharlas.uji.es/symfony
Pros• Uno de los sistemas más rápidos• Nos permite distribuir la información• Fácilmente escalable
Contras• Almacenamiento no persistente• No hay replicación• Limitaciones:
• keys <= 255caracteres • valores <= 1MB
Cache / Memcached
Jornadas Symfony http://decharlas.uji.es/symfony
Pros• Uno de los sistemas más rápidos• Nos permite distribuir la información• Fácilmente escalable
Contras• Almacenamiento no persistente• No hay replicación*• Limitaciones:
• keys <= 255caracteres • valores <= 1MB
Cache / Memcached
Jornadas Symfony http://decharlas.uji.es/symfony
RepCache para MemcachedDota a memcached de replicación
Cache / Memcached
Jornadas Symfony http://decharlas.uji.es/symfony
Cache / sfViewCache
Jornadas Symfony http://decharlas.uji.es/symfony
Cache / sfViewCache
Cache de acción, incluyendo el layout
Jornadas Symfony http://decharlas.uji.es/symfony
Cache / sfViewCache
Cache de acción, sin incluir el layout
Jornadas Symfony http://decharlas.uji.es/symfony
Cache / sfViewCache
Cache de partial y componente
Jornadas Symfony http://decharlas.uji.es/symfony
- Nos facilita la invalidación de cache- Claves basadas en REST e integradas con el sistema de routing
- Está bien para empezar, pero en proyectos avanzados tendremos que considerar otras opciones:
- Estrategia personalizada de cache a nivel de controlador y modelo- Proxy Caché a nivel de sistema- ESI: Edge Side Includes, integrado en symfony 2
Cache / sfViewCache
Jornadas Symfony http://decharlas.uji.es/symfony
- Ideal para cachear estáticos almacenados en otras ubicaciones como s3
- Más óptimo que cualquier caché gestionado en nuestra aplicación, pero menos flexible
- La invalidación y en algunos casos la creación de la cache, debe ser gestionada desde la aplicación web o tareas automatizadas.
- Nos permite el uso de ESI, Edge Side Includes
Cache / proxyCache
Jornadas Symfony http://decharlas.uji.es/symfony
Cache / proxyCache
Jornadas Symfony http://decharlas.uji.es/symfony
Cache / proxyCache
Jornadas Symfony http://decharlas.uji.es/symfony
Cache / proxyCache
Evalúa si tiene cachede la vista solicitada.
Jornadas Symfony http://decharlas.uji.es/symfony
Cache / proxyCacheEn caso de no tener,solicita la información a losservidores web y de archivos.
Jornadas Symfony http://decharlas.uji.es/symfony
Cache / proxyCacheAlmacena la información en caché y responde a la petición.
Jornadas Symfony http://decharlas.uji.es/symfony
Cache / proxyCache
La siguiente petición es servida desde caché
Jornadas Symfony http://decharlas.uji.es/symfony
Opciones más usadas:
• Varnish: varnish-cache.org
• Nginx: nginx.org
• Squid: squid-cache.org
Cache / proxyCache
Jornadas Symfony http://decharlas.uji.es/symfony
Cache / proxyCache / Varnish
Jornadas Symfony http://decharlas.uji.es/symfony
Cache / proxyCache / VarnishConexión al servidor web
Cacheamos los estáticos
No cacheamos las peticiones POST
No cacheamos las peticiones que incluyan autenticación http o una cookie __sesion
Lo demás se cachea
Jornadas Symfony http://decharlas.uji.es/symfony
Cache / proxyCache / Varnish
Cuando una url es gestionada por la cache de varnish, se llamará a los métodos hit, miss y fetch
Jornadas Symfony http://decharlas.uji.es/symfony
Cache / proxyCache / Varnish
vcl_hitConfiguramos que si la url contiene la palabra «PURGAR_CACHE» elimine la caché.
vcl_missConfiguramos que si la url contiene la palabra «PURGAR_CACHE» y no se encuentra en caché, nos avise
Jornadas Symfony http://decharlas.uji.es/symfony
Cache / proxyCache / Varnish
vcl_fetchMiss llama a este método para que cree la caché.Ahí le establecemos el tiempo de vida de la misma
Jornadas Symfony http://decharlas.uji.es/symfony
ESI (Edge Side Includes) nos permiten incluir contenidos de una url en nuestras vistas.
Podemos distribuir contenido de nuestro site e incluso tratar cada parte como si se tratase de una aplicación web independiente.
Symfony2 incluirá soporte nativo para ESI.
Cache / proxyCache / ESI
Jornadas Symfony http://decharlas.uji.es/symfony
<esi:include src = " /esi/categorias.php" alt = " <?php echo url_for(…) ?>" onerror="continue" />
Cache / proxyCache / ESI
Jornadas Symfony http://decharlas.uji.es/symfony
<esi:include src = " /esi/categorias.php" alt = " <?php echo url_for(…) ?>" onerror="continue" />
Las urls pueden ser relativas o absolutas
Cache / proxyCache / ESI
Jornadas Symfony http://decharlas.uji.es/symfony
Dividir en capas
Jornadas Symfony http://decharlas.uji.es/symfony
Arquitecturas más modulares y por lo tanto, más fáciles de escalar horizontalmente.
Separamos los problemas en capas.
Nos permite usar varias tecnologías de forma transparente, la más adecuada para cada caso.
Dividir en capas
Jornadas Symfony http://decharlas.uji.es/symfony
- Almacenamiento de archivos y estáticos
- Cache
- Acceso a fuentes de datos
- Mailing
- Procesamiento de media o tareas de cálculo
Dividir en capas
Jornadas Symfony http://decharlas.uji.es/symfony
Consejo de Yahoo!: no usar ORMsUna buena estrategia si:
- Usamos diferentes tecnologías de bases de datos según el tipo de información
- Equipos de trabajo concentrados exclusivamente en esa área
- Nuestra tecnología de base de datos no implementa interfaz PDO
Capas / Acceso a base de datos
Jornadas Symfony http://decharlas.uji.es/symfony
Gestión IT
Jornadas Symfony http://decharlas.uji.es/symfony
Monitorización- Alertas: Nagios- Gráficos: Munin, Ganglia, Cacti
Aprovisionamiento- Buena nomenclatura- Configuraciones bajo control de versiones- Automatización de aprovisionamiento (Virtualización o
instalación por red)
Backup- ¿Has probado a restaurar?- Configuraciones bajo control de versiones
Gestión IT
Jornadas Symfony http://decharlas.uji.es/symfony
Agenda
0. Presentación
1. Arquitectura web: escalabilidad y rendimiento
2. Cloud computing
3. Preguntas
Jornadas Symfony http://decharlas.uji.es/symfony
- Tres modelos principales: SAAS, PAAS y IAAS
- Nos despreocupamos de los costes y gestión de la capa de hardware y de red
- El despliegue es inmediato
- Pago por uso
- La escalabilidad horizontal no es un problema
Cloud computing
Jornadas Symfony http://decharlas.uji.es/symfony
IAAS
- No hay que aprender nada nuevo en la capa de sistemas.
- Nos permite migrar aplicaciones sin hacer grandes cambios
- Tenemos límites similares o menores a los que tendríamos en una infraestructura física
IAAS vs PAAS
PAAS
- Hay que pensar de forma distinta a como pensaríamos en una infraestructura física.
- Hay que desarrollar siendo conscientes de los requisitos y recursos de dicho entorno
- Suele ser mucho más sencillo para un programador. Abstrae de la complejidad de la capa de sistemas.
Jornadas Symfony http://decharlas.uji.es/symfony
IAAS
- Amazon EC2
- Softlayer
- UbiCloud
- Rackspace
- …
IAAS vs PAAS / Proveedores
PAAS
- Microsoft Azure
- Google App Engine
- Amazon S3, SDB
- …
Jornadas Symfony http://decharlas.uji.es/symfony
AMAZON EC2, S3, SQS
Jornadas Symfony http://decharlas.uji.es/symfony
Jornadas Symfony http://decharlas.uji.es/symfony
- Permite desplegar instancias virtuales desde AMIs en minutos
- Permite configurar AMIs y compartirlas con la comunidad
- Distintos tipos de instancias: desde 1.7GB de Ram hasta 64.8GB de Ram
- Pago por tiempo de CPU, transferencia de datos e I/O
- Disponemos de volúmenes EBS, ip fijas, snapshots, balanceo y monitorización (CloudWatch)
Amazon / EC2
Jornadas Symfony http://decharlas.uji.es/symfony
- Almacenamiento de objetos clave / valor. Cada archivo es un objeto.
- Para recuperar grandes cantidades de objetos, disponemos de AWS Import/Export
- Se paga por almacenamiento, número de peticiones y transferencia.
- El almacenamiento es flexible e infinito, pero cada objeto tiene un límite de 5GB
- Accesible mediante REST con url basada en subdominios o directorio:http:// [bucket_id] .dominio.com/objetohttp://s3.amazonaws3.com/ [bucket_id] /objeto
Amazon / S3
Jornadas Symfony http://decharlas.uji.es/symfony
- Servicio de cola de mensajes
- Ideal para trabajos de alta carga que se puedan hacer de forma asíncrona
- Se paga por transferencia y número de mensajes.
- El almacenamiento es flexible e infinito.
Amazon / SQS
Jornadas Symfony http://decharlas.uji.es/symfony
- Conjunto de clases para trabajar con los servicios web de Amazon
- Muy bien documentada y soporta todos los servicios de Amazon
- Es muy sencilla de utilizar
Amazon / Cloudfusion
Jornadas Symfony http://decharlas.uji.es/symfony
Amazon / Cloudfusion / S3
Subimos un archivo a S3
Jornadas Symfony http://decharlas.uji.es/symfony
Amazon / Cloudfusion / S3
Subimos un archivo a S3 Creamos un bucket
Subimos el archivo al bucket
Jornadas Symfony http://decharlas.uji.es/symfony
Amazon / Cloudfusion / EC2
Jornadas Symfony http://decharlas.uji.es/symfony
Amazon / Cloudfusion / EC2Arranco una instancia virtual en EC2
Le asocio una dirección ip pública.
Jornadas Symfony http://decharlas.uji.es/symfony
Amazon / Cloudfusion
- Usando cloudfusion junto a las herramientas de configuración y tareas de Symfony, automatizamos el crecimiento y gestión de la infraestructura.
- Podemos en todo momento aumentar nuestra capacidad de almacenamiento y proceso, de forma inmediata y flexible
Jornadas Symfony http://decharlas.uji.es/symfony
Resumen
Jornadas Symfony http://decharlas.uji.es/symfony
- Debemos empezar a pensar en la infraestructura como parte de nuestro proyecto de desarrollo
- Además de por escalar, necesitamos preocuparnos por el rendimiento para reducir nuestros costes
- Hoy en día existen más opciones que Apache + Mysql en entornos Linux
- El cloud computing es una opción asequible para disponer de arquitecturas pensadas para escalar desde el principio.
Resumen
Jornadas Symfony http://decharlas.uji.es/symfony
Agenda
0. Presentación
1. Arquitectura web: escalabilidad y rendimiento
2. Cloud computing
3. Preguntas
GRACIASAsier Marqués asiermarques@blackslot.com
Jornadas Symfony 5 y 6 de julio 2010Universitat Jaume I, Castellón
http://decharlas.uji.es/symfony