SlideShare une entreprise Scribd logo
1  sur  64
Télécharger pour lire hors ligne
De cero a 2M 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
• ¿Porque Groovy/Grails?

• Negocio

• Diseño inicial

• Infraestructura

• Problemas

• El futuro
¿Porque Groovy/Grails?
¿Porque Groovy/Grails?

•   Aburrido de Java
¿Porque Groovy/Grails?

•   Aburrido de Java
•   Soy fanático de Hibernate, Spring y SpringMVC, WebFlow
¿Porque Groovy/Grails?

•   Aburrido de Java
•   Soy fanático de Hibernate, Spring y SpringMVC, WebFlow
•   JSF, Struts, Flex... <-- NO por favor
¿Porque Groovy/Grails?

•   Aburrido de Java
•   Soy fanático de Hibernate, Spring y SpringMVC, WebFlow
•   JSF, Struts, Flex... <-- NO por favor
•   Rails en 2004
¿Porque Groovy/Grails?

•   Aburrido de Java
•   Soy fanático de Hibernate, Spring y SpringMVC, WebFlow
•   JSF, Struts, Flex... <-- NO por favor
•   Rails en 2004
•   Groovy. Gran lenguaje.
¿Porque Groovy/Grails?

•   Aburrido de Java
•   Soy fanático de Hibernate, Spring y SpringMVC, WebFlow
•   JSF, Struts, Flex... <-- NO por favor
•   Rails en 2004
•   Groovy. Gran lenguaje.
    •   Productividad
¿Porque Groovy/Grails?

•   Aburrido de Java
•   Soy fanático de Hibernate, Spring y SpringMVC, WebFlow
•   JSF, Struts, Flex... <-- NO por favor
•   Rails en 2004
•   Groovy. Gran lenguaje.
    •   Productividad
    •   Comunidad y ecosistema
¿Porque Groovy/Grails?

•   Aburrido de Java
•   Soy fanático de Hibernate, Spring y SpringMVC, WebFlow
•   JSF, Struts, Flex... <-- NO por favor
•   Rails en 2004
•   Groovy. Gran lenguaje.
    •   Productividad
    •   Comunidad y ecosistema
•   Grails 0.5-0.6 en 2007
¿Porque Groovy/Grails?

•   Aburrido de Java
•   Soy fanático de Hibernate, Spring y SpringMVC, WebFlow
•   JSF, Struts, Flex... <-- NO por favor
•   Rails en 2004
•   Groovy. Gran lenguaje.
    •   Productividad
    •   Comunidad y ecosistema
•   Grails 0.5-0.6 en 2007
•   Primer aplicación productiva en 2008, Grails 0.6
¿Porque Groovy/Grails?

•   Aburrido de Java
•   Soy fanático de Hibernate, Spring y SpringMVC, WebFlow
•   JSF, Struts, Flex... <-- NO por favor
•   Rails en 2004
•   Groovy. Gran lenguaje.
    •   Productividad
    •   Comunidad y ecosistema
•   Grails 0.5-0.6 en 2007
•   Primer aplicación productiva en 2008, Grails 0.6
•   Me gusto tanto que hice screencast en Groovy.org.es
Negocio
   Una tienda en linea, con una amplia
y creciente gama de servicios y productos
Negocio
• Ventas en grupo

• Cupones.

• Viajes, electrodomésticos, etc

• Campañas de email masivas.

• Campañas de publicidad masivas.
Diseño inicial
Grails, Terracotta, RabbitMQ & mySQL
Primera implementación
• En 8 semanas se construye en Berlin las bases de la
  plataforma, con 4 desarrolladores

• Salimos a producción en Septiembre 2010 en México y
  Argentina

• En Octubre 2010 salimos en producción en Emiratos Arabes
  (Dubai)

• En noviembre el equipo de desarrollo crece en México

• El desarrollo continua para México con un equipo de 5
  desarrolladores
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-RabbitMQ

• 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, IMHO lo perfecto de Grails
TagLibs, lo bueno
• Súper simple crearlas :)

• Apoyo de Dependency Injection 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.
Escalabilidad y
     Disponibilidad
Vitales para estar en un negocio muy competitivo
Números

•200k-300k visitas diarias
•1.5M > pageviews diarias
•Hasta 80K usuarios concurrentes
•20K-50K usuarios nuevos al día
•1000-3000 compras diarias
SpringIO 2012 Madrid-Escalabilidad con Grails
Terracotta
• Cache distribuido

• Evitamos accesos a la BD

• Guardamos Objetos Java, HTML, JSON, XML

 • 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, AMQP es un protocolo programable

• 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 “afinada” 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
MongoDB
• Principalmente almacenamos documentos con la bitácora de
  cambios en algunos objetos del modelo.

• Grails Audit Logging Plugin

  • Guarda un registro por cada cambio. No nos convencía este
    enfoque. La tabla de auditoria crecía demasiado (millones de
    registros en unas semanas)

  • Activando los handlers, los atributos alterados se serializan a
    JSON y se almacenan de manera asíncrona en MongoDB

• Tenemos una aplicación con Grails 2.0 con el plugin de MongoDB

• MongoDB instalado en otra maquina diferente
Redis
• Excelente opción para usarlo como Cache

• Redis puede almacenar ‘Estructuras de datos’

• Provee soporte para operar sobre esas estructuras.

  • incr, incrBy, set

• Lo usamos para guardar estadísticas.

  • Compras por producto, etc.

  • Redis se encarga de la concurrencia
ElasticSearch


• Muy buena opción para busquedas ‘Full Text
  Search’

• Plugin de Grails para usarlo
Infraestructura
Maquinas
• 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
Características
• 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
SpringIO 2012 Madrid-Escalabilidad con Grails
Solucionar problemas

• Necesitas métricas, indicadores

• Medición

• ¿Profiler?

• ¿JMX?
JavaMelody
• Analiza todas las peticiones a tu aplicación

• Nos ayudo a detectar

  • Cuellos de botella

  • Queries ineficientes

  • Servicios mas usados

• OpenSource, Apache 2.0

• Activado en producción, penalización mínima, imperceptible.

• Plugin para Grails
SpringIO 2012 Madrid-Escalabilidad con Grails
SpringIO 2012 Madrid-Escalabilidad con Grails
SpringIO 2012 Madrid-Escalabilidad con Grails
Competitividad




Datos de Alexa.com del día 21 de Octubre de 2011
SpringIO 2012 Madrid-Escalabilidad con Grails
“Empresa del Año del Comercio
       Electrónico y los
Negocios por Internet en México”
¿Como lo logramos?
SpringIO 2012 Madrid-Escalabilidad con Grails
Comunidad
•   La comunidad Groovy/Grails es fantastica.
•   Muchos plugins para Grails
•   Grails es un campo fértil para crear nuevos plugins
•   Es sencillo participar.
•   Hemos contribuido a varios plugins
    • Export
    • SpringSecurity
    • ReCaptcha
    • SpringSocial
    • Scala
Q&A
Texto
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

[El comercio]php zend framework (speech)
[El comercio]php zend framework (speech)[El comercio]php zend framework (speech)
[El comercio]php zend framework (speech)Ernesto Anaya
 
Lecciones aprendidas creando una red social
Lecciones aprendidas creando una red socialLecciones aprendidas creando una red social
Lecciones aprendidas creando una red socialRoberto Luis Bisbé
 
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 RotasRicard Clau
 
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 frontendLeonidas Esteban González
 
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 trincherasRoberto Luis Bisbé
 
Symfony2 Introducción
Symfony2 IntroducciónSymfony2 Introducción
Symfony2 Introducciónstrate
 
DeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishDeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishJordi Llonch
 
Automatización del despliegue de aplicaciones multi cloud
Automatización del despliegue de aplicaciones multi cloudAutomatización del despliegue de aplicaciones multi cloud
Automatización del despliegue de aplicaciones multi cloudSoftware Guru
 
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 JavaDomingo Suarez Torres
 
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7Luis Ruiz Pavón
 
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 BeanstalkMauro Parra-Miranda
 
Introduccion a SQL Server 2017 en Docker
Introduccion a SQL Server 2017 en Docker Introduccion a SQL Server 2017 en Docker
Introduccion a SQL Server 2017 en Docker Eduardo Castro
 
Casper JS - Asegurando la calidad en front-end Drupal
Casper JS - Asegurando la calidad en front-end DrupalCasper JS - Asegurando la calidad en front-end Drupal
Casper JS - Asegurando la calidad en front-end DrupalDavid Gil Sánchez
 
NodeJS
NodeJSNodeJS
NodeJSIBM
 

Tendances (20)

[El comercio]php zend framework (speech)
[El comercio]php zend framework (speech)[El comercio]php zend framework (speech)
[El comercio]php zend framework (speech)
 
Lecciones aprendidas creando una red social
Lecciones aprendidas creando una red socialLecciones aprendidas creando una red social
Lecciones aprendidas creando una red social
 
Desarrollo Full Stack UAM.net
Desarrollo Full Stack UAM.netDesarrollo Full Stack UAM.net
Desarrollo Full Stack UAM.net
 
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
 
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
 
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
 
Gradle vs Maven
Gradle vs MavenGradle vs Maven
Gradle vs Maven
 
Symfony2 Introducción
Symfony2 IntroducciónSymfony2 Introducción
Symfony2 Introducción
 
ASP.NET 5 & MVC 6 (RC1)
ASP.NET 5 & MVC 6 (RC1)ASP.NET 5 & MVC 6 (RC1)
ASP.NET 5 & MVC 6 (RC1)
 
DeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishDeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - Spanish
 
Backbeam
BackbeamBackbeam
Backbeam
 
Automatización del despliegue de aplicaciones multi cloud
Automatización del despliegue de aplicaciones multi cloudAutomatización del despliegue de aplicaciones multi cloud
Automatización del despliegue de aplicaciones multi cloud
 
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
 
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7
 
Descifrando Ruby on Rails
Descifrando Ruby on RailsDescifrando Ruby on Rails
Descifrando Ruby on Rails
 
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
 
Introduccion a SQL Server 2017 en Docker
Introduccion a SQL Server 2017 en Docker Introduccion a SQL Server 2017 en Docker
Introduccion a SQL Server 2017 en Docker
 
Casper JS - Asegurando la calidad en front-end Drupal
Casper JS - Asegurando la calidad en front-end DrupalCasper JS - Asegurando la calidad en front-end Drupal
Casper JS - Asegurando la calidad en front-end Drupal
 
NodeJS
NodeJSNodeJS
NodeJS
 
Netbeans Osum
Netbeans OsumNetbeans Osum
Netbeans Osum
 

En vedette

Taller HA y Balanceo de Cargas con NIGX.
Taller HA y Balanceo de Cargas con NIGX.Taller HA y Balanceo de Cargas con NIGX.
Taller HA y Balanceo de Cargas con NIGX.Luis Toscano
 
SOA multiplataforma con rabbitmq y websockets
SOA multiplataforma con rabbitmq y websocketsSOA multiplataforma con rabbitmq y websockets
SOA multiplataforma con rabbitmq y websocketsbmegias
 
Tools for High Availability
Tools for High AvailabilityTools for High Availability
Tools for High AvailabilityLuis Toscano
 
Sincola - Cambiando el concepto de las colas y las esperas
Sincola - Cambiando el concepto de las colas y las esperasSincola - Cambiando el concepto de las colas y las esperas
Sincola - Cambiando el concepto de las colas y las esperasCesar Laurentin
 
Sistema de Mensajeria de Colas con ZeroMQ y Python
Sistema de Mensajeria de Colas con ZeroMQ y PythonSistema de Mensajeria de Colas con ZeroMQ y Python
Sistema de Mensajeria de Colas con ZeroMQ y PythonErnesto Crespo
 

En vedette (7)

Taller HA y Balanceo de Cargas con NIGX.
Taller HA y Balanceo de Cargas con NIGX.Taller HA y Balanceo de Cargas con NIGX.
Taller HA y Balanceo de Cargas con NIGX.
 
SOA multiplataforma con rabbitmq y websockets
SOA multiplataforma con rabbitmq y websocketsSOA multiplataforma con rabbitmq y websockets
SOA multiplataforma con rabbitmq y websockets
 
Tools for High Availability
Tools for High AvailabilityTools for High Availability
Tools for High Availability
 
Sincola - Cambiando el concepto de las colas y las esperas
Sincola - Cambiando el concepto de las colas y las esperasSincola - Cambiando el concepto de las colas y las esperas
Sincola - Cambiando el concepto de las colas y las esperas
 
RabbitMQ
RabbitMQRabbitMQ
RabbitMQ
 
Microservicios - RabbitMQ
Microservicios - RabbitMQMicroservicios - RabbitMQ
Microservicios - RabbitMQ
 
Sistema de Mensajeria de Colas con ZeroMQ y Python
Sistema de Mensajeria de Colas con ZeroMQ y PythonSistema de Mensajeria de Colas con ZeroMQ y Python
Sistema de Mensajeria de Colas con ZeroMQ y Python
 

Similaire à SpringIO 2012 Madrid-Escalabilidad con Grails

Frameworks de Desarrollo Web Grails
Frameworks de Desarrollo Web GrailsFrameworks de Desarrollo Web Grails
Frameworks de Desarrollo Web GrailsEsteban Saavedra
 
Oracle-Developer-Day-Colombia_MySQL-Feb27_12
Oracle-Developer-Day-Colombia_MySQL-Feb27_12Oracle-Developer-Day-Colombia_MySQL-Feb27_12
Oracle-Developer-Day-Colombia_MySQL-Feb27_12Mysql Latinoamérica
 
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 mysqlPeter Concha
 
Flisol 2011 alta disponibilidad y alto desempeño
Flisol 2011   alta disponibilidad y alto desempeñoFlisol 2011   alta disponibilidad y alto desempeño
Flisol 2011 alta disponibilidad y alto desempeñocrio_
 
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 multinacionalGailen Tecnologías
 
¿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?Socialmetrix
 
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 desarrolloJose Juan R. Zuñiga
 
Aplicaciones web altamente escalables con Redis
Aplicaciones web altamente escalables con RedisAplicaciones web altamente escalables con Redis
Aplicaciones web altamente escalables con RedisAlberto Gimeno
 
Defensa proyecto fin de carrera
Defensa proyecto fin de carreraDefensa proyecto fin de carrera
Defensa proyecto fin de carreraBorja Merino
 
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 cssLeonidas Esteban González
 
Html5 - El futuro de la web
Html5 - El futuro de la webHtml5 - El futuro de la web
Html5 - El futuro de la webJoan Fernández
 
Desarrollo modermo de aplicaciones web
Desarrollo modermo de aplicaciones webDesarrollo modermo de aplicaciones web
Desarrollo modermo de aplicaciones webRoberto Sanz Ciriano
 
Buenas Prácticas para la Construcción de Aplicaciones de Software
Buenas Prácticas para la Construcción de Aplicaciones de SoftwareBuenas Prácticas para la Construcción de Aplicaciones de Software
Buenas Prácticas para la Construcción de Aplicaciones de SoftwareJorge Alvarez
 
Optimizando Sitios Web
Optimizando Sitios WebOptimizando Sitios Web
Optimizando Sitios WebGrupo Mediabox
 

Similaire à SpringIO 2012 Madrid-Escalabilidad con Grails (20)

SGCE 2014 micro services
SGCE 2014 micro servicesSGCE 2014 micro services
SGCE 2014 micro services
 
Html5 avanzado
Html5 avanzadoHtml5 avanzado
Html5 avanzado
 
Frameworks de Desarrollo Web Grails
Frameworks de Desarrollo Web GrailsFrameworks de Desarrollo Web Grails
Frameworks de Desarrollo Web Grails
 
Oracle-Developer-Day-Colombia_MySQL-Feb27_12
Oracle-Developer-Day-Colombia_MySQL-Feb27_12Oracle-Developer-Day-Colombia_MySQL-Feb27_12
Oracle-Developer-Day-Colombia_MySQL-Feb27_12
 
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
 
¿Cómo elegir servidor web?
¿Cómo elegir servidor web?¿Cómo elegir servidor web?
¿Cómo elegir servidor web?
 
Flisol 2011 alta disponibilidad y alto desempeño
Flisol 2011   alta disponibilidad y alto desempeñoFlisol 2011   alta disponibilidad y alto desempeño
Flisol 2011 alta disponibilidad y alto desempeño
 
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
 
¿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?
 
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
 
Aplicaciones web altamente escalables con Redis
Aplicaciones web altamente escalables con RedisAplicaciones web altamente escalables con Redis
Aplicaciones web altamente escalables con Redis
 
Defensa proyecto fin de carrera
Defensa proyecto fin de carreraDefensa proyecto fin de carrera
Defensa proyecto fin de carrera
 
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
 
Introducción a Blazor
Introducción a BlazorIntroducción a Blazor
Introducción a Blazor
 
DBA del Futuro (Un nuevo paradigma)
DBA del Futuro (Un nuevo paradigma)DBA del Futuro (Un nuevo paradigma)
DBA del Futuro (Un nuevo paradigma)
 
Html5 - El futuro de la web
Html5 - El futuro de la webHtml5 - El futuro de la web
Html5 - El futuro de la web
 
Desarrollo modermo de aplicaciones web
Desarrollo modermo de aplicaciones webDesarrollo modermo de aplicaciones web
Desarrollo modermo de aplicaciones web
 
Buenas Prácticas para la Construcción de Aplicaciones de Software
Buenas Prácticas para la Construcción de Aplicaciones de SoftwareBuenas Prácticas para la Construcción de Aplicaciones de Software
Buenas Prácticas para la Construcción de Aplicaciones de Software
 
Optimizando Sitios Web
Optimizando Sitios WebOptimizando Sitios Web
Optimizando Sitios Web
 

Plus de Domingo Suarez Torres

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 KubernetesDomingo Suarez Torres
 
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 convivirDomingo Suarez Torres
 
Retos en la arquitectura de Microservicios
Retos en la arquitectura de MicroserviciosRetos en la arquitectura de Microservicios
Retos en la arquitectura de MicroserviciosDomingo Suarez Torres
 
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 IstioDomingo Suarez Torres
 
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 KubernetesDomingo Suarez Torres
 
Meetup DigitalOcean Cloud Native architecture
Meetup DigitalOcean Cloud Native architectureMeetup DigitalOcean Cloud Native architecture
Meetup DigitalOcean Cloud Native architectureDomingo Suarez Torres
 
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 EnvoyDomingo Suarez Torres
 
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 ObservabilityDomingo Suarez Torres
 
Orquestación de contenedores con Kubernetes SGNext
Orquestación de contenedores con Kubernetes SGNextOrquestación de contenedores con Kubernetes SGNext
Orquestación de contenedores con Kubernetes SGNextDomingo Suarez Torres
 
Elasticsearch JVM-MX Meetup April 2016
Elasticsearch JVM-MX Meetup April 2016Elasticsearch JVM-MX Meetup April 2016
Elasticsearch JVM-MX Meetup April 2016Domingo 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
 
Orquestación de contenedores con Kubernetes SGNext
Orquestación de contenedores con Kubernetes SGNextOrquestación de contenedores con Kubernetes SGNext
Orquestación de contenedores con Kubernetes SGNext
 
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
 

Dernier

Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdfPresentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdfymiranda2
 
Inteligencia artificial dentro de la contabilidad
Inteligencia artificial dentro de la contabilidadInteligencia artificial dentro de la contabilidad
Inteligencia artificial dentro de la contabilidaddanik1023m
 
Los mejores simuladores de circuitos electrónicos.pdf
Los mejores simuladores de circuitos electrónicos.pdfLos mejores simuladores de circuitos electrónicos.pdf
Los mejores simuladores de circuitos electrónicos.pdfodalistar77
 
Hazte partner: Club Festibity 2024 - 2025
Hazte partner: Club Festibity 2024 - 2025Hazte partner: Club Festibity 2024 - 2025
Hazte partner: Club Festibity 2024 - 2025Festibity
 
VIDEOS DE APOYO.docx E
VIDEOS DE APOYO.docx                                  EVIDEOS DE APOYO.docx                                  E
VIDEOS DE APOYO.docx Emialexsolar
 
Matriz de integración de tecnologías- Paola Carvajal.docx
Matriz de integración de tecnologías- Paola Carvajal.docxMatriz de integración de tecnologías- Paola Carvajal.docx
Matriz de integración de tecnologías- Paola Carvajal.docxPaolaCarolinaCarvaja
 
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdf
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdfInmersión global en ciberseguridad e IA en la conferencia RSA.pdf
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdfOBr.global
 
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...RaymondCode
 
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NETDe Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NETGermán Küber
 
El diseño de Algoritmos Paralelos.pdf - analisis de algortimos
El diseño de Algoritmos Paralelos.pdf - analisis de algortimosEl diseño de Algoritmos Paralelos.pdf - analisis de algortimos
El diseño de Algoritmos Paralelos.pdf - analisis de algortimosLCristinaForchue
 
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdf
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdfTENDENCIAS DE IA Explorando el futuro de la tecnologia.pdf
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdfJoseAlejandroPerezBa
 
Actividad 14_ Diseño de Algoritmos Paralelos.pdf
Actividad 14_ Diseño de Algoritmos Paralelos.pdfActividad 14_ Diseño de Algoritmos Paralelos.pdf
Actividad 14_ Diseño de Algoritmos Paralelos.pdfalejandrogomezescoto
 

Dernier (14)

Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdfPresentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
 
Inteligencia artificial dentro de la contabilidad
Inteligencia artificial dentro de la contabilidadInteligencia artificial dentro de la contabilidad
Inteligencia artificial dentro de la contabilidad
 
Los mejores simuladores de circuitos electrónicos.pdf
Los mejores simuladores de circuitos electrónicos.pdfLos mejores simuladores de circuitos electrónicos.pdf
Los mejores simuladores de circuitos electrónicos.pdf
 
BEDEC Sostenibilidad, novedades 2024 - Laura Silva
BEDEC Sostenibilidad, novedades 2024 - Laura SilvaBEDEC Sostenibilidad, novedades 2024 - Laura Silva
BEDEC Sostenibilidad, novedades 2024 - Laura Silva
 
Hazte partner: Club Festibity 2024 - 2025
Hazte partner: Club Festibity 2024 - 2025Hazte partner: Club Festibity 2024 - 2025
Hazte partner: Club Festibity 2024 - 2025
 
VIDEOS DE APOYO.docx E
VIDEOS DE APOYO.docx                                  EVIDEOS DE APOYO.docx                                  E
VIDEOS DE APOYO.docx E
 
Matriz de integración de tecnologías- Paola Carvajal.docx
Matriz de integración de tecnologías- Paola Carvajal.docxMatriz de integración de tecnologías- Paola Carvajal.docx
Matriz de integración de tecnologías- Paola Carvajal.docx
 
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdf
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdfInmersión global en ciberseguridad e IA en la conferencia RSA.pdf
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdf
 
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
 
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NETDe Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
 
El diseño de Algoritmos Paralelos.pdf - analisis de algortimos
El diseño de Algoritmos Paralelos.pdf - analisis de algortimosEl diseño de Algoritmos Paralelos.pdf - analisis de algortimos
El diseño de Algoritmos Paralelos.pdf - analisis de algortimos
 
BEDEC Proyecto y obra , novedades 2024 - Xavier Folch
BEDEC Proyecto y obra , novedades 2024 - Xavier FolchBEDEC Proyecto y obra , novedades 2024 - Xavier Folch
BEDEC Proyecto y obra , novedades 2024 - Xavier Folch
 
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdf
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdfTENDENCIAS DE IA Explorando el futuro de la tecnologia.pdf
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdf
 
Actividad 14_ Diseño de Algoritmos Paralelos.pdf
Actividad 14_ Diseño de Algoritmos Paralelos.pdfActividad 14_ Diseño de Algoritmos Paralelos.pdf
Actividad 14_ Diseño de Algoritmos Paralelos.pdf
 

SpringIO 2012 Madrid-Escalabilidad con Grails

  • 1. De cero a 2M 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 • ¿Porque Groovy/Grails? • Negocio • Diseño inicial • Infraestructura • Problemas • El futuro
  • 4. ¿Porque Groovy/Grails? • Aburrido de Java
  • 5. ¿Porque Groovy/Grails? • Aburrido de Java • Soy fanático de Hibernate, Spring y SpringMVC, WebFlow
  • 6. ¿Porque Groovy/Grails? • Aburrido de Java • Soy fanático de Hibernate, Spring y SpringMVC, WebFlow • JSF, Struts, Flex... <-- NO por favor
  • 7. ¿Porque Groovy/Grails? • Aburrido de Java • Soy fanático de Hibernate, Spring y SpringMVC, WebFlow • JSF, Struts, Flex... <-- NO por favor • Rails en 2004
  • 8. ¿Porque Groovy/Grails? • Aburrido de Java • Soy fanático de Hibernate, Spring y SpringMVC, WebFlow • JSF, Struts, Flex... <-- NO por favor • Rails en 2004 • Groovy. Gran lenguaje.
  • 9. ¿Porque Groovy/Grails? • Aburrido de Java • Soy fanático de Hibernate, Spring y SpringMVC, WebFlow • JSF, Struts, Flex... <-- NO por favor • Rails en 2004 • Groovy. Gran lenguaje. • Productividad
  • 10. ¿Porque Groovy/Grails? • Aburrido de Java • Soy fanático de Hibernate, Spring y SpringMVC, WebFlow • JSF, Struts, Flex... <-- NO por favor • Rails en 2004 • Groovy. Gran lenguaje. • Productividad • Comunidad y ecosistema
  • 11. ¿Porque Groovy/Grails? • Aburrido de Java • Soy fanático de Hibernate, Spring y SpringMVC, WebFlow • JSF, Struts, Flex... <-- NO por favor • Rails en 2004 • Groovy. Gran lenguaje. • Productividad • Comunidad y ecosistema • Grails 0.5-0.6 en 2007
  • 12. ¿Porque Groovy/Grails? • Aburrido de Java • Soy fanático de Hibernate, Spring y SpringMVC, WebFlow • JSF, Struts, Flex... <-- NO por favor • Rails en 2004 • Groovy. Gran lenguaje. • Productividad • Comunidad y ecosistema • Grails 0.5-0.6 en 2007 • Primer aplicación productiva en 2008, Grails 0.6
  • 13. ¿Porque Groovy/Grails? • Aburrido de Java • Soy fanático de Hibernate, Spring y SpringMVC, WebFlow • JSF, Struts, Flex... <-- NO por favor • Rails en 2004 • Groovy. Gran lenguaje. • Productividad • Comunidad y ecosistema • Grails 0.5-0.6 en 2007 • Primer aplicación productiva en 2008, Grails 0.6 • Me gusto tanto que hice screencast en Groovy.org.es
  • 14. Negocio Una tienda en linea, con una amplia y creciente gama de servicios y productos
  • 15. Negocio • Ventas en grupo • Cupones. • Viajes, electrodomésticos, etc • Campañas de email masivas. • Campañas de publicidad masivas.
  • 17. Primera implementación • En 8 semanas se construye en Berlin las bases de la plataforma, con 4 desarrolladores • Salimos a producción en Septiembre 2010 en México y Argentina • En Octubre 2010 salimos en producción en Emiratos Arabes (Dubai) • En noviembre el equipo de desarrollo crece en México • El desarrollo continua para México con un equipo de 5 desarrolladores
  • 18. Grails • Grails 1.3.4 • GORM • Servicios • Controllers y TagLibs • Jobs
  • 19. GORM, lo bueno • Facilidad de crear modelos • Modelos ricos • Consultas • Criteria • DynamicFinders • Actualización del esquema de base de datos
  • 20. 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)
  • 21. Servicios, lo bueno • Lógica de negocio • Servicios que “escuchan” eventos-RabbitMQ • Extensivo uso de Dependency Inyection • Composición, agregación • Reglas de negocio flexibles
  • 22. 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.
  • 23. Controllers, lo bueno • Ridículamente simple • Generar JSON/XML es trivial • Reglas de mapeo, muy sencillo y flexible (URLMappings) • Totalmente desacoplado de la vista
  • 24. Controllers, lo malo • Nada, IMHO lo perfecto de Grails
  • 25. TagLibs, lo bueno • Súper simple crearlas :) • Apoyo de Dependency Injection para acceder a servicios, o a cualquier componente. • Condicionar la generación de contenido • Llenar plantillas (fragmentos de una página)
  • 26. TagLibs, lo malo • Usarlas como scriptlets
  • 27. 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
  • 28. 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.
  • 29. Escalabilidad y Disponibilidad Vitales para estar en un negocio muy competitivo
  • 30. Números •200k-300k visitas diarias •1.5M > pageviews diarias •Hasta 80K usuarios concurrentes •20K-50K usuarios nuevos al día •1000-3000 compras diarias
  • 32. Terracotta • Cache distribuido • Evitamos accesos a la BD • Guardamos Objetos Java, HTML, JSON, XML • Entidades de Hibernate • Páginas completas • Fragmentos de páginas
  • 33. Terracotta • Usamos EhCache como “fachada” • En desarrollo no usamos Terracotta • En producción y QA configurado • El código aplicativo no se ve modificado
  • 34. 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
  • 35. 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
  • 36. RabbitMQ • Servicio de mensajería • Diferente a JMS, AMQP es un protocolo programable • Escrito en Erlang • Muy robusto, estable • Casi cero administración • Desarrollado por vmWare
  • 37. RabbitMQ • Procesamiento asíncrono • Procesos muy tardados • Envío de email • Consultas pesadas (reportes financieros) • Integración con otras aplicaciones
  • 38. 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.
  • 39. 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.
  • 40. 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.
  • 41. 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.
  • 43. mySQL • Tenemos instalada una versión “afinada” 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
  • 44. MongoDB • Principalmente almacenamos documentos con la bitácora de cambios en algunos objetos del modelo. • Grails Audit Logging Plugin • Guarda un registro por cada cambio. No nos convencía este enfoque. La tabla de auditoria crecía demasiado (millones de registros en unas semanas) • Activando los handlers, los atributos alterados se serializan a JSON y se almacenan de manera asíncrona en MongoDB • Tenemos una aplicación con Grails 2.0 con el plugin de MongoDB • MongoDB instalado en otra maquina diferente
  • 45. Redis • Excelente opción para usarlo como Cache • Redis puede almacenar ‘Estructuras de datos’ • Provee soporte para operar sobre esas estructuras. • incr, incrBy, set • Lo usamos para guardar estadísticas. • Compras por producto, etc. • Redis se encarga de la concurrencia
  • 46. ElasticSearch • Muy buena opción para busquedas ‘Full Text Search’ • Plugin de Grails para usarlo
  • 48. Maquinas • 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
  • 49. Características • 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
  • 50. 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
  • 52. Solucionar problemas • Necesitas métricas, indicadores • Medición • ¿Profiler? • ¿JMX?
  • 53. JavaMelody • Analiza todas las peticiones a tu aplicación • Nos ayudo a detectar • Cuellos de botella • Queries ineficientes • Servicios mas usados • OpenSource, Apache 2.0 • Activado en producción, penalización mínima, imperceptible. • Plugin para Grails
  • 57. Competitividad Datos de Alexa.com del día 21 de Octubre de 2011
  • 59. “Empresa del Año del Comercio Electrónico y los Negocios por Internet en México”
  • 62. Comunidad • La comunidad Groovy/Grails es fantastica. • Muchos plugins para Grails • Grails es un campo fértil para crear nuevos plugins • Es sencillo participar. • Hemos contribuido a varios plugins • Export • SpringSecurity • ReCaptcha • SpringSocial • Scala
  • 64. 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
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n