SlideShare una empresa de Scribd logo
1 de 41
Desafíos para escalar
aplicaciones Web
Emilio Davis
Gerente de Tecnologías
Bligoo.com
emilio@bluecompany.cl
twitter.com/emiliodavis
1. Definiciones
2. El desafío de escalar
3. Elegir los componentes de las capas de la
aplicación.
4. Ciclo crecimiento-tunning-crecimiento
Temario
1. Definiciones
2. El desafío de escalar
3. Elegir los componentes de las capas de la
aplicación
4. Ciclo crecimiento-tunning-crecimiento
Temario
Pasado cierto número de usuarios la
rentabilidad de cada uno debe ser
positiva.
Bligoo: Ancho de banda consumido v/s Carga
Se puede escalar de dos formas, vertical y
horizontalmente.
Escalamiento Vertical: Agregar más “poder” a
cada nodo.
Pros
Trivial de implementar y administrar
Casi todo el software escala bien verticalmente
Ej. Más RAM → Más procesos Apache/Java
Contras
Costo de hardware exponencialmente alto.
Escalamiento Horizontal: Agregar más nodos.
Pros
Costo de hardware lineal.
Contra
Más complejo de implementar.
Más complejo de administrar.
No todo el software está preparado.
Usualmente se mezclan los dos modelos, se
escala verticalmente mientras los costos no se
disparan y horizontalmente después.
El “cuando” se mueve rápidamente. (Ley de
Moore)
1. Definiciones
2. El desafío de escalar
3. Elegir los componentes de las capas de la
aplicación
4. Ciclo crecimiento-tunning-crecimiento
Temario
Crecer verticalmente es trivial (o razonablemente
fácil).
El real desafío es crecer horizontalmente
manteniendo controlado el costo de desarrollo y
operación.
Es difícil y no hay recetas infalibles, pero nuestra
experiencia en Bligoo nos dice que necesitamos al
menos:
Calidad del equipo
Para que una aplicación no sólo crezca, sino que
escale, es necesario un equipo excepcional.
Conocimento
Teórico: el equipo debe manejar algoritmos y
estructuras de datos complejas
Práctico: el equipo debe sentirse cómodo con
cada componente tecnológico de la aplicación.
Calidad de los procesos
No es posible generar una aplicación escalable si
hay emergencias todos los domingos.
Ciclos de desarrollo claros y no muy largos,
empoderamiento del equipo, etc.
Manejo de versiones del código (svn, cvs, git...).
Control de historias de usuarios, bugs, casos de
uso (jira, mantis, bugzilla, etc).
Pruebas unitarias y de integración.
Calidad del software
Todas las líneas de código deben ser “aceptables”
y unas pocas geniales.
Arquitectura simple y probada
O suficientemente simple para que la entienda
todo el equipo (desarrollo y operación)
Este NO es el espacio para probar lo último que
leíste en <inserte blog cool> (DB sharding, motor
experimental de mysql, pre-alpha de cache
distribuido de moda, etc).
Framework y lenguaje de desarrollo
con énfasis en rendimiento
Muchos frameworks permiten prototipado rápido
pero no ofrecen performance razonable.
Verificar si hay casos de éxito en producción
antes de elegirlo.
Apertura de mente
Pese a lo dicho antes, soluciones poco ortodoxas
pueden ser justo lo que necesitabas. (NoSQL por
ejemplo)
1. Definiciones
2. El desafío de escalar
3. Elegir los componentes de las capas de la
aplicación
4. Ciclo crecimiento-tunning-crecimiento
Temario
Contenido estático (web server)
Hay muchas soluciones opensource y de código
privativo que resuelven bien este problema.
apache, lighttpd, nginx, iis, etc
Lógica de la aplicación
Decidir el lenguage de programación basado en la
experiencia del equipo mientras ofrezca
capacidades documentadas de escalabilidad y
disponibilidad de IDEs razonables.
Elegir el framework de desarrollo basado en las
capacidades documentadas de escalabilidad
horizontal.
Capa de lógica (cont.)
Por la naturaleza stateless de las aplicaciones
web, usualmente la capa de lógica escala
trivialmente, un request puede ser respondido por
cualquier nodo de la capa lógica.
Usar “caches” siempre que se pueda. (jboss-
cache, memcached, etc), ojo con los caches
replicados versus los distribuidos.
Capa de persistencia
En las aplicaciones Web la capa de persistencia
(usualmente base de datos) es la que presenta las
mayores complejidades al escalar.
En Bligoo usamos y recomendamos Mysql.
Escalabilidad en Mysql
Existen dos modelos de crecimiento horizontal en
Mysql
Mysql cluster y Mysql Replication
Mysql Cluster
Promete alta disponibilidad y buen performance
pero es muy complejo de implementar y
administrar.
Mysql Replication
Mysql Replication
Usa uno o dos nodos “maestros” en los que se
puede escribir y leer, y N esclavos donde se puede
leer.
Permite HA y respaldos “en vivo” o “atrasados”,
incluso distanciados geográficamente.
Trivial de implementar y razonablemente sencillo
de administrar.
Mysql Replication
Los esclavos funcionan serialmente, por lo que
pueden atrasarse. Si pierden la conexión con el
maestro pueden atrasarse sin saberlo.
Mysql cluster + replication
Siempre aparecerán problemas de performance.
La gracia está en darse cuenta a tiempo.
1. Definiciones
2. El desafío de escalar
3. Elegir los componentes de las capas de la
aplicación
4. Ciclo crecimiento-tunning-crecimiento
Temario
Detectar (o predecir) rápidamente el
problema
Usar software de monitoreo (cacti, nagios, etc)
Definir la línea base en los servidores: iostat,
vmstat, status e innodb status en mysql.
Logear todo, en particular las queries lentas
(en lo posible usar el patch microslow).
Predecir el punto del swap de la muerte.
Corregir el problema
Queries
Select * from tabla_gigante;
Select count(*) where condicion;
Select a, b where f(a) = const;
Select a where b in (...);
Select a where b not in (...);
Corregir el problema
Índices (B-TREES):
Se leen de izquierda a derecha sin saltarse
ninguno.
Toda query debe ser indexada.
Ojo con los índices “repetidos”.
Si lo permite la memoria, usar los índices
para leer los elementos seleccionados.
En InnoDB la llave primaria es siempre parte
del índice.
Usar LEFT al crear índices de textos.
Corregir el problema
Caches:
Toda la RAM disponible se debería usar en
caches.
Distribuidos son más “eficientes”.
Replicados son más seguros.
Buddy-Replication es lo mejor de ambos
mundos.
Llave-valor v/s Path-valor.
No confundir con Query Cache de mysql.
Corregir el problema
Búsqueda:
No usar LIKE
En vez de LIKE usar FULL-TEXT.
Mejor que FULL-TEXT es sphinx o lucene.
Tipos de datos
Usar los tipos de datos más chicos posible.
Declararlos “NOT NULL” siempre que se
pueda.
Corregir el problema
Como regla general usar InnoDB plugin salvo:
Si no importa la persistencia de los datos y
la tabla es “chica”, es más rápido usar
MEMORY.
Si se necesita búsqueda full-text se debe
usar MyISAM.
Si la aplicación está hecha para MyISAM (usa
el feature del count(*) extensivamente, por
ejemplo).
Probar la solución
Tener servidores de prueba similares a
producción y someterlos a carga real (usando
logs de transacciones).
Automatizar las pruebas de carga: jmeter.
Finalmente
Aplicar la solución
...y a buscar el siguiente cuello de botella...
Desafíos para escalar
aplicaciones Web
Emilio Davis
Gerente de Tecnologías
Bligoo.com
emilio@bluecompany.cl
twitter.com/emiliodavis

Más contenido relacionado

Similar a Webprendedor 2009 Escalabilidad

Big table por Matias tesoriero
Big table por Matias tesorieroBig table por Matias tesoriero
Big table por Matias tesorieromtesoriero
 
Taller de base de datos
Taller de base de datosTaller de base de datos
Taller de base de datosBase de Datos
 
Cesnavarra 2009-boletín 3
Cesnavarra 2009-boletín 3Cesnavarra 2009-boletín 3
Cesnavarra 2009-boletín 3Cein
 
Softonic Labs - Web Escalable
Softonic Labs - Web EscalableSoftonic Labs - Web Escalable
Softonic Labs - Web EscalableAlex Puig
 
Apache Cassandra - Base de datos
Apache Cassandra - Base de datosApache Cassandra - Base de datos
Apache Cassandra - Base de datosZteeven Zalinas
 
Introducción a la Nube Nativa - v1.0es (2021/03)
Introducción a la Nube Nativa - v1.0es (2021/03)Introducción a la Nube Nativa - v1.0es (2021/03)
Introducción a la Nube Nativa - v1.0es (2021/03)Young Suk Ahn Park
 
09. Java desde Cero autor UNAM_1.111.pdf
09. Java desde Cero autor UNAM_1.111.pdf09. Java desde Cero autor UNAM_1.111.pdf
09. Java desde Cero autor UNAM_1.111.pdfIrene619127
 
Terraspace, the definitive terraform framework
Terraspace, the definitive terraform frameworkTerraspace, the definitive terraform framework
Terraspace, the definitive terraform frameworkMario IC
 
Jsf Java Server Faces
Jsf   Java Server FacesJsf   Java Server Faces
Jsf Java Server Facescok12v
 
Proyectos escalables con Drupal
Proyectos escalables con DrupalProyectos escalables con Drupal
Proyectos escalables con DrupalPablo Cerda
 

Similar a Webprendedor 2009 Escalabilidad (20)

curso_mysql.pdf
curso_mysql.pdfcurso_mysql.pdf
curso_mysql.pdf
 
Big table por Matias tesoriero
Big table por Matias tesorieroBig table por Matias tesoriero
Big table por Matias tesoriero
 
Taller de base de datos
Taller de base de datosTaller de base de datos
Taller de base de datos
 
Semana9 Vbr
Semana9 VbrSemana9 Vbr
Semana9 Vbr
 
Apache cassandra
Apache cassandraApache cassandra
Apache cassandra
 
Cesnavarra 2009-boletín 3
Cesnavarra 2009-boletín 3Cesnavarra 2009-boletín 3
Cesnavarra 2009-boletín 3
 
Softonic Labs - Web Escalable
Softonic Labs - Web EscalableSoftonic Labs - Web Escalable
Softonic Labs - Web Escalable
 
Dbdeployer
DbdeployerDbdeployer
Dbdeployer
 
Apache Cassandra - Base de datos
Apache Cassandra - Base de datosApache Cassandra - Base de datos
Apache Cassandra - Base de datos
 
Introducción a la Nube Nativa - v1.0es (2021/03)
Introducción a la Nube Nativa - v1.0es (2021/03)Introducción a la Nube Nativa - v1.0es (2021/03)
Introducción a la Nube Nativa - v1.0es (2021/03)
 
Java desde Cero.pdf
Java desde Cero.pdfJava desde Cero.pdf
Java desde Cero.pdf
 
MEAN ¿otro buzzword?
MEAN ¿otro buzzword?MEAN ¿otro buzzword?
MEAN ¿otro buzzword?
 
JAVA3.0
JAVA3.0JAVA3.0
JAVA3.0
 
Iphone
IphoneIphone
Iphone
 
Java desde cero
Java desde ceroJava desde cero
Java desde cero
 
Intro cassandra
Intro cassandraIntro cassandra
Intro cassandra
 
09. Java desde Cero autor UNAM_1.111.pdf
09. Java desde Cero autor UNAM_1.111.pdf09. Java desde Cero autor UNAM_1.111.pdf
09. Java desde Cero autor UNAM_1.111.pdf
 
Terraspace, the definitive terraform framework
Terraspace, the definitive terraform frameworkTerraspace, the definitive terraform framework
Terraspace, the definitive terraform framework
 
Jsf Java Server Faces
Jsf   Java Server FacesJsf   Java Server Faces
Jsf Java Server Faces
 
Proyectos escalables con Drupal
Proyectos escalables con DrupalProyectos escalables con Drupal
Proyectos escalables con Drupal
 

Último

El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxJOSEMANUELHERNANDEZH11
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel tallerValentinaTabares11
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxAlexander López
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOnarvaezisabella21
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
Explorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramExplorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramDIDIERFERNANDOGUERRE
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 

Último (20)

El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptx
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel taller
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
Explorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramExplorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ram
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 

Webprendedor 2009 Escalabilidad

  • 1. Desafíos para escalar aplicaciones Web Emilio Davis Gerente de Tecnologías Bligoo.com emilio@bluecompany.cl twitter.com/emiliodavis
  • 2. 1. Definiciones 2. El desafío de escalar 3. Elegir los componentes de las capas de la aplicación. 4. Ciclo crecimiento-tunning-crecimiento Temario
  • 3. 1. Definiciones 2. El desafío de escalar 3. Elegir los componentes de las capas de la aplicación 4. Ciclo crecimiento-tunning-crecimiento Temario
  • 4. Pasado cierto número de usuarios la rentabilidad de cada uno debe ser positiva.
  • 5. Bligoo: Ancho de banda consumido v/s Carga
  • 6. Se puede escalar de dos formas, vertical y horizontalmente.
  • 7. Escalamiento Vertical: Agregar más “poder” a cada nodo. Pros Trivial de implementar y administrar Casi todo el software escala bien verticalmente Ej. Más RAM → Más procesos Apache/Java Contras Costo de hardware exponencialmente alto.
  • 8. Escalamiento Horizontal: Agregar más nodos. Pros Costo de hardware lineal. Contra Más complejo de implementar. Más complejo de administrar. No todo el software está preparado.
  • 9. Usualmente se mezclan los dos modelos, se escala verticalmente mientras los costos no se disparan y horizontalmente después. El “cuando” se mueve rápidamente. (Ley de Moore)
  • 10. 1. Definiciones 2. El desafío de escalar 3. Elegir los componentes de las capas de la aplicación 4. Ciclo crecimiento-tunning-crecimiento Temario
  • 11. Crecer verticalmente es trivial (o razonablemente fácil). El real desafío es crecer horizontalmente manteniendo controlado el costo de desarrollo y operación.
  • 12. Es difícil y no hay recetas infalibles, pero nuestra experiencia en Bligoo nos dice que necesitamos al menos:
  • 13. Calidad del equipo Para que una aplicación no sólo crezca, sino que escale, es necesario un equipo excepcional.
  • 14. Conocimento Teórico: el equipo debe manejar algoritmos y estructuras de datos complejas Práctico: el equipo debe sentirse cómodo con cada componente tecnológico de la aplicación.
  • 15. Calidad de los procesos No es posible generar una aplicación escalable si hay emergencias todos los domingos. Ciclos de desarrollo claros y no muy largos, empoderamiento del equipo, etc. Manejo de versiones del código (svn, cvs, git...). Control de historias de usuarios, bugs, casos de uso (jira, mantis, bugzilla, etc). Pruebas unitarias y de integración.
  • 16. Calidad del software Todas las líneas de código deben ser “aceptables” y unas pocas geniales.
  • 17. Arquitectura simple y probada O suficientemente simple para que la entienda todo el equipo (desarrollo y operación) Este NO es el espacio para probar lo último que leíste en <inserte blog cool> (DB sharding, motor experimental de mysql, pre-alpha de cache distribuido de moda, etc).
  • 18. Framework y lenguaje de desarrollo con énfasis en rendimiento Muchos frameworks permiten prototipado rápido pero no ofrecen performance razonable. Verificar si hay casos de éxito en producción antes de elegirlo.
  • 19. Apertura de mente Pese a lo dicho antes, soluciones poco ortodoxas pueden ser justo lo que necesitabas. (NoSQL por ejemplo)
  • 20. 1. Definiciones 2. El desafío de escalar 3. Elegir los componentes de las capas de la aplicación 4. Ciclo crecimiento-tunning-crecimiento Temario
  • 21. Contenido estático (web server) Hay muchas soluciones opensource y de código privativo que resuelven bien este problema. apache, lighttpd, nginx, iis, etc
  • 22. Lógica de la aplicación Decidir el lenguage de programación basado en la experiencia del equipo mientras ofrezca capacidades documentadas de escalabilidad y disponibilidad de IDEs razonables. Elegir el framework de desarrollo basado en las capacidades documentadas de escalabilidad horizontal.
  • 23. Capa de lógica (cont.) Por la naturaleza stateless de las aplicaciones web, usualmente la capa de lógica escala trivialmente, un request puede ser respondido por cualquier nodo de la capa lógica. Usar “caches” siempre que se pueda. (jboss- cache, memcached, etc), ojo con los caches replicados versus los distribuidos.
  • 24. Capa de persistencia En las aplicaciones Web la capa de persistencia (usualmente base de datos) es la que presenta las mayores complejidades al escalar. En Bligoo usamos y recomendamos Mysql.
  • 25. Escalabilidad en Mysql Existen dos modelos de crecimiento horizontal en Mysql Mysql cluster y Mysql Replication
  • 26. Mysql Cluster Promete alta disponibilidad y buen performance pero es muy complejo de implementar y administrar.
  • 28. Mysql Replication Usa uno o dos nodos “maestros” en los que se puede escribir y leer, y N esclavos donde se puede leer. Permite HA y respaldos “en vivo” o “atrasados”, incluso distanciados geográficamente. Trivial de implementar y razonablemente sencillo de administrar.
  • 29. Mysql Replication Los esclavos funcionan serialmente, por lo que pueden atrasarse. Si pierden la conexión con el maestro pueden atrasarse sin saberlo.
  • 30. Mysql cluster + replication
  • 31. Siempre aparecerán problemas de performance. La gracia está en darse cuenta a tiempo.
  • 32. 1. Definiciones 2. El desafío de escalar 3. Elegir los componentes de las capas de la aplicación 4. Ciclo crecimiento-tunning-crecimiento Temario
  • 33. Detectar (o predecir) rápidamente el problema Usar software de monitoreo (cacti, nagios, etc) Definir la línea base en los servidores: iostat, vmstat, status e innodb status en mysql. Logear todo, en particular las queries lentas (en lo posible usar el patch microslow). Predecir el punto del swap de la muerte.
  • 34. Corregir el problema Queries Select * from tabla_gigante; Select count(*) where condicion; Select a, b where f(a) = const; Select a where b in (...); Select a where b not in (...);
  • 35. Corregir el problema Índices (B-TREES): Se leen de izquierda a derecha sin saltarse ninguno. Toda query debe ser indexada. Ojo con los índices “repetidos”. Si lo permite la memoria, usar los índices para leer los elementos seleccionados. En InnoDB la llave primaria es siempre parte del índice. Usar LEFT al crear índices de textos.
  • 36. Corregir el problema Caches: Toda la RAM disponible se debería usar en caches. Distribuidos son más “eficientes”. Replicados son más seguros. Buddy-Replication es lo mejor de ambos mundos. Llave-valor v/s Path-valor. No confundir con Query Cache de mysql.
  • 37. Corregir el problema Búsqueda: No usar LIKE En vez de LIKE usar FULL-TEXT. Mejor que FULL-TEXT es sphinx o lucene. Tipos de datos Usar los tipos de datos más chicos posible. Declararlos “NOT NULL” siempre que se pueda.
  • 38. Corregir el problema Como regla general usar InnoDB plugin salvo: Si no importa la persistencia de los datos y la tabla es “chica”, es más rápido usar MEMORY. Si se necesita búsqueda full-text se debe usar MyISAM. Si la aplicación está hecha para MyISAM (usa el feature del count(*) extensivamente, por ejemplo).
  • 39. Probar la solución Tener servidores de prueba similares a producción y someterlos a carga real (usando logs de transacciones). Automatizar las pruebas de carga: jmeter.
  • 40. Finalmente Aplicar la solución ...y a buscar el siguiente cuello de botella...
  • 41. Desafíos para escalar aplicaciones Web Emilio Davis Gerente de Tecnologías Bligoo.com emilio@bluecompany.cl twitter.com/emiliodavis