SlideShare uma empresa Scribd logo
1 de 64
Migrando Rails Apps entre Cloud
     y Bare Metal Servers
              Edwin Cruz
  Crowd Interactive, MagmaRails 2012
El diario de un CTO/Techy Co-founder
Dia 1
• Million dollar idea!
• Investigación de mercado (alguienmásya lo
  hizo?)
Dia 2
• Compraunacaja de bebidasenergizantes
• Diseña el MVP
Dia 3
• Empieza a codificar la aplicacion
Dia 3-7
•   Café
•   Café
•   Bebidaenergizante
•   Café
•   Dormir
Dia 7-10
• Se tienealgoestable
• Hora de buscar co-founder
  – Inversionistas al parecer le creenmas a un grupo
    de gente
Dia 1, Co-Founder
• Million dollar idea!
• Investigación de mercado
Dia 2
• Diseñasu MVP
• Hacemásinvestigacion
• Buscatechy co-founder
Dia 3
• Meetup
Dia 4
• Meetup
Dia 6
• Drinkup
  – Lo encuentra!
Dia 7
• Empiezan a trabajar
Dia>10
• Tienen un productoestable
  – MVP




                      We <3 ruby on rails
Primer Paso
• Hosting para la app
  – Heroku
     •   $ herokuapps:createmillion_dollar_stage
     •   $ herokuapps:info | grep 'Git URL'
     •   $ git remote add heroku GIT_URL
     •   $ git push heroku master
     •   $ heroku run db:migrate
  – Engine Yard
     • Click, copy, paste, click
     • ey deploy….. Deploy!
Como hacer un deployment?
• git push heroku master
• Click Deploy, ey deploy
Dia>20
• Usuariosreales
  – Picos de latencia
• Primer outage
  – Instanciaspequeñas
  – Base de datoscompartida
Asique…
• Recap
  – Ya no tienesjefesdiciendoquelasnuevastecnologias
    no son lo suficientemente ‘estable’ parausarla
• Cutting edge technologies
  – Muyprometedoras
  – Pocadocumentación
  – Developer felices
Sobrecarga de trabajo
• Contratación de nuevos developers
• Empiezadesarrollo de features en paralelo
Siguenllegandomásusuarios!
•   Production database
•   CDN
•   Más app servers
•   Pusher




• La million dollar idea estodo un exito!
Trabajando en conjunto
•   Mas killer features
•   Third party services
•   Performance issues
•   NewRelicProfesional
    – Redisparasesiones
    – Memcached fragment cache
Nuevas feature
• Share with your friends!
  – Mastráfico
  – Base de datos, el nuevocuello de botella
  – Dobletea la capacidad!
• Actualizaciones en tiempo real
  – Estanmatando los app servers!
  – Migrar a app servers diseñadosparasoportar
    forking
Nuevas features
• Background processing
  – Resque al rescate!
     • Phew, ya se teniaredis
  – Mismosrecursos
• Mejoresestrategias de cache yexpiración



• Todobajo control.
Noticias del CEO
• Nuestraaplicacionva a ser promocionada en
  un canal de television a nivelnacional!!
  – OMG, a correr!
  – Pronostico: 3x trafico del picomás alto a la vez
     • Triplicar la capacidad?
     • Click, click, click…. Listo
  – Al final de més, “quequuueee, yestafactura?”
  – En pocotiempoya se estanusandoesosrecursos
Noticias del CEO
• Necesitamos uptime de 99.997
  – Deployment transparentes
  – Mascapacidad
  – Staging environments
Deuda de Ingenieria
• Muchos ‘add ons’
• Facturaciónva en aumento
• Ambientes de staging ‘iguales’ queproduccion
  – QA
     • Sincronizacion de datosdesdeproducción
         – Base de datos
         – Imagenes
         – Usuarios, actualizar emails con ficticios

• Etc. == $$$$$$
Deployment desde cero
• Rails stack
  – Web server
  – Balancer/proxy
  – App servers
  – Database server
  – Fulltext search engine
  – Cache
  – Deployment scripts
  – Bootstrapingnuevosservidores
Arquitectura
                nginx




                haproxy



Unicorn         Unicorn      Unicorn



  fork            fork          fork
    fork            fork          fork
      fork            fork          fork



                        db
Antes que nada
•   Quees un gem
•   Quees bundler
•   Nuestro amigo el Gemfile
•   Capistrano
•   Chef
•   RVM
•   Rbenv
Web Server
Dejandorastros - Nginx
haproxy
Deployments transparentes
Dejandorastros – Rails side
• Reemplazar Rails Logger
  – Una sola linea, se hace ‘grepable’
• Enmascarardatossensitivos
  – Rails.config.filter_parameters+=
    [:card_number, :cvv]
Problemascomúnes
• RepositoriosPrivados
  – Crearcuentacompartiday registrar llaves de los
    servidores
• Firewalls
  – bundle pack
• Gems paradesarrollo con
  dependenciasespeciales
  – bundle install –without development test
Capistrano
• Herramientaparahacer de
  maneraconsistente, repetitivaygarantizada, de
  ployments de aplicaciones.
• Scripts (recipes)
  – Ejecutan commandos de maneraremota via ssh
Capistrano


$ capify .
[add] writing './Capfile'
[add] making directory './config'
[add] writing './config/deploy.rb'
[done] capified!
Capistrano(deploy.rb)
Capistano(deploy.rb)
Capistrano
(deploy.rb)
Capistrano(deploy.rb)




      current_path
      current_release
      shared_path
Capistrano(recipes)
Capistrano
• Como desarrollarfacilmente?
  – Vagrant
  – Chef-solo
Vagrant
Migrando una app de servidores
físicos a una nube privada con ~15
         mins de downtime
EventosPrincipales
• 8 Meses antes
  – Se empezó a experimentar con Joyent smart
    machines
  – Complian con los SLA(Service Level
    Agreement)internos
     •   No eraninstanciasvirtuales
     •   Son delimitadasporzonas
     •   No son ambientesvirtuales
     •   Rentaera mensualfijay no porusage
     •   SmartOS(solaris)
EventosPrincipales
• 6 Mesesantes
  – Environments de demo se instalaron
    • Todo en una sola instancia
       – Nginx, mysql, RoR app
  – JoyentproveiaPercona Smart Machines
    • Joyenttrabajo con Perconaparacompilar lo
      masoptimizado los binarios
    • La aplicacion se migró a percona 5.1 de mysql 5.0.56
EventosPrincipales
• 4 Meses antes
  – Ambiente de Staging en Joyent
     • Se diseñoparadespues ser promovidocomo elnuevo
       cluster de produccion
     • 2 clusters
        – 1 balanceador
        – 8 app servers
     • Percona smart machine
        – 1 Master
        – 2 replicas
  – Se compro un nuevodominio
EventosPrincipales
• 3 meses antes
• Los Sysadmins se empezaron a quedarcalvos
  – El ataque de ImageMagick!!!
  – Se usabangemasespecificasparalinux
     • Leianmac addresses, en zonas, no se tieneacceso a
       lasmac address desde un solaris
     • UUID generator estabaroto, lassesionescolisionaban
EventosPrincipales
• 2 Meses antes
  – Incertidumbrepor el rendimiento
     • Se hizo un stress performance muydetallado
     • Httperf, ab, loadrunner
     • Se optimizaronconfiguraciones
        – HAProxy, queue time yestrategia de balanceo, last connection
          vs round robin
        – Nginx, se recompiloparausarotrodirectorio temporal
        – MySQL, innodb buffer size al 70% de
          memoriayarchivoportabla
EventosPrincipales
• 1.5 meses antes
  – Si! Si lo hacemos…. ( comprandomisboletos a San
    Francisco, uno con el viaje normal yotro con
    regreso al diasiguiente )
  – Trabajoexaustivo con
    capistrano, debiasoportarhacer deployment a dos
    ambientes
EventosPrincipales
• 1 Mes antes
  – Se configuró la replica mysql multi-site
     • El slave en joyent se promoveriacomo el master el dia
       del movimiento
     • En promedio 17 minutosatras del master
  – En vez de usar el cluster de stage
    comoproducción, se contrataronunoslimpios, se
    corrieronlasrecipies de chef ycapistrano
     • ImageMagick again!!! grrrrrr
EventosPrincipales
• 2 Semanas antes
  – Planeodetalladominutoporminuto lo quepasaria
     • QA Pidio 2 hrs paravalidacion, wait what!???
  – Miercoles 11pm empezariatodo
EventosPrincipales
• 1 Semana antes
  – Se saco un respaldocompleto de producciony se cargo en
    la replica en joyent
     • Replicacion multi-site trabajandobien
  – Reglas del nginx
     • Reroute, entre clusters
     • Down page, pagina de mantenimiento
     • Redirect, redireccion multi-site
  – DNS TTL al minimo
  – Jueves 12 am pagina de mantenimiento…. pagina de que?
     • No teniamospaginas de mantenimiento!!!! (alguiengritandole a los
       diseñadores)
EventosPrincipales
• 2 dias antes (Lunes)
  – Oh no!!! No teniamostareas de
    capistranoparaactivarlasreglas del nginx
  – Se puso la pagina de mantenimientoque los
    diseñadoreshicieron
  – Todobajo control, a descansar
EventosPrincipales
• 1 diaantes(Martes)
  – SysadminsyDevOpsdescansando, dia off
EventosPrincipales
• El Dia de la migracion
  – SysadminsyDevOpsllegando a la oficina ~5pm
  – Ultimo dump de produccion se carga en la replica
     • Oh ho!, la vpnextremadamentelenta, 8pm ydecia 14000
       seconds behind master, shit!
     • Se hizo un tunelsshpor la interface externa (viajandopor
       internet), en 14 minutos se sincronizo
     • Todolisto
EventosPrincipales
• Despues de 11pm
  – Se empezotardepor la replica lenta
     • Pagina de mantenimiento
     • Esperarbackgrond jobs terminaran
     • Apagartodos los app servers
     • Esperar la replicaterminara de sincronizar master y se
       promoviocomomaster
     • Arrancar la aplicacion en joyent con el nuevo master
  – Todoestonostomo 7 minutos!
EventosPrincipales
• Validando la aplicacion
  – QA validopor un dominio especial
  – 8minutosdespues, dio sign off
  – Seactivaronlasredirecciones en nginx multi-site
  – Se cambio el dns
  – A rellenar la cafetera!
  – 2 minutosdespues, callo la
    primeraorden,Fiuuufff!!!!!
EventosPrincipales
• 3 hrs despues de la migracion
  – ImageMagick issues!!
     • Crap! Algunasimagenes se servianpor
       PNG, eImageMagick no fuecompilado con soporte
       PNG, a recompilartodos los clusters
  – Se prendieronserviciosexternos
  – Se levantootrareplicacionmuti-site de joyent a
    rackspace
  – Se arrancanaplicacionesinternas
EventosPrincipales
• 8am diasiguiente
  – Ya se puedenir a dormir
  – En el camino
     • Riiiing! “El distribution center no recibeordenes!”
     • Problemas de replicacion de dns, no se hizoreplicacion
       multisite paraaplicacionesinternas, se harcodeo la
       nueva IP en /etc/hosts, solved…
  – A Dormir
Eventosprincipales
• Despues de la migracion
  – Performance issues
     • Base de datos 5x maslenta, nadiesabiaporque
        – Servidormasgrande
        – Filesystem mucho muytuneado
        – Al final, despues de 2 semanas, se encontro el problema:
          binarioscompilados con gcc 3.x, great! |-(
     • Ruby poor performance, no tomabalas environment
       variables del REE paratunear el garbage collector
     • El directoriotmp se hizomasgrande
EventosPrincipales
• Al final:
   – 20 ms mas lento que en rackspace
   – 60% menos de facturacion
   – Podemoscrecer on demand
   – Sobrevivimosunaventa con un pico de 21k
     rpm,350 clicks porsegundo!!!!
Tiempo para preguntas?


      Gracias!

        Edwin Cruz
        @softr8

Mais conteúdo relacionado

Semelhante a Migrando Rails Apps entre Cloud y Bare Metal Servers

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_
 
Rendimiento y velocidad en WordPress
Rendimiento y velocidad en WordPress Rendimiento y velocidad en WordPress
Rendimiento y velocidad en WordPress Dani Reguera Bakhache
 
Capistrano drupalcamp-jerez-2015
Capistrano drupalcamp-jerez-2015Capistrano drupalcamp-jerez-2015
Capistrano drupalcamp-jerez-2015David Gil Sánchez
 
Construcción de Aplicaciones de Avanzada con Geo-Distribución
Construcción de Aplicaciones de Avanzada con Geo-DistribuciónConstrucción de Aplicaciones de Avanzada con Geo-Distribución
Construcción de Aplicaciones de Avanzada con Geo-DistribuciónLoja Valle de Tecnología
 
SpringIO 2012 Madrid-Escalabilidad con Grails
SpringIO 2012 Madrid-Escalabilidad con GrailsSpringIO 2012 Madrid-Escalabilidad con Grails
SpringIO 2012 Madrid-Escalabilidad con GrailsDomingo Suarez Torres
 
Nuevas tecnologías de backup sm&c consultors
Nuevas tecnologías de backup   sm&c consultorsNuevas tecnologías de backup   sm&c consultors
Nuevas tecnologías de backup sm&c consultorsOmega Peripherals
 
Desplegando Drupal con Capistrano
Desplegando Drupal con CapistranoDesplegando Drupal con Capistrano
Desplegando Drupal con CapistranoDavid Gil Sánchez
 
Cómo volarle la peluca a tus usuarios con la velocidad de tu sitio?
Cómo volarle la peluca a tus usuarios con la velocidad de tu sitio?Cómo volarle la peluca a tus usuarios con la velocidad de tu sitio?
Cómo volarle la peluca a tus usuarios con la velocidad de tu sitio?Martin Siniawski
 
Grails, opción real y escalable para sitios web de alta carga
Grails, opción real y escalable para sitios web de alta cargaGrails, opción real y escalable para sitios web de alta carga
Grails, opción real y escalable para sitios web de alta cargaDomingo Suarez Torres
 
Herramientas para la medicion de desempeño PHPConMX 2012
Herramientas para la medicion de desempeño  PHPConMX 2012Herramientas para la medicion de desempeño  PHPConMX 2012
Herramientas para la medicion de desempeño PHPConMX 2012Carlos Nacianceno
 
Optimización de aplicaciones web con base de datos NoSQL In-Memory
Optimización de aplicaciones web con base de datos NoSQL In-MemoryOptimización de aplicaciones web con base de datos NoSQL In-Memory
Optimización de aplicaciones web con base de datos NoSQL In-MemoryGonzalo Chacaltana
 
Presentación omega peripherals
Presentación omega peripheralsPresentación omega peripherals
Presentación omega peripheralsOmega Peripherals
 
Rendimiento y velocidad, acelera tu sitio WordPress
Rendimiento y velocidad, acelera tu sitio WordPressRendimiento y velocidad, acelera tu sitio WordPress
Rendimiento y velocidad, acelera tu sitio WordPressLibreCon
 
Node.js + Azure, o como mezclar agua con aceite
Node.js + Azure, o como mezclar agua con aceite Node.js + Azure, o como mezclar agua con aceite
Node.js + Azure, o como mezclar agua con aceite [T]echdencias
 
¿Cómo mezclar agua con aceite? NodeJS + Azure
¿Cómo mezclar agua con aceite? NodeJS + Azure ¿Cómo mezclar agua con aceite? NodeJS + Azure
¿Cómo mezclar agua con aceite? NodeJS + Azure Nacho Fanjul Corteguera
 
Rails Against The Machine
Rails Against The MachineRails Against The Machine
Rails Against The Machineguestae6a05
 

Semelhante a Migrando Rails Apps entre Cloud y Bare Metal Servers (20)

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
 
Rendimiento y velocidad en WordPress
Rendimiento y velocidad en WordPress Rendimiento y velocidad en WordPress
Rendimiento y velocidad en WordPress
 
Capistrano drupalcamp-jerez-2015
Capistrano drupalcamp-jerez-2015Capistrano drupalcamp-jerez-2015
Capistrano drupalcamp-jerez-2015
 
Escalabilidad de Websites
Escalabilidad de WebsitesEscalabilidad de Websites
Escalabilidad de Websites
 
Construcción de Aplicaciones de Avanzada con Geo-Distribución
Construcción de Aplicaciones de Avanzada con Geo-DistribuciónConstrucción de Aplicaciones de Avanzada con Geo-Distribución
Construcción de Aplicaciones de Avanzada con Geo-Distribución
 
SpringIO 2012 Madrid-Escalabilidad con Grails
SpringIO 2012 Madrid-Escalabilidad con GrailsSpringIO 2012 Madrid-Escalabilidad con Grails
SpringIO 2012 Madrid-Escalabilidad con Grails
 
Nuevas tecnologías de backup sm&c consultors
Nuevas tecnologías de backup   sm&c consultorsNuevas tecnologías de backup   sm&c consultors
Nuevas tecnologías de backup sm&c consultors
 
Desplegando Drupal con Capistrano
Desplegando Drupal con CapistranoDesplegando Drupal con Capistrano
Desplegando Drupal con Capistrano
 
Cómo volarle la peluca a tus usuarios con la velocidad de tu sitio?
Cómo volarle la peluca a tus usuarios con la velocidad de tu sitio?Cómo volarle la peluca a tus usuarios con la velocidad de tu sitio?
Cómo volarle la peluca a tus usuarios con la velocidad de tu sitio?
 
Grails, opción real y escalable para sitios web de alta carga
Grails, opción real y escalable para sitios web de alta cargaGrails, opción real y escalable para sitios web de alta carga
Grails, opción real y escalable para sitios web de alta carga
 
Herramientas para la medicion de desempeño PHPConMX 2012
Herramientas para la medicion de desempeño  PHPConMX 2012Herramientas para la medicion de desempeño  PHPConMX 2012
Herramientas para la medicion de desempeño PHPConMX 2012
 
Optimización de aplicaciones web con base de datos NoSQL In-Memory
Optimización de aplicaciones web con base de datos NoSQL In-MemoryOptimización de aplicaciones web con base de datos NoSQL In-Memory
Optimización de aplicaciones web con base de datos NoSQL In-Memory
 
3 miquel
3 miquel3 miquel
3 miquel
 
Presentación omega peripherals
Presentación omega peripheralsPresentación omega peripherals
Presentación omega peripherals
 
Rendimiento y velocidad, acelera tu sitio WordPress
Rendimiento y velocidad, acelera tu sitio WordPressRendimiento y velocidad, acelera tu sitio WordPress
Rendimiento y velocidad, acelera tu sitio WordPress
 
Node.js + Azure, o como mezclar agua con aceite
Node.js + Azure, o como mezclar agua con aceite Node.js + Azure, o como mezclar agua con aceite
Node.js + Azure, o como mezclar agua con aceite
 
¿Cómo mezclar agua con aceite? NodeJS + Azure
¿Cómo mezclar agua con aceite? NodeJS + Azure ¿Cómo mezclar agua con aceite? NodeJS + Azure
¿Cómo mezclar agua con aceite? NodeJS + Azure
 
Rails Against The Machine
Rails Against The MachineRails Against The Machine
Rails Against The Machine
 
Chicisimo
ChicisimoChicisimo
Chicisimo
 
DBA del Futuro (Un nuevo paradigma)
DBA del Futuro (Un nuevo paradigma)DBA del Futuro (Un nuevo paradigma)
DBA del Futuro (Un nuevo paradigma)
 

Mais de Edwin Cruz

Codigo Escalable WDT
Codigo Escalable WDTCodigo Escalable WDT
Codigo Escalable WDTEdwin Cruz
 
SGCE 2015 - eCommerce platforms
SGCE 2015 - eCommerce platformsSGCE 2015 - eCommerce platforms
SGCE 2015 - eCommerce platformsEdwin Cruz
 
Devops with ansible
Devops with ansibleDevops with ansible
Devops with ansibleEdwin Cruz
 
Containers in 5... 9 minutes
Containers in 5... 9 minutesContainers in 5... 9 minutes
Containers in 5... 9 minutesEdwin Cruz
 
Chilango Rails Ecommerce Lightning talk
Chilango Rails Ecommerce Lightning talkChilango Rails Ecommerce Lightning talk
Chilango Rails Ecommerce Lightning talkEdwin Cruz
 
Home made ceviche
Home made cevicheHome made ceviche
Home made cevicheEdwin Cruz
 
Api's and ember js
Api's and ember jsApi's and ember js
Api's and ember jsEdwin Cruz
 
FSL Vallarta, mejorando el rendimiento de las aplicaciones web
FSL Vallarta, mejorando el rendimiento de las aplicaciones webFSL Vallarta, mejorando el rendimiento de las aplicaciones web
FSL Vallarta, mejorando el rendimiento de las aplicaciones webEdwin Cruz
 
Presentacion Programador Apasionado
Presentacion Programador ApasionadoPresentacion Programador Apasionado
Presentacion Programador ApasionadoEdwin Cruz
 
MagmaRails - Passionate Programmer
MagmaRails - Passionate ProgrammerMagmaRails - Passionate Programmer
MagmaRails - Passionate ProgrammerEdwin Cruz
 
Presentacion programador apasionado
Presentacion programador apasionadoPresentacion programador apasionado
Presentacion programador apasionadoEdwin Cruz
 
Api development with rails
Api development with railsApi development with rails
Api development with railsEdwin Cruz
 

Mais de Edwin Cruz (12)

Codigo Escalable WDT
Codigo Escalable WDTCodigo Escalable WDT
Codigo Escalable WDT
 
SGCE 2015 - eCommerce platforms
SGCE 2015 - eCommerce platformsSGCE 2015 - eCommerce platforms
SGCE 2015 - eCommerce platforms
 
Devops with ansible
Devops with ansibleDevops with ansible
Devops with ansible
 
Containers in 5... 9 minutes
Containers in 5... 9 minutesContainers in 5... 9 minutes
Containers in 5... 9 minutes
 
Chilango Rails Ecommerce Lightning talk
Chilango Rails Ecommerce Lightning talkChilango Rails Ecommerce Lightning talk
Chilango Rails Ecommerce Lightning talk
 
Home made ceviche
Home made cevicheHome made ceviche
Home made ceviche
 
Api's and ember js
Api's and ember jsApi's and ember js
Api's and ember js
 
FSL Vallarta, mejorando el rendimiento de las aplicaciones web
FSL Vallarta, mejorando el rendimiento de las aplicaciones webFSL Vallarta, mejorando el rendimiento de las aplicaciones web
FSL Vallarta, mejorando el rendimiento de las aplicaciones web
 
Presentacion Programador Apasionado
Presentacion Programador ApasionadoPresentacion Programador Apasionado
Presentacion Programador Apasionado
 
MagmaRails - Passionate Programmer
MagmaRails - Passionate ProgrammerMagmaRails - Passionate Programmer
MagmaRails - Passionate Programmer
 
Presentacion programador apasionado
Presentacion programador apasionadoPresentacion programador apasionado
Presentacion programador apasionado
 
Api development with rails
Api development with railsApi development with rails
Api development with rails
 

Migrando Rails Apps entre Cloud y Bare Metal Servers

  • 1. Migrando Rails Apps entre Cloud y Bare Metal Servers Edwin Cruz Crowd Interactive, MagmaRails 2012
  • 2. El diario de un CTO/Techy Co-founder
  • 3. Dia 1 • Million dollar idea! • Investigación de mercado (alguienmásya lo hizo?)
  • 4. Dia 2 • Compraunacaja de bebidasenergizantes • Diseña el MVP
  • 5. Dia 3 • Empieza a codificar la aplicacion
  • 6. Dia 3-7 • Café • Café • Bebidaenergizante • Café • Dormir
  • 7. Dia 7-10 • Se tienealgoestable • Hora de buscar co-founder – Inversionistas al parecer le creenmas a un grupo de gente
  • 8. Dia 1, Co-Founder • Million dollar idea! • Investigación de mercado
  • 9. Dia 2 • Diseñasu MVP • Hacemásinvestigacion • Buscatechy co-founder
  • 12. Dia 6 • Drinkup – Lo encuentra!
  • 13. Dia 7 • Empiezan a trabajar
  • 14. Dia>10 • Tienen un productoestable – MVP We <3 ruby on rails
  • 15. Primer Paso • Hosting para la app – Heroku • $ herokuapps:createmillion_dollar_stage • $ herokuapps:info | grep 'Git URL' • $ git remote add heroku GIT_URL • $ git push heroku master • $ heroku run db:migrate – Engine Yard • Click, copy, paste, click • ey deploy….. Deploy!
  • 16. Como hacer un deployment? • git push heroku master • Click Deploy, ey deploy
  • 17. Dia>20 • Usuariosreales – Picos de latencia • Primer outage – Instanciaspequeñas – Base de datoscompartida
  • 18. Asique… • Recap – Ya no tienesjefesdiciendoquelasnuevastecnologias no son lo suficientemente ‘estable’ parausarla • Cutting edge technologies – Muyprometedoras – Pocadocumentación – Developer felices
  • 19. Sobrecarga de trabajo • Contratación de nuevos developers • Empiezadesarrollo de features en paralelo
  • 20. Siguenllegandomásusuarios! • Production database • CDN • Más app servers • Pusher • La million dollar idea estodo un exito!
  • 21. Trabajando en conjunto • Mas killer features • Third party services • Performance issues • NewRelicProfesional – Redisparasesiones – Memcached fragment cache
  • 22. Nuevas feature • Share with your friends! – Mastráfico – Base de datos, el nuevocuello de botella – Dobletea la capacidad! • Actualizaciones en tiempo real – Estanmatando los app servers! – Migrar a app servers diseñadosparasoportar forking
  • 23. Nuevas features • Background processing – Resque al rescate! • Phew, ya se teniaredis – Mismosrecursos • Mejoresestrategias de cache yexpiración • Todobajo control.
  • 24. Noticias del CEO • Nuestraaplicacionva a ser promocionada en un canal de television a nivelnacional!! – OMG, a correr! – Pronostico: 3x trafico del picomás alto a la vez • Triplicar la capacidad? • Click, click, click…. Listo – Al final de més, “quequuueee, yestafactura?” – En pocotiempoya se estanusandoesosrecursos
  • 25. Noticias del CEO • Necesitamos uptime de 99.997 – Deployment transparentes – Mascapacidad – Staging environments
  • 26. Deuda de Ingenieria • Muchos ‘add ons’ • Facturaciónva en aumento • Ambientes de staging ‘iguales’ queproduccion – QA • Sincronizacion de datosdesdeproducción – Base de datos – Imagenes – Usuarios, actualizar emails con ficticios • Etc. == $$$$$$
  • 27. Deployment desde cero • Rails stack – Web server – Balancer/proxy – App servers – Database server – Fulltext search engine – Cache – Deployment scripts – Bootstrapingnuevosservidores
  • 28. Arquitectura nginx haproxy Unicorn Unicorn Unicorn fork fork fork fork fork fork fork fork fork db
  • 29. Antes que nada • Quees un gem • Quees bundler • Nuestro amigo el Gemfile • Capistrano • Chef • RVM • Rbenv
  • 34. Dejandorastros – Rails side • Reemplazar Rails Logger – Una sola linea, se hace ‘grepable’ • Enmascarardatossensitivos – Rails.config.filter_parameters+= [:card_number, :cvv]
  • 35. Problemascomúnes • RepositoriosPrivados – Crearcuentacompartiday registrar llaves de los servidores • Firewalls – bundle pack • Gems paradesarrollo con dependenciasespeciales – bundle install –without development test
  • 36. Capistrano • Herramientaparahacer de maneraconsistente, repetitivaygarantizada, de ployments de aplicaciones. • Scripts (recipes) – Ejecutan commandos de maneraremota via ssh
  • 37. Capistrano $ capify . [add] writing './Capfile' [add] making directory './config' [add] writing './config/deploy.rb' [done] capified!
  • 41. Capistrano(deploy.rb) current_path current_release shared_path
  • 43. Capistrano • Como desarrollarfacilmente? – Vagrant – Chef-solo
  • 45. Migrando una app de servidores físicos a una nube privada con ~15 mins de downtime
  • 46. EventosPrincipales • 8 Meses antes – Se empezó a experimentar con Joyent smart machines – Complian con los SLA(Service Level Agreement)internos • No eraninstanciasvirtuales • Son delimitadasporzonas • No son ambientesvirtuales • Rentaera mensualfijay no porusage • SmartOS(solaris)
  • 47. EventosPrincipales • 6 Mesesantes – Environments de demo se instalaron • Todo en una sola instancia – Nginx, mysql, RoR app – JoyentproveiaPercona Smart Machines • Joyenttrabajo con Perconaparacompilar lo masoptimizado los binarios • La aplicacion se migró a percona 5.1 de mysql 5.0.56
  • 48. EventosPrincipales • 4 Meses antes – Ambiente de Staging en Joyent • Se diseñoparadespues ser promovidocomo elnuevo cluster de produccion • 2 clusters – 1 balanceador – 8 app servers • Percona smart machine – 1 Master – 2 replicas – Se compro un nuevodominio
  • 49. EventosPrincipales • 3 meses antes • Los Sysadmins se empezaron a quedarcalvos – El ataque de ImageMagick!!! – Se usabangemasespecificasparalinux • Leianmac addresses, en zonas, no se tieneacceso a lasmac address desde un solaris • UUID generator estabaroto, lassesionescolisionaban
  • 50. EventosPrincipales • 2 Meses antes – Incertidumbrepor el rendimiento • Se hizo un stress performance muydetallado • Httperf, ab, loadrunner • Se optimizaronconfiguraciones – HAProxy, queue time yestrategia de balanceo, last connection vs round robin – Nginx, se recompiloparausarotrodirectorio temporal – MySQL, innodb buffer size al 70% de memoriayarchivoportabla
  • 51. EventosPrincipales • 1.5 meses antes – Si! Si lo hacemos…. ( comprandomisboletos a San Francisco, uno con el viaje normal yotro con regreso al diasiguiente ) – Trabajoexaustivo con capistrano, debiasoportarhacer deployment a dos ambientes
  • 52. EventosPrincipales • 1 Mes antes – Se configuró la replica mysql multi-site • El slave en joyent se promoveriacomo el master el dia del movimiento • En promedio 17 minutosatras del master – En vez de usar el cluster de stage comoproducción, se contrataronunoslimpios, se corrieronlasrecipies de chef ycapistrano • ImageMagick again!!! grrrrrr
  • 53. EventosPrincipales • 2 Semanas antes – Planeodetalladominutoporminuto lo quepasaria • QA Pidio 2 hrs paravalidacion, wait what!??? – Miercoles 11pm empezariatodo
  • 54. EventosPrincipales • 1 Semana antes – Se saco un respaldocompleto de producciony se cargo en la replica en joyent • Replicacion multi-site trabajandobien – Reglas del nginx • Reroute, entre clusters • Down page, pagina de mantenimiento • Redirect, redireccion multi-site – DNS TTL al minimo – Jueves 12 am pagina de mantenimiento…. pagina de que? • No teniamospaginas de mantenimiento!!!! (alguiengritandole a los diseñadores)
  • 55. EventosPrincipales • 2 dias antes (Lunes) – Oh no!!! No teniamostareas de capistranoparaactivarlasreglas del nginx – Se puso la pagina de mantenimientoque los diseñadoreshicieron – Todobajo control, a descansar
  • 56. EventosPrincipales • 1 diaantes(Martes) – SysadminsyDevOpsdescansando, dia off
  • 57. EventosPrincipales • El Dia de la migracion – SysadminsyDevOpsllegando a la oficina ~5pm – Ultimo dump de produccion se carga en la replica • Oh ho!, la vpnextremadamentelenta, 8pm ydecia 14000 seconds behind master, shit! • Se hizo un tunelsshpor la interface externa (viajandopor internet), en 14 minutos se sincronizo • Todolisto
  • 58. EventosPrincipales • Despues de 11pm – Se empezotardepor la replica lenta • Pagina de mantenimiento • Esperarbackgrond jobs terminaran • Apagartodos los app servers • Esperar la replicaterminara de sincronizar master y se promoviocomomaster • Arrancar la aplicacion en joyent con el nuevo master – Todoestonostomo 7 minutos!
  • 59. EventosPrincipales • Validando la aplicacion – QA validopor un dominio especial – 8minutosdespues, dio sign off – Seactivaronlasredirecciones en nginx multi-site – Se cambio el dns – A rellenar la cafetera! – 2 minutosdespues, callo la primeraorden,Fiuuufff!!!!!
  • 60. EventosPrincipales • 3 hrs despues de la migracion – ImageMagick issues!! • Crap! Algunasimagenes se servianpor PNG, eImageMagick no fuecompilado con soporte PNG, a recompilartodos los clusters – Se prendieronserviciosexternos – Se levantootrareplicacionmuti-site de joyent a rackspace – Se arrancanaplicacionesinternas
  • 61. EventosPrincipales • 8am diasiguiente – Ya se puedenir a dormir – En el camino • Riiiing! “El distribution center no recibeordenes!” • Problemas de replicacion de dns, no se hizoreplicacion multisite paraaplicacionesinternas, se harcodeo la nueva IP en /etc/hosts, solved… – A Dormir
  • 62. Eventosprincipales • Despues de la migracion – Performance issues • Base de datos 5x maslenta, nadiesabiaporque – Servidormasgrande – Filesystem mucho muytuneado – Al final, despues de 2 semanas, se encontro el problema: binarioscompilados con gcc 3.x, great! |-( • Ruby poor performance, no tomabalas environment variables del REE paratunear el garbage collector • El directoriotmp se hizomasgrande
  • 63. EventosPrincipales • Al final: – 20 ms mas lento que en rackspace – 60% menos de facturacion – Podemoscrecer on demand – Sobrevivimosunaventa con un pico de 21k rpm,350 clicks porsegundo!!!!
  • 64. Tiempo para preguntas? Gracias! Edwin Cruz @softr8

Notas do Editor

  1. Soy el principal software engineer en Cowd Interactive, teoricamentetodopasasobre mi
  2. Antes que nada quieroplaticarunapequeñaplatica de comouna startup podriaircreciendodesde la nada hastatenermuchos, muchosusuarios
  3. Se teoicurre la million dolar idea, va a revolucionar el mundo, va a pegar….
  4. Unacaja de bebidasenergizantes, yempiezaas a diseñar el mvp
  5. Ya no tienesjefesquetediganquelastecnologias no son establestodavia, que no son compatibles, etc, etc, etcEmpizas a meter cutting edge technologies
  6. A la par, vas a buscar a tu co founder
  7. Con cervezastodo se entiende, en un ambientemas relax todos se entienden
  8. Se tiene un produdctoestable, porsupuesto, comousaron ruby on rails, se lo aventaron super rapido!
  9. Primer outage, codigo no estabaoptimizadoy los procesos se matabandespues de ciertotiempoportantoprocesamiento
  10. Carece de buenadocumentacionY a dondenosllevatodoesto,
  11. Actualizaciones en tiempo real
  12. Migrar app servers de mono proceso a forkeado con multiples workers y se ahorramuchamemoria
  13. No se va a tolerarmas los outages
  14. Como configurarnuevosservidoresparaagregarlos
  15. En frenteservidor web, recibelaspeticionesyasapor https o normal
  16. Se hanpreguntadocomoponen la pagina de mantenimiento, sin reiniciar el web server ?
  17. Balanceador de packetes HTTP/TCP de alto rendimiento