SlideShare una empresa de Scribd logo
1 de 49
Descargar para leer sin conexión
MADRID · NOV 27-28 · 2015
Resolviendo
la Noche
Electoral
AWS | Node.js | Angular.js |
D3.js | Leaflet.js
Javier Abadía
@javierabadia
20:31h	
  
20:31h	
  
20:31h	
  
20:29h	
  24 de Mayo 2015	
  
MADRID · NOV 27-28 · 2015
¡PANICO!
•  Los datos no se actualizan
•  El buscador de municipios no funciona
20:31h	
  
Un mes antes
¿Que tiene?
¿Que tiene?
MADRID · NOV 27-28 · 2015
Requisitos
•  que no eche abajo el periódico
•  que no falle
•  que sea navegable, informativo…
•  que sea rápido y bonito
DESARROLLO
Servidor
Ministerio del
Interior
Front-­‐End	
  –	
  Client-­‐	
  Side	
  
Usuarios finales
Front-­‐End	
  –	
  Server	
  -­‐	
  Side	
  Back-­‐End	
  
Front-­‐End	
  –	
  Client-­‐	
  Side	
  
Front-­‐End	
  –	
  Server	
  -­‐	
  Side	
  Back-­‐End	
  
Servidor
Ministerio del
Interior
Balanceador de Carga
Elástico
Nodo
Front-End
Nodo
Front-End
Nodo
Front-End
Nodo
Front-End
Nodo
Back-End
Usuarios finales
Front-­‐End	
  –	
  Client-­‐	
  Side	
  
Front-­‐End	
  –	
  Server	
  -­‐	
  Side	
  Back-­‐End	
  
Servidor
Ministerio del
Interior
Balanceador de Carga
Elástico
Nodo
Front-End
Nodo
Front-End
Nodo
Front-End
Nodo
Front-End
Nodo
Back-End
Usuarios finales
Front-­‐End	
  –	
  Client-­‐	
  Side	
  
Front-­‐End	
  –	
  Server	
  -­‐	
  Side	
  Back-­‐End	
  
Servidor
Ministerio del
Interior
Balanceador de Carga
Elástico
Nodo
Front-End
Nodo
Front-End
Nodo
Front-End
Nodo
Front-End
Nodo
Back-End
Usuarios finales
Front-­‐End	
  –	
  Client-­‐	
  Side	
  
Front-­‐End	
  –	
  Server	
  -­‐	
  Side	
  Back-­‐End	
  
Servidor
Ministerio del
Interior
Balanceador de Carga
Elástico
Nodo
Front-End
Nodo
Front-End
Nodo
Front-End
Nodo
Front-End
Nodo
Back-End
Usuarios finales
MADRID · NOV 27-28 · 2015
Selección de Herramientas
•  AWS
•  nginx
•  Node.js / Express
•  Angular
•  D3.js
•  Leaflet
MADRID · NOV 27-28 · 2015
aws
•  capacidad elástica
•  infraestructura montada desde el
principio
– load balancer
– instancia micro
•  producción
– n x máquinas idénticas
– listas para entrar en el balanceador
MADRID · NOV 27-28 · 2015
nginx
•  producción
– proxy hacia el node
– ficheros estáticos
•  cacheo
– 1 min
•  gzip
•  cabe todo en memoria I/O disco = 0
php
MADRID · NOV 27-28 · 2015
node.js
•  asíncrono
•  mismo lenguaje que en el cliente
MADRID · NOV 27-28 · 2015
node.js
•  urls
•  express
•  id de municipio/provincia
•  ejs = embedded javascript
•  PM2
integración en el CMS
MADRID · NOV 27-28 · 2015
integración en el CMS
•  iframe
¿y donde está el código de municipio?
mediante el header ‘Referrer’
integración en el CMS
mySQL
MADRID · NOV 27-28 · 2015
¿y donde está la BBDD?
•  Sin BBDD
•  csv è .json
•  Estructura jerárquica
–  /api/2015/02/50/50297/municipales.json
MADRID · NOV 27-28 · 2015
Angular.js
•  muy productivo
•  código común entre páginas
•  acceso $http, $q.all()
•  reusable para la app móvil
– angular mobile
– angular material
•  lodash / underscore
MADRID · NOV 27-28 · 2015
¿qué pasa con SEO?
•  las páginas con angular.js no tienen
contenido relevante
•  noscript
•  utilizar ejs para pregenerar las páginas
– consistencia
– traerse código del cliente al servidor -
isomorfismo
MADRID · NOV 27-28 · 2015
d3
•  artesanal
•  muy buen resultado
•  animaciones
•  estilos css
¡¡Por
supuesto!!
¿Mapas
interactivos
en la home?
¡Pero si hay
más de 8200
municipios!
¡¡NO PASA
NADAAAA!!
MADRID · NOV 27-28 · 2015
leaflet
•  mapas en la home?
–  claro!
•  mapas vectoriales interactivos
–  actualizados en tiempo real
•  topojson
•  rápido, ágil, ligero
•  preparación de datos
MADRID · NOV 27-28 · 2015
la app móvil
•  angular mobile ui
•  reuso de código
•  muy profesional
•  d3, leaflet funcionan
fenomenal
•  muy rápido
PUESTA EN PRODUCCION
MADRID · NOV 27-28 · 2015
despliegue
•  100% automático con 1 comando
– git pull
– grunt build
– restart pm2
– restart nginx
20:33h	
  24 de Mayo 2015	
  
MADRID · NOV 27-28 · 2015
el script de descarga
•  habían cambiado 2 caracteres en una
URL de +de 500 car.
•  arreglado en 15 min
MADRID · NOV 27-28 · 2015
el buscador de municipios
•  excesivo cacheo
– para nginx todos los municipios tenían la
misma URL (el identificador no viene en la
URL)
•  referer para el id de municipios
•  arreglado en 4 min
MADRID · NOV 27-28 · 2015
añadir el % escrutado
MADRID · NOV 27-28 · 2015
peticiones servidas
•  rendimiento
•  páginas vistas
MADRID · NOV 27-28 · 2015
usuarios
MADRID · NOV 27-28 · 2015
carga de CPU
MADRID · NOV 27-28 · 2015
latencia de salida
MADRID · NOV 27-28 · 2015
lecciones aprendidas
•  probar en condiciones realistas
•  no meter cambios de última hora
•  despliegue automático de cambios
•  un buen diseño [gráfico|técnico] es
fundamental
•  arquitectura escalable
•  menos es más
MADRID · NOV 27-28 · 2015
Muchas
Gracias
Javier Abadía
@javierabadia

Más contenido relacionado

Similar a Resultando la Noche Electoral AWS

Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015
Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015
Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015José Manuel García García
 
A todo gas: inyectando nitrógeno para incrementar la velocidad de las queries...
A todo gas: inyectando nitrógeno para incrementar la velocidad de las queries...A todo gas: inyectando nitrógeno para incrementar la velocidad de las queries...
A todo gas: inyectando nitrógeno para incrementar la velocidad de las queries...SolidQ
 
Migración y optimización del SAC Móvil Offline de COLUN - Patricio Ojeda Vargas
Migración y optimización del SAC Móvil Offline de COLUN - Patricio Ojeda VargasMigración y optimización del SAC Móvil Offline de COLUN - Patricio Ojeda Vargas
Migración y optimización del SAC Móvil Offline de COLUN - Patricio Ojeda VargasGeneXus
 
Cuando los desarrolladores conocieron SSAS, Business Intelligence y Big Data
Cuando los desarrolladores conocieron SSAS, Business Intelligence y Big DataCuando los desarrolladores conocieron SSAS, Business Intelligence y Big Data
Cuando los desarrolladores conocieron SSAS, Business Intelligence y Big DataRuben Pertusa Lopez
 
Capas de acceso a datos .NET escalables de verdad: el batido perfecto para el...
Capas de acceso a datos .NET escalables de verdad: el batido perfecto para el...Capas de acceso a datos .NET escalables de verdad: el batido perfecto para el...
Capas de acceso a datos .NET escalables de verdad: el batido perfecto para el...SolidQ
 
Técnicas avanzadas para resolver tus problemas de sql server - SolidQ Summit ...
Técnicas avanzadas para resolver tus problemas de sql server - SolidQ Summit ...Técnicas avanzadas para resolver tus problemas de sql server - SolidQ Summit ...
Técnicas avanzadas para resolver tus problemas de sql server - SolidQ Summit ...SolidQ
 
Azure web apps deep dive
Azure web apps   deep diveAzure web apps   deep dive
Azure web apps deep diverobertogg
 
Técnicas avanzadas para resolver tus problemas de sql server
Técnicas avanzadas para resolver tus problemas de sql serverTécnicas avanzadas para resolver tus problemas de sql server
Técnicas avanzadas para resolver tus problemas de sql serverEnrique Catala Bañuls
 
Aplicando R al análisis de rendimiento de un servidor
Aplicando R al análisis de rendimiento de un servidorAplicando R al análisis de rendimiento de un servidor
Aplicando R al análisis de rendimiento de un servidorEnrique Catala Bañuls
 
Trabajo fin de master Dirección TI
Trabajo fin de master Dirección TITrabajo fin de master Dirección TI
Trabajo fin de master Dirección TIManolo Crespo
 
Sql server 2016 novedades para desarrolladores
Sql server 2016 novedades para desarrolladoresSql server 2016 novedades para desarrolladores
Sql server 2016 novedades para desarrolladoresEnrique Catala Bañuls
 
EL CORTE INGLES: Hibridación: Extensión de cargas en nube pública
EL CORTE INGLES: Hibridación: Extensión de cargas en nube públicaEL CORTE INGLES: Hibridación: Extensión de cargas en nube pública
EL CORTE INGLES: Hibridación: Extensión de cargas en nube públicaconfluent
 
Operational Analytics, ¿amigo o enemigo de los ETLs y DQ clásicos? - SolidQ S...
Operational Analytics, ¿amigo o enemigo de los ETLs y DQ clásicos? - SolidQ S...Operational Analytics, ¿amigo o enemigo de los ETLs y DQ clásicos? - SolidQ S...
Operational Analytics, ¿amigo o enemigo de los ETLs y DQ clásicos? - SolidQ S...SolidQ
 
Real-time con Azure Stream Analytics - SolidQ Summit 2017
Real-time con Azure Stream Analytics - SolidQ Summit 2017Real-time con Azure Stream Analytics - SolidQ Summit 2017
Real-time con Azure Stream Analytics - SolidQ Summit 2017SolidQ
 
SPS Madrid 2019 - Eleva tu aplicaciones de PowerApps a otro nivel
SPS Madrid 2019 - Eleva tu aplicaciones de PowerApps a otro nivelSPS Madrid 2019 - Eleva tu aplicaciones de PowerApps a otro nivel
SPS Madrid 2019 - Eleva tu aplicaciones de PowerApps a otro nivelImanol Iza Martin
 
Conviértete en un PowerDBA con PowerShell
Conviértete en un PowerDBA con PowerShellConviértete en un PowerDBA con PowerShell
Conviértete en un PowerDBA con PowerShellEnrique Puig
 
Introducción a SSIS con Biml
Introducción a SSIS con BimlIntroducción a SSIS con Biml
Introducción a SSIS con BimlSpanishPASSVC
 

Similar a Resultando la Noche Electoral AWS (20)

Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015
Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015
Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015
 
A todo gas: inyectando nitrógeno para incrementar la velocidad de las queries...
A todo gas: inyectando nitrógeno para incrementar la velocidad de las queries...A todo gas: inyectando nitrógeno para incrementar la velocidad de las queries...
A todo gas: inyectando nitrógeno para incrementar la velocidad de las queries...
 
Ecs codemotion
Ecs codemotionEcs codemotion
Ecs codemotion
 
Migración y optimización del SAC Móvil Offline de COLUN - Patricio Ojeda Vargas
Migración y optimización del SAC Móvil Offline de COLUN - Patricio Ojeda VargasMigración y optimización del SAC Móvil Offline de COLUN - Patricio Ojeda Vargas
Migración y optimización del SAC Móvil Offline de COLUN - Patricio Ojeda Vargas
 
Cuando los desarrolladores conocieron SSAS, Business Intelligence y Big Data
Cuando los desarrolladores conocieron SSAS, Business Intelligence y Big DataCuando los desarrolladores conocieron SSAS, Business Intelligence y Big Data
Cuando los desarrolladores conocieron SSAS, Business Intelligence y Big Data
 
Tecnologíahtml5
Tecnologíahtml5Tecnologíahtml5
Tecnologíahtml5
 
Capas de acceso a datos .NET escalables de verdad: el batido perfecto para el...
Capas de acceso a datos .NET escalables de verdad: el batido perfecto para el...Capas de acceso a datos .NET escalables de verdad: el batido perfecto para el...
Capas de acceso a datos .NET escalables de verdad: el batido perfecto para el...
 
Técnicas avanzadas para resolver tus problemas de sql server - SolidQ Summit ...
Técnicas avanzadas para resolver tus problemas de sql server - SolidQ Summit ...Técnicas avanzadas para resolver tus problemas de sql server - SolidQ Summit ...
Técnicas avanzadas para resolver tus problemas de sql server - SolidQ Summit ...
 
Azure web apps deep dive
Azure web apps   deep diveAzure web apps   deep dive
Azure web apps deep dive
 
Técnicas avanzadas para resolver tus problemas de sql server
Técnicas avanzadas para resolver tus problemas de sql serverTécnicas avanzadas para resolver tus problemas de sql server
Técnicas avanzadas para resolver tus problemas de sql server
 
Aplicando R al análisis de rendimiento de un servidor
Aplicando R al análisis de rendimiento de un servidorAplicando R al análisis de rendimiento de un servidor
Aplicando R al análisis de rendimiento de un servidor
 
Codemotion: descubriendo las cachés
Codemotion: descubriendo las cachésCodemotion: descubriendo las cachés
Codemotion: descubriendo las cachés
 
Trabajo fin de master Dirección TI
Trabajo fin de master Dirección TITrabajo fin de master Dirección TI
Trabajo fin de master Dirección TI
 
Sql server 2016 novedades para desarrolladores
Sql server 2016 novedades para desarrolladoresSql server 2016 novedades para desarrolladores
Sql server 2016 novedades para desarrolladores
 
EL CORTE INGLES: Hibridación: Extensión de cargas en nube pública
EL CORTE INGLES: Hibridación: Extensión de cargas en nube públicaEL CORTE INGLES: Hibridación: Extensión de cargas en nube pública
EL CORTE INGLES: Hibridación: Extensión de cargas en nube pública
 
Operational Analytics, ¿amigo o enemigo de los ETLs y DQ clásicos? - SolidQ S...
Operational Analytics, ¿amigo o enemigo de los ETLs y DQ clásicos? - SolidQ S...Operational Analytics, ¿amigo o enemigo de los ETLs y DQ clásicos? - SolidQ S...
Operational Analytics, ¿amigo o enemigo de los ETLs y DQ clásicos? - SolidQ S...
 
Real-time con Azure Stream Analytics - SolidQ Summit 2017
Real-time con Azure Stream Analytics - SolidQ Summit 2017Real-time con Azure Stream Analytics - SolidQ Summit 2017
Real-time con Azure Stream Analytics - SolidQ Summit 2017
 
SPS Madrid 2019 - Eleva tu aplicaciones de PowerApps a otro nivel
SPS Madrid 2019 - Eleva tu aplicaciones de PowerApps a otro nivelSPS Madrid 2019 - Eleva tu aplicaciones de PowerApps a otro nivel
SPS Madrid 2019 - Eleva tu aplicaciones de PowerApps a otro nivel
 
Conviértete en un PowerDBA con PowerShell
Conviértete en un PowerDBA con PowerShellConviértete en un PowerDBA con PowerShell
Conviértete en un PowerDBA con PowerShell
 
Introducción a SSIS con Biml
Introducción a SSIS con BimlIntroducción a SSIS con Biml
Introducción a SSIS con Biml
 

Más de Javier Abadía

Python Asíncrono - Async Python
Python Asíncrono - Async PythonPython Asíncrono - Async Python
Python Asíncrono - Async PythonJavier Abadía
 
Extendiendo Django: Cómo Escribir Tu Propio Backend de Base de Datos - Exasol
Extendiendo Django: Cómo Escribir Tu Propio Backend de Base de Datos - ExasolExtendiendo Django: Cómo Escribir Tu Propio Backend de Base de Datos - Exasol
Extendiendo Django: Cómo Escribir Tu Propio Backend de Base de Datos - ExasolJavier Abadía
 
UX/UI para Desarrolladores
UX/UI para DesarrolladoresUX/UI para Desarrolladores
UX/UI para DesarrolladoresJavier Abadía
 
Reactividad en Angular, React y VueJS
Reactividad en Angular, React y VueJSReactividad en Angular, React y VueJS
Reactividad en Angular, React y VueJSJavier Abadía
 
Las reglas que hay que romper para que tu equipo de desarrollo sea el más RÁPIDO
Las reglas que hay que romper para que tu equipo de desarrollo sea el más RÁPIDOLas reglas que hay que romper para que tu equipo de desarrollo sea el más RÁPIDO
Las reglas que hay que romper para que tu equipo de desarrollo sea el más RÁPIDOJavier Abadía
 
Retos de Programación en Python
Retos de Programación en PythonRetos de Programación en Python
Retos de Programación en PythonJavier Abadía
 
Django + Vue, JavaScript de 3ª generación para modernizar Django
Django + Vue, JavaScript de 3ª generación para modernizar DjangoDjango + Vue, JavaScript de 3ª generación para modernizar Django
Django + Vue, JavaScript de 3ª generación para modernizar DjangoJavier Abadía
 
Vue.js + Django - configuración para desarrollo con webpack y HMR
Vue.js + Django - configuración para desarrollo con webpack y HMRVue.js + Django - configuración para desarrollo con webpack y HMR
Vue.js + Django - configuración para desarrollo con webpack y HMRJavier Abadía
 
Anatomía de un Bot para Resultados Electorales
Anatomía de un Bot para Resultados ElectoralesAnatomía de un Bot para Resultados Electorales
Anatomía de un Bot para Resultados ElectoralesJavier Abadía
 
Deep learning image classification aplicado al mundo de la moda
Deep learning image classification aplicado al mundo de la modaDeep learning image classification aplicado al mundo de la moda
Deep learning image classification aplicado al mundo de la modaJavier Abadía
 
Análisis de colores: cómo analizar tendencias de moda automáticamente
 Análisis de colores: cómo analizar tendencias de moda automáticamente Análisis de colores: cómo analizar tendencias de moda automáticamente
Análisis de colores: cómo analizar tendencias de moda automáticamenteJavier Abadía
 
Codemotion 2016 - d3.js un taller divertido y difícil
Codemotion 2016 - d3.js un taller divertido y difícilCodemotion 2016 - d3.js un taller divertido y difícil
Codemotion 2016 - d3.js un taller divertido y difícilJavier Abadía
 

Más de Javier Abadía (12)

Python Asíncrono - Async Python
Python Asíncrono - Async PythonPython Asíncrono - Async Python
Python Asíncrono - Async Python
 
Extendiendo Django: Cómo Escribir Tu Propio Backend de Base de Datos - Exasol
Extendiendo Django: Cómo Escribir Tu Propio Backend de Base de Datos - ExasolExtendiendo Django: Cómo Escribir Tu Propio Backend de Base de Datos - Exasol
Extendiendo Django: Cómo Escribir Tu Propio Backend de Base de Datos - Exasol
 
UX/UI para Desarrolladores
UX/UI para DesarrolladoresUX/UI para Desarrolladores
UX/UI para Desarrolladores
 
Reactividad en Angular, React y VueJS
Reactividad en Angular, React y VueJSReactividad en Angular, React y VueJS
Reactividad en Angular, React y VueJS
 
Las reglas que hay que romper para que tu equipo de desarrollo sea el más RÁPIDO
Las reglas que hay que romper para que tu equipo de desarrollo sea el más RÁPIDOLas reglas que hay que romper para que tu equipo de desarrollo sea el más RÁPIDO
Las reglas que hay que romper para que tu equipo de desarrollo sea el más RÁPIDO
 
Retos de Programación en Python
Retos de Programación en PythonRetos de Programación en Python
Retos de Programación en Python
 
Django + Vue, JavaScript de 3ª generación para modernizar Django
Django + Vue, JavaScript de 3ª generación para modernizar DjangoDjango + Vue, JavaScript de 3ª generación para modernizar Django
Django + Vue, JavaScript de 3ª generación para modernizar Django
 
Vue.js + Django - configuración para desarrollo con webpack y HMR
Vue.js + Django - configuración para desarrollo con webpack y HMRVue.js + Django - configuración para desarrollo con webpack y HMR
Vue.js + Django - configuración para desarrollo con webpack y HMR
 
Anatomía de un Bot para Resultados Electorales
Anatomía de un Bot para Resultados ElectoralesAnatomía de un Bot para Resultados Electorales
Anatomía de un Bot para Resultados Electorales
 
Deep learning image classification aplicado al mundo de la moda
Deep learning image classification aplicado al mundo de la modaDeep learning image classification aplicado al mundo de la moda
Deep learning image classification aplicado al mundo de la moda
 
Análisis de colores: cómo analizar tendencias de moda automáticamente
 Análisis de colores: cómo analizar tendencias de moda automáticamente Análisis de colores: cómo analizar tendencias de moda automáticamente
Análisis de colores: cómo analizar tendencias de moda automáticamente
 
Codemotion 2016 - d3.js un taller divertido y difícil
Codemotion 2016 - d3.js un taller divertido y difícilCodemotion 2016 - d3.js un taller divertido y difícil
Codemotion 2016 - d3.js un taller divertido y difícil
 

Resultando la Noche Electoral AWS

  • 1. MADRID · NOV 27-28 · 2015 Resolviendo la Noche Electoral AWS | Node.js | Angular.js | D3.js | Leaflet.js Javier Abadía @javierabadia
  • 3.
  • 5.
  • 7.
  • 8. 20:29h  24 de Mayo 2015  
  • 9. MADRID · NOV 27-28 · 2015 ¡PANICO! •  Los datos no se actualizan •  El buscador de municipios no funciona 20:31h  
  • 13. MADRID · NOV 27-28 · 2015 Requisitos •  que no eche abajo el periódico •  que no falle •  que sea navegable, informativo… •  que sea rápido y bonito
  • 15. Servidor Ministerio del Interior Front-­‐End  –  Client-­‐  Side   Usuarios finales Front-­‐End  –  Server  -­‐  Side  Back-­‐End  
  • 16. Front-­‐End  –  Client-­‐  Side   Front-­‐End  –  Server  -­‐  Side  Back-­‐End   Servidor Ministerio del Interior Balanceador de Carga Elástico Nodo Front-End Nodo Front-End Nodo Front-End Nodo Front-End Nodo Back-End Usuarios finales
  • 17. Front-­‐End  –  Client-­‐  Side   Front-­‐End  –  Server  -­‐  Side  Back-­‐End   Servidor Ministerio del Interior Balanceador de Carga Elástico Nodo Front-End Nodo Front-End Nodo Front-End Nodo Front-End Nodo Back-End Usuarios finales
  • 18. Front-­‐End  –  Client-­‐  Side   Front-­‐End  –  Server  -­‐  Side  Back-­‐End   Servidor Ministerio del Interior Balanceador de Carga Elástico Nodo Front-End Nodo Front-End Nodo Front-End Nodo Front-End Nodo Back-End Usuarios finales
  • 19. Front-­‐End  –  Client-­‐  Side   Front-­‐End  –  Server  -­‐  Side  Back-­‐End   Servidor Ministerio del Interior Balanceador de Carga Elástico Nodo Front-End Nodo Front-End Nodo Front-End Nodo Front-End Nodo Back-End Usuarios finales
  • 20. MADRID · NOV 27-28 · 2015 Selección de Herramientas •  AWS •  nginx •  Node.js / Express •  Angular •  D3.js •  Leaflet
  • 21. MADRID · NOV 27-28 · 2015 aws •  capacidad elástica •  infraestructura montada desde el principio – load balancer – instancia micro •  producción – n x máquinas idénticas – listas para entrar en el balanceador
  • 22. MADRID · NOV 27-28 · 2015 nginx •  producción – proxy hacia el node – ficheros estáticos •  cacheo – 1 min •  gzip •  cabe todo en memoria I/O disco = 0
  • 23. php
  • 24. MADRID · NOV 27-28 · 2015 node.js •  asíncrono •  mismo lenguaje que en el cliente
  • 25. MADRID · NOV 27-28 · 2015 node.js •  urls •  express •  id de municipio/provincia •  ejs = embedded javascript •  PM2
  • 27. MADRID · NOV 27-28 · 2015 integración en el CMS •  iframe ¿y donde está el código de municipio? mediante el header ‘Referrer’
  • 29. mySQL
  • 30. MADRID · NOV 27-28 · 2015 ¿y donde está la BBDD? •  Sin BBDD •  csv è .json •  Estructura jerárquica –  /api/2015/02/50/50297/municipales.json
  • 31. MADRID · NOV 27-28 · 2015 Angular.js •  muy productivo •  código común entre páginas •  acceso $http, $q.all() •  reusable para la app móvil – angular mobile – angular material •  lodash / underscore
  • 32. MADRID · NOV 27-28 · 2015 ¿qué pasa con SEO? •  las páginas con angular.js no tienen contenido relevante •  noscript •  utilizar ejs para pregenerar las páginas – consistencia – traerse código del cliente al servidor - isomorfismo
  • 33. MADRID · NOV 27-28 · 2015 d3 •  artesanal •  muy buen resultado •  animaciones •  estilos css
  • 35. ¡Pero si hay más de 8200 municipios! ¡¡NO PASA NADAAAA!!
  • 36. MADRID · NOV 27-28 · 2015 leaflet •  mapas en la home? –  claro! •  mapas vectoriales interactivos –  actualizados en tiempo real •  topojson •  rápido, ágil, ligero •  preparación de datos
  • 37. MADRID · NOV 27-28 · 2015 la app móvil •  angular mobile ui •  reuso de código •  muy profesional •  d3, leaflet funcionan fenomenal •  muy rápido
  • 39. MADRID · NOV 27-28 · 2015 despliegue •  100% automático con 1 comando – git pull – grunt build – restart pm2 – restart nginx
  • 40. 20:33h  24 de Mayo 2015  
  • 41. MADRID · NOV 27-28 · 2015 el script de descarga •  habían cambiado 2 caracteres en una URL de +de 500 car. •  arreglado en 15 min
  • 42. MADRID · NOV 27-28 · 2015 el buscador de municipios •  excesivo cacheo – para nginx todos los municipios tenían la misma URL (el identificador no viene en la URL) •  referer para el id de municipios •  arreglado en 4 min
  • 43. MADRID · NOV 27-28 · 2015 añadir el % escrutado
  • 44. MADRID · NOV 27-28 · 2015 peticiones servidas •  rendimiento •  páginas vistas
  • 45. MADRID · NOV 27-28 · 2015 usuarios
  • 46. MADRID · NOV 27-28 · 2015 carga de CPU
  • 47. MADRID · NOV 27-28 · 2015 latencia de salida
  • 48. MADRID · NOV 27-28 · 2015 lecciones aprendidas •  probar en condiciones realistas •  no meter cambios de última hora •  despliegue automático de cambios •  un buen diseño [gráfico|técnico] es fundamental •  arquitectura escalable •  menos es más
  • 49. MADRID · NOV 27-28 · 2015 Muchas Gracias Javier Abadía @javierabadia