SlideShare une entreprise Scribd logo
1  sur  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

Contenu connexe

Tendances

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
 

Tendances (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
 

Similaire à 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
 

Similaire à 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
 

Plus de Domingo Suarez Torres

Plus 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
 

Dernier

Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
241521559
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
silviayucra2
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
FagnerLisboa3
 

Dernier (10)

Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 

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

Notes de l'éditeur

  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