SlideShare uma empresa Scribd logo
1 de 47
De cero a 1.7 M de usuarios
Grails, opción real para sitios web de alta carga y escalabilidad.
             Una experiencia al crear la más grande
    plataforma de eCommerce con Grails en Latinoamérica.
Agenda
• Negocio

• Diseño inicial

• Infraestructura

• Problemas

• El futuro
Negocio
   Una tienda en linea, con una amplia
y creciente gama de servicios y productos
Negocio
• Ventas en grupo

• Cupones.

• Pero no solo cupones...

• Campañas de email masivas.

• Campañas de publicidad masivas.
Diseño inicial
Grails, Terracotta, RabbitMQ & mySQL
Grails
• Grails 1.3.4

 • GORM

 • Servicios

 • Controllers y TagLibs

 • Jobs
GORM, lo bueno
• Facilidad de crear modelos

 • Modelos ricos

• Consultas

 • Criteria

 • DynamicFinders

• Actualización del esquema de base de datos
GORM, lo malo
• No es posible probar DynamicFinder y Criteria de forma
  unitaria

• Pruebas integrales, a veces toma mucho tiempo

• Es sencillo cometer errores debido a la facilidad

  • Olvidar crear indices

  • Iterar grandes colecciones

  • Dejar que Grails nombre relaciones (tablas o campos)
Servicios, lo bueno
• Lógica de negocio

• Servicios que “escuchan” eventos

• Extensivo uso de Dependency Inyection

• Composición, agregación

• Reglas de negocio flexibles
Servicios, lo malo
• Abusar de Dependency Inyection

  • Referencias circulares

  • No es tema de Grails exclusivamente, con Spring
    se presenta también.

• Duplicar nombres de Servicios, en diferentes
  paquetes

• Olvidar quitar la administración transaccional cuando
  no es necesaria.
Controllers, lo bueno

• Ridículamente simple

• Generar JSON/XML es trivial

• Reglas de mapeo, muy sencillo y flexible
  (URLMappings)

• Totalmente desacoplado de la vista
Controllers, lo malo


• Nada
TagLibs, lo bueno
• Estúpidamente simple crearlas :)

• Apoyo de Dependency Inyection para
  acceder a servicios, o a cualquier
  componente.

• Condicionar la generación de contenido

• Llenar plantillas (fragmentos de una página)
TagLibs, lo malo


• Usarlas como scriptlets
Grails, en general
• Permite que un desarrollador Java, explote su
  conocimiento.

• Aumenta la productividad debido a el uso de
  “Convención sobre Configuración”

• Incrementa brutalmente la facilidad de
  convertir requerimientos de negocio en
  código ejecutable
Grails

• En mi humilde opinión, la mejor opción para
  desarrollo web en Java, de cualquier tamaño
  o requerimiento

• Disclaimer: Es solo mi experiencia personal,
  no puedo garantizar el mal uso de Grails.
  También puedo equivocarme. Es mi punto de
  vista como desarrollador.
Negocio
• En Agosto de 2010 @dvd2k5
  me dijo:

  • Hey domix; en un año
    tendremos un millón de
    usuarios

• @domix

  • :O
Escalabilidad y
     Disponibilidad
Vitales para estar en un negocio muy competitivo
Terracotta
• Cache distribuido

• Evitamos accesos a la BD

• Guardamos Objetos Java y HTML

 • Entidades de Hibernate

 • Páginas completas

 • Fragmentos de páginas
Terracotta

• Usamos EhCache como “fachada”

 • En desarrollo no usamos Terracotta

 • En producción y QA configurado

 • El código aplicativo no se ve modificado
Terracotta
• IMHO, es una de las mejores piezas de software
  jamas escritas en Java

• Robusto, Estable

• Confiable, Ligero

• Casi cero administración

• Configuración muy sencilla

• Uptime de meses en producción
Terracotta
• Lo usamos para clusterizar sesiones HTTP,
  pero no quedo productivo

• No quería cargar con mas trabajo a Terracotta

• Evitar tener un solo punto de falla

• También lo usamos muy poco tiempo para
  clusterizar Jobs con Quartz
RabbitMQ
• Servicio de mensajería

• Diferente a JMS

• Escrito en Erlang

• Muy robusto, estable

• Casi cero administración

• Desarrollado por vmWare
RabbitMQ
• Procesamiento asíncrono

• Procesos muy tardados

 • Envío de email

 • Consultas pesadas (reportes financieros)

• Integración con otras aplicaciones
RabbitMQ, lo malo
• No hay muchas herramientas de
  administración/monitoreo

• Las que hay son poco “amistosas”

• Cuando falla, falla muy duro

• Los logs de error son como Hebreo antiguo o
  mas bien como lenguaje Orco.
RabbitMQ, lo malo
• No hay muchas herramientas de
  administración/monitoreo

• Las que hay son poco “amistosas”

• Cuando falla, falla muy duro

• Los logs de error son como Hebreo antiguo o
  mas bien como lenguaje Orco.
RabbitMQ, nada malo
• Antes he usado varios servicios de
  mensajería

• Todos ellos basados en Java

• RabbitMQ ha sido al que he visto que se le ha
  puesto una carga muy grande, sin necesidad
  de afinar la configuración.

• IMHO. La mejor opción.
RabbitMQ, nada malo
• Antes he usado varios servicios de
  mensajería

• Todos ellos basados en Java

• RabbitMQ ha sido al que he visto que se le ha
  puesto una carga muy grande, sin necesidad
  de afinar la configuración.

• IMHO. La mejor opción.
mySQL


• ¿que puedo decir?
mySQL
• Tenemos instalada una versión “tuneada” por
  RackSpace

• Una palabra para describirla: Impresionante

• He vivido engañado por muchos años.

 • Un pequeño comportandose como nunca he visto
   un grande.

• Nuestro mySQL ha soportado +15 millones de
  queries en un día
Infraestructura
     2 versiones
Cajas Versión 1
• 2 WebServers

  • 1 Tomcat 6 con AJP = cluster de 2 Tomcats

  • Apache HTTPD con mod_proxy

• 1 DBServer

• 1 Firewall físico

• 1 LoadBalancer físico

• Rackspace Londres
Cajas Versión 2
• 4 WebServers

  • 2 Tomcat 6 con AJP = cluster de 8 Tomcats

  • Apache HTTPD con mod_proxy

• 1 DBServer

• 1 Firewall físico

• 1 LoadBalancer físico
Fierros Versión 2
• Dual Quad Core Xeon 2.26 HGZ

• 24 GB de RAM

• 300 GB SAS X 3

• RedHat Enterprise Linux 5.6

• En Hospedaje dedicado en Rackspace
  Chicago
Problemas
• Quartz Jobs clusterizados

 • Ahora corren en una instancia propia

• Indices faltantes en la base de datos

• Consultas muy mal escritas

• Mala configuración del log
Solucionar problemas

• Necesitas métricas, indicadores

• Medición

• ¿Profiler?

• ¿JMX?
Competitividad




Datos de Alexa.com del día 21 de Octubre de 2011
¿Como lo logramos?
Negocio
• En Septiembre de 2011
  @dvd2k5 me dijo:

  • Hey domix; en un año
    tendremos 5 millones de
    usuarios

• @domix

  • :O
Estrategia actual y futura
•   Hacer la webapp actual lo mas estática posible
•   Modularizar la aplicación en un conjunto de
    servicios
•   Usar mensajería para comunicarlos
•   Usar Scala como lenguaje complementario a Groovy
•   Akka para procesamiento asíncrono
•   MongoDB como almacén secundario
•   Redis como cache recundario
Estrategia actual y futura

• Convirtiendo los servicios en un API Rest
• clickOnero móvil iOS este año
• clickOnero móvil Android próximo año
• Facebook App próximo año
• Apertura del API próximo año
El equipo
¿Preguntas?
Créditos fotos
•   http://flic.kr/p/e61Pt    •   http://flic.kr/p/2wGvZi

•   http://flic.kr/p/7cxoek   •   http://flic.kr/p/7jLN6x

•   http://flic.kr/p/5vSqgq   •   http://flic.kr/p/2VvzMw

•   http://flic.kr/p/6K9jb8   •   http://flic.kr/p/9c7z9T

•   http://flic.kr/p/6h8UoU   •   http://flic.kr/p/J1NKm

•   http://flic.kr/p/24GsCj

Mais conteúdo relacionado

Mais procurados

Multiplica tu productividad usando un preprocesador de css
Multiplica tu productividad usando un preprocesador de cssMultiplica tu productividad usando un preprocesador de css
Multiplica tu productividad usando un preprocesador de css
Leonidas Esteban González
 

Mais procurados (20)

SQL Server 2017 soporte en Linux
SQL Server 2017 soporte en LinuxSQL Server 2017 soporte en Linux
SQL Server 2017 soporte en Linux
 
AWS Summit Mexico City 2018 - Usando Elastic Beanstalk
AWS Summit Mexico City 2018 - Usando Elastic BeanstalkAWS Summit Mexico City 2018 - Usando Elastic Beanstalk
AWS Summit Mexico City 2018 - Usando Elastic Beanstalk
 
DevOps & Infraestructura como código: Promesas Rotas
DevOps & Infraestructura como código: Promesas RotasDevOps & Infraestructura como código: Promesas Rotas
DevOps & Infraestructura como código: Promesas Rotas
 
Integrando Groovy & Grails en el proceso de desarrollo
Integrando Groovy & Grails en el proceso de desarrolloIntegrando Groovy & Grails en el proceso de desarrollo
Integrando Groovy & Grails en el proceso de desarrollo
 
Netbeans Osum
Netbeans OsumNetbeans Osum
Netbeans Osum
 
Backbeam
BackbeamBackbeam
Backbeam
 
Symfony2 Introducción
Symfony2 IntroducciónSymfony2 Introducción
Symfony2 Introducción
 
Sitios web de alto rendimiento y alta disponibilidad
Sitios web de alto rendimiento y alta disponibilidadSitios web de alto rendimiento y alta disponibilidad
Sitios web de alto rendimiento y alta disponibilidad
 
Flujos de trabajo para un desarrollador web frontend
Flujos de trabajo para un desarrollador web frontendFlujos de trabajo para un desarrollador web frontend
Flujos de trabajo para un desarrollador web frontend
 
ASP.NET 5 & MVC 6 (RC1)
ASP.NET 5 & MVC 6 (RC1)ASP.NET 5 & MVC 6 (RC1)
ASP.NET 5 & MVC 6 (RC1)
 
De escritorio a Javascript, nuestra experiencia desde las trincheras
De escritorio a Javascript, nuestra experiencia desde las trincherasDe escritorio a Javascript, nuestra experiencia desde las trincheras
De escritorio a Javascript, nuestra experiencia desde las trincheras
 
PHP Conference Argentina 2014
PHP Conference Argentina 2014PHP Conference Argentina 2014
PHP Conference Argentina 2014
 
Aplicaciones Web SPA con WebAPI y TypeScript
Aplicaciones Web SPA con WebAPI y TypeScriptAplicaciones Web SPA con WebAPI y TypeScript
Aplicaciones Web SPA con WebAPI y TypeScript
 
Desarrollo Full Stack UAM.net
Desarrollo Full Stack UAM.netDesarrollo Full Stack UAM.net
Desarrollo Full Stack UAM.net
 
Lecciones aprendidas creando una red social
Lecciones aprendidas creando una red socialLecciones aprendidas creando una red social
Lecciones aprendidas creando una red social
 
Descifrando Ruby on Rails
Descifrando Ruby on RailsDescifrando Ruby on Rails
Descifrando Ruby on Rails
 
Optimización del rendimiento web
Optimización del rendimiento webOptimización del rendimiento web
Optimización del rendimiento web
 
Webinar: Groovy y la producttividad para el desarrollador Java
Webinar: Groovy y la producttividad para el desarrollador JavaWebinar: Groovy y la producttividad para el desarrollador Java
Webinar: Groovy y la producttividad para el desarrollador Java
 
Multiplica tu productividad usando un preprocesador de css
Multiplica tu productividad usando un preprocesador de cssMultiplica tu productividad usando un preprocesador de css
Multiplica tu productividad usando un preprocesador de css
 
Arquitecturas web escalables y de alta disponibilidad en la nube
Arquitecturas web escalables y de alta disponibilidad en la nubeArquitecturas web escalables y de alta disponibilidad en la nube
Arquitecturas web escalables y de alta disponibilidad en la nube
 

Semelhante a Grails, opción real y escalable para sitios web de alta carga

Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...
Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...
Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...
Socialmetrix
 
Aplicaciones web altamente escalables con Redis
Aplicaciones web altamente escalables con RedisAplicaciones web altamente escalables con Redis
Aplicaciones web altamente escalables con Redis
Alberto Gimeno
 

Semelhante a Grails, opción real y escalable para sitios web de alta carga (20)

SGCE 2014 micro services
SGCE 2014 micro servicesSGCE 2014 micro services
SGCE 2014 micro services
 
Desarrollo modermo de aplicaciones web
Desarrollo modermo de aplicaciones webDesarrollo modermo de aplicaciones web
Desarrollo modermo de aplicaciones web
 
Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...
Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...
Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...
 
DBA del Futuro (Un nuevo paradigma)
DBA del Futuro (Un nuevo paradigma)DBA del Futuro (Un nuevo paradigma)
DBA del Futuro (Un nuevo paradigma)
 
dockerize.it
dockerize.itdockerize.it
dockerize.it
 
Aplicaciones web altamente escalables con Redis
Aplicaciones web altamente escalables con RedisAplicaciones web altamente escalables con Redis
Aplicaciones web altamente escalables con Redis
 
Panel Magmaconf
Panel MagmaconfPanel Magmaconf
Panel Magmaconf
 
Html5 avanzado
Html5 avanzadoHtml5 avanzado
Html5 avanzado
 
Contenedores y el Futuro del Despliegue de Aplicaciones
Contenedores y el Futuro del Despliegue de AplicacionesContenedores y el Futuro del Despliegue de Aplicaciones
Contenedores y el Futuro del Despliegue de Aplicaciones
 
Servicios de Bases de Datos de AWS
Servicios de Bases de Datos de AWSServicios de Bases de Datos de AWS
Servicios de Bases de Datos de AWS
 
Tabla de 5 SGBD_Dorado Jarero Miguel Angel_Base de Datos 2.pdf
Tabla de 5 SGBD_Dorado Jarero Miguel Angel_Base de Datos 2.pdfTabla de 5 SGBD_Dorado Jarero Miguel Angel_Base de Datos 2.pdf
Tabla de 5 SGBD_Dorado Jarero Miguel Angel_Base de Datos 2.pdf
 
Sistema de Bases de Datos AWS
Sistema de Bases de Datos AWSSistema de Bases de Datos AWS
Sistema de Bases de Datos AWS
 
Web matrix. armando nuestros sitios dinámicamente con html5, php y mysql
Web matrix.  armando nuestros sitios dinámicamente con html5, php y mysqlWeb matrix.  armando nuestros sitios dinámicamente con html5, php y mysql
Web matrix. armando nuestros sitios dinámicamente con html5, php y mysql
 
WPO para proyectos WooComerce
WPO para proyectos WooComerceWPO para proyectos WooComerce
WPO para proyectos WooComerce
 
Cómo elegir un servidor Web
Cómo elegir un servidor WebCómo elegir un servidor Web
Cómo elegir un servidor Web
 
Grails y EC2 - De cero a multinacional
Grails y EC2 - De cero a multinacionalGrails y EC2 - De cero a multinacional
Grails y EC2 - De cero a multinacional
 
¿Cómo elegir servidor web?
¿Cómo elegir servidor web?¿Cómo elegir servidor web?
¿Cómo elegir servidor web?
 
Oracle GG presentacion
Oracle GG presentacionOracle GG presentacion
Oracle GG presentacion
 
¿Por que cambiar de Apache Hadoop a Apache Spark?
¿Por que cambiar de Apache Hadoop a Apache Spark?¿Por que cambiar de Apache Hadoop a Apache Spark?
¿Por que cambiar de Apache Hadoop a Apache Spark?
 
Integración de Oracle Data Integrator con Oracle GoldenGate 12c
Integración de Oracle Data Integrator  con Oracle GoldenGate 12cIntegración de Oracle Data Integrator  con Oracle GoldenGate 12c
Integración de Oracle Data Integrator con Oracle GoldenGate 12c
 

Mais de Domingo Suarez Torres

Mais de Domingo Suarez Torres (20)

Cloud Native MX Meetup - Asegurando tu Cluster de Kubernetes
Cloud Native MX Meetup - Asegurando tu Cluster de KubernetesCloud Native MX Meetup - Asegurando tu Cluster de Kubernetes
Cloud Native MX Meetup - Asegurando tu Cluster de Kubernetes
 
Java Dev Day 2019 No kuberneteen por convivir
Java Dev Day 2019  No kuberneteen por convivirJava Dev Day 2019  No kuberneteen por convivir
Java Dev Day 2019 No kuberneteen por convivir
 
Contenedores 101 Digital Ocean CDMX
Contenedores 101 Digital Ocean CDMXContenedores 101 Digital Ocean CDMX
Contenedores 101 Digital Ocean CDMX
 
Retos en la arquitectura de Microservicios
Retos en la arquitectura de MicroserviciosRetos en la arquitectura de Microservicios
Retos en la arquitectura de Microservicios
 
Java Cloud Native Hack Nights GDL
Java Cloud Native Hack Nights GDLJava Cloud Native Hack Nights GDL
Java Cloud Native Hack Nights GDL
 
meetup digital ocean kubernetes
meetup digital ocean kubernetesmeetup digital ocean kubernetes
meetup digital ocean kubernetes
 
Peru JUG Micronaut & GraalVM
Peru JUG Micronaut & GraalVMPeru JUG Micronaut & GraalVM
Peru JUG Micronaut & GraalVM
 
DevFest Lima Corriendo cargas e trabajo seguras en GKE con Istio
DevFest Lima Corriendo cargas e trabajo seguras en GKE con IstioDevFest Lima Corriendo cargas e trabajo seguras en GKE con Istio
DevFest Lima Corriendo cargas e trabajo seguras en GKE con Istio
 
Cloud Native Development in the JVM
Cloud Native Development in the JVMCloud Native Development in the JVM
Cloud Native Development in the JVM
 
Cloud Native Mexico - Introducción a Kubernetes
Cloud Native Mexico - Introducción a KubernetesCloud Native Mexico - Introducción a Kubernetes
Cloud Native Mexico - Introducción a Kubernetes
 
Meetup DigitalOcean Cloud Native architecture
Meetup DigitalOcean Cloud Native architectureMeetup DigitalOcean Cloud Native architecture
Meetup DigitalOcean Cloud Native architecture
 
Cloud Native Mexico Meetup de Marzo 2018 Service Mesh con Istio y Envoy
Cloud Native Mexico Meetup de Marzo 2018 Service Mesh con Istio y EnvoyCloud Native Mexico Meetup de Marzo 2018 Service Mesh con Istio y Envoy
Cloud Native Mexico Meetup de Marzo 2018 Service Mesh con Istio y Envoy
 
Cloud Native Mexico Meetup enero 2018 Observability
Cloud Native Mexico Meetup enero 2018 ObservabilityCloud Native Mexico Meetup enero 2018 Observability
Cloud Native Mexico Meetup enero 2018 Observability
 
Cloud Native Mexico Presentacion
Cloud Native Mexico PresentacionCloud Native Mexico Presentacion
Cloud Native Mexico Presentacion
 
gRPC: Beyond REST
gRPC: Beyond RESTgRPC: Beyond REST
gRPC: Beyond REST
 
Devops Landscape
Devops LandscapeDevops Landscape
Devops Landscape
 
JVM Reactive Programming
JVM Reactive ProgrammingJVM Reactive Programming
JVM Reactive Programming
 
SGNext Elasticsearch
SGNext ElasticsearchSGNext Elasticsearch
SGNext Elasticsearch
 
Elasticsearch JVM-MX Meetup April 2016
Elasticsearch JVM-MX Meetup April 2016Elasticsearch JVM-MX Meetup April 2016
Elasticsearch JVM-MX Meetup April 2016
 
Ratpack JVM_MX Meetup February 2016
Ratpack JVM_MX Meetup February 2016Ratpack JVM_MX Meetup February 2016
Ratpack JVM_MX Meetup February 2016
 

Último

editorial de informática de los sueños.docx
editorial de informática de los sueños.docxeditorial de informática de los sueños.docx
editorial de informática de los sueños.docx
ssusere34b451
 
Chat GPT para la educación Latinoamerica
Chat GPT para la educación LatinoamericaChat GPT para la educación Latinoamerica
Chat GPT para la educación Latinoamerica
EdwinGarca59
 

Último (20)

Tipos de datos en Microsoft Access de Base de Datos
Tipos de datos en Microsoft Access de Base de DatosTipos de datos en Microsoft Access de Base de Datos
Tipos de datos en Microsoft Access de Base de Datos
 
BUSCADORES DE INTERNET (Universidad de Sonora).
BUSCADORES DE INTERNET (Universidad de Sonora).BUSCADORES DE INTERNET (Universidad de Sonora).
BUSCADORES DE INTERNET (Universidad de Sonora).
 
innovacion banking & warehouse 2024 blog
innovacion banking & warehouse 2024 bloginnovacion banking & warehouse 2024 blog
innovacion banking & warehouse 2024 blog
 
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
 
Uso de las TIC en la vida cotidiana .
Uso de las TIC en la vida cotidiana       .Uso de las TIC en la vida cotidiana       .
Uso de las TIC en la vida cotidiana .
 
Imágenes digitales: Calidad de la información
Imágenes digitales: Calidad de la informaciónImágenes digitales: Calidad de la información
Imágenes digitales: Calidad de la información
 
NIVEL DE MADUREZ TECNOLÓGICA (TRL).pptx
NIVEL DE  MADUREZ TECNOLÓGICA (TRL).pptxNIVEL DE  MADUREZ TECNOLÓGICA (TRL).pptx
NIVEL DE MADUREZ TECNOLÓGICA (TRL).pptx
 
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptx
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptxTipos de Datos de Microsoft Access-JOEL GARCIA.pptx
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptx
 
Ejercicio 1 periodo 2 de Tecnología 2024
Ejercicio 1 periodo 2 de Tecnología 2024Ejercicio 1 periodo 2 de Tecnología 2024
Ejercicio 1 periodo 2 de Tecnología 2024
 
Actividad 6/Las TIC en la Vida Cotidiana.
Actividad 6/Las TIC en la Vida Cotidiana.Actividad 6/Las TIC en la Vida Cotidiana.
Actividad 6/Las TIC en la Vida Cotidiana.
 
Inteligencia Artificial para usuarios nivel inicial
Inteligencia Artificial para usuarios nivel inicialInteligencia Artificial para usuarios nivel inicial
Inteligencia Artificial para usuarios nivel inicial
 
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUALJORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
 
Desarrollo del Dominio del Internet - Estrada
Desarrollo del Dominio del Internet - EstradaDesarrollo del Dominio del Internet - Estrada
Desarrollo del Dominio del Internet - Estrada
 
editorial de informática de los sueños.docx
editorial de informática de los sueños.docxeditorial de informática de los sueños.docx
editorial de informática de los sueños.docx
 
el uso de las TIC en la vida cotidiana.pptx
el uso de las TIC en la vida cotidiana.pptxel uso de las TIC en la vida cotidiana.pptx
el uso de las TIC en la vida cotidiana.pptx
 
Electricidad Libro compendio de temas estudiados.docx
Electricidad Libro compendio de temas estudiados.docxElectricidad Libro compendio de temas estudiados.docx
Electricidad Libro compendio de temas estudiados.docx
 
De Olmos Santiago_Dolores _ M1S3AI6.pptx
De Olmos Santiago_Dolores _ M1S3AI6.pptxDe Olmos Santiago_Dolores _ M1S3AI6.pptx
De Olmos Santiago_Dolores _ M1S3AI6.pptx
 
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiCVelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC
 
Chat GPT para la educación Latinoamerica
Chat GPT para la educación LatinoamericaChat GPT para la educación Latinoamerica
Chat GPT para la educación Latinoamerica
 
Navegadores de internet - Nuevas Tecnologías de la Información y la Comunicación
Navegadores de internet - Nuevas Tecnologías de la Información y la ComunicaciónNavegadores de internet - Nuevas Tecnologías de la Información y la Comunicación
Navegadores de internet - Nuevas Tecnologías de la Información y la Comunicación
 

Grails, opción real y escalable para sitios web de alta carga

  • 1. De cero a 1.7 M de usuarios Grails, opción real para sitios web de alta carga y escalabilidad. Una experiencia al crear la más grande plataforma de eCommerce con Grails en Latinoamérica.
  • 2. Agenda • Negocio • Diseño inicial • Infraestructura • Problemas • El futuro
  • 3. Negocio Una tienda en linea, con una amplia y creciente gama de servicios y productos
  • 4. Negocio • Ventas en grupo • Cupones. • Pero no solo cupones... • Campañas de email masivas. • Campañas de publicidad masivas.
  • 6. Grails • Grails 1.3.4 • GORM • Servicios • Controllers y TagLibs • Jobs
  • 7. GORM, lo bueno • Facilidad de crear modelos • Modelos ricos • Consultas • Criteria • DynamicFinders • Actualización del esquema de base de datos
  • 8. GORM, lo malo • No es posible probar DynamicFinder y Criteria de forma unitaria • Pruebas integrales, a veces toma mucho tiempo • Es sencillo cometer errores debido a la facilidad • Olvidar crear indices • Iterar grandes colecciones • Dejar que Grails nombre relaciones (tablas o campos)
  • 9. Servicios, lo bueno • Lógica de negocio • Servicios que “escuchan” eventos • Extensivo uso de Dependency Inyection • Composición, agregación • Reglas de negocio flexibles
  • 10. Servicios, lo malo • Abusar de Dependency Inyection • Referencias circulares • No es tema de Grails exclusivamente, con Spring se presenta también. • Duplicar nombres de Servicios, en diferentes paquetes • Olvidar quitar la administración transaccional cuando no es necesaria.
  • 11. Controllers, lo bueno • Ridículamente simple • Generar JSON/XML es trivial • Reglas de mapeo, muy sencillo y flexible (URLMappings) • Totalmente desacoplado de la vista
  • 13. TagLibs, lo bueno • Estúpidamente simple crearlas :) • Apoyo de Dependency Inyection para acceder a servicios, o a cualquier componente. • Condicionar la generación de contenido • Llenar plantillas (fragmentos de una página)
  • 14. TagLibs, lo malo • Usarlas como scriptlets
  • 15. Grails, en general • Permite que un desarrollador Java, explote su conocimiento. • Aumenta la productividad debido a el uso de “Convención sobre Configuración” • Incrementa brutalmente la facilidad de convertir requerimientos de negocio en código ejecutable
  • 16. Grails • En mi humilde opinión, la mejor opción para desarrollo web en Java, de cualquier tamaño o requerimiento • Disclaimer: Es solo mi experiencia personal, no puedo garantizar el mal uso de Grails. También puedo equivocarme. Es mi punto de vista como desarrollador.
  • 17. Negocio • En Agosto de 2010 @dvd2k5 me dijo: • Hey domix; en un año tendremos un millón de usuarios • @domix • :O
  • 18. Escalabilidad y Disponibilidad Vitales para estar en un negocio muy competitivo
  • 19. Terracotta • Cache distribuido • Evitamos accesos a la BD • Guardamos Objetos Java y HTML • Entidades de Hibernate • Páginas completas • Fragmentos de páginas
  • 20. Terracotta • Usamos EhCache como “fachada” • En desarrollo no usamos Terracotta • En producción y QA configurado • El código aplicativo no se ve modificado
  • 21. Terracotta • IMHO, es una de las mejores piezas de software jamas escritas en Java • Robusto, Estable • Confiable, Ligero • Casi cero administración • Configuración muy sencilla • Uptime de meses en producción
  • 22. Terracotta • Lo usamos para clusterizar sesiones HTTP, pero no quedo productivo • No quería cargar con mas trabajo a Terracotta • Evitar tener un solo punto de falla • También lo usamos muy poco tiempo para clusterizar Jobs con Quartz
  • 23. RabbitMQ • Servicio de mensajería • Diferente a JMS • Escrito en Erlang • Muy robusto, estable • Casi cero administración • Desarrollado por vmWare
  • 24. RabbitMQ • Procesamiento asíncrono • Procesos muy tardados • Envío de email • Consultas pesadas (reportes financieros) • Integración con otras aplicaciones
  • 25. RabbitMQ, lo malo • No hay muchas herramientas de administración/monitoreo • Las que hay son poco “amistosas” • Cuando falla, falla muy duro • Los logs de error son como Hebreo antiguo o mas bien como lenguaje Orco.
  • 26. RabbitMQ, lo malo • No hay muchas herramientas de administración/monitoreo • Las que hay son poco “amistosas” • Cuando falla, falla muy duro • Los logs de error son como Hebreo antiguo o mas bien como lenguaje Orco.
  • 27. RabbitMQ, nada malo • Antes he usado varios servicios de mensajería • Todos ellos basados en Java • RabbitMQ ha sido al que he visto que se le ha puesto una carga muy grande, sin necesidad de afinar la configuración. • IMHO. La mejor opción.
  • 28. RabbitMQ, nada malo • Antes he usado varios servicios de mensajería • Todos ellos basados en Java • RabbitMQ ha sido al que he visto que se le ha puesto una carga muy grande, sin necesidad de afinar la configuración. • IMHO. La mejor opción.
  • 30. mySQL • Tenemos instalada una versión “tuneada” por RackSpace • Una palabra para describirla: Impresionante • He vivido engañado por muchos años. • Un pequeño comportandose como nunca he visto un grande. • Nuestro mySQL ha soportado +15 millones de queries en un día
  • 31. Infraestructura 2 versiones
  • 32. Cajas Versión 1 • 2 WebServers • 1 Tomcat 6 con AJP = cluster de 2 Tomcats • Apache HTTPD con mod_proxy • 1 DBServer • 1 Firewall físico • 1 LoadBalancer físico • Rackspace Londres
  • 33. Cajas Versión 2 • 4 WebServers • 2 Tomcat 6 con AJP = cluster de 8 Tomcats • Apache HTTPD con mod_proxy • 1 DBServer • 1 Firewall físico • 1 LoadBalancer físico
  • 34. Fierros Versión 2 • Dual Quad Core Xeon 2.26 HGZ • 24 GB de RAM • 300 GB SAS X 3 • RedHat Enterprise Linux 5.6 • En Hospedaje dedicado en Rackspace Chicago
  • 35. Problemas • Quartz Jobs clusterizados • Ahora corren en una instancia propia • Indices faltantes en la base de datos • Consultas muy mal escritas • Mala configuración del log
  • 36.
  • 37. Solucionar problemas • Necesitas métricas, indicadores • Medición • ¿Profiler? • ¿JMX?
  • 38.
  • 39. Competitividad Datos de Alexa.com del día 21 de Octubre de 2011
  • 41.
  • 42. Negocio • En Septiembre de 2011 @dvd2k5 me dijo: • Hey domix; en un año tendremos 5 millones de usuarios • @domix • :O
  • 43. Estrategia actual y futura • Hacer la webapp actual lo mas estática posible • Modularizar la aplicación en un conjunto de servicios • Usar mensajería para comunicarlos • Usar Scala como lenguaje complementario a Groovy • Akka para procesamiento asíncrono • MongoDB como almacén secundario • Redis como cache recundario
  • 44. Estrategia actual y futura • Convirtiendo los servicios en un API Rest • clickOnero móvil iOS este año • clickOnero móvil Android próximo año • Facebook App próximo año • Apertura del API próximo año
  • 47. Créditos fotos • http://flic.kr/p/e61Pt • http://flic.kr/p/2wGvZi • http://flic.kr/p/7cxoek • http://flic.kr/p/7jLN6x • http://flic.kr/p/5vSqgq • http://flic.kr/p/2VvzMw • http://flic.kr/p/6K9jb8 • http://flic.kr/p/9c7z9T • http://flic.kr/p/6h8UoU • http://flic.kr/p/J1NKm • http://flic.kr/p/24GsCj

Notas do Editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n