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 | gre...
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• Cutt...
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 ex...
Trabajando en conjunto•   Mas killer features•   Third party services•   Performance issues•   NewRelicProfesional    – Re...
Nuevas feature• Share with your friends!  – Mastráfico  – Base de datos, el nuevocuello de botella  – Dobletea la capacida...
Nuevas features• Background processing  – Resque al rescate!     • Phew, ya se teniaredis  – Mismosrecursos• Mejoresestrat...
Noticias del CEO• Nuestraaplicacionva a ser promocionada en  un canal de television a nivelnacional!!  – OMG, a correr!  –...
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     • ...
Deployment desde cero• Rails stack  – Web server  – Balancer/proxy  – App servers  – Database server  – Fulltext search en...
Arquitectura                nginx                haproxyUnicorn         Unicorn      Unicorn  fork            fork        ...
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  – R...
Problemascomúnes• RepositoriosPrivados  – Crearcuentacompartiday registrar llaves de los    servidores• Firewalls  – bundl...
Capistrano• Herramientaparahacer de  maneraconsistente, repetitivaygarantizada, de  ployments de aplicaciones.• Scripts (r...
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 servidoresfí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...
EventosPrincipales• 6 Mesesantes  – Environments de demo se instalaron    • Todo en una sola instancia       – Nginx, mysq...
EventosPrincipales• 4 Meses antes  – Ambiente de Staging en Joyent     • Se diseñoparadespues ser promovidocomo elnuevo   ...
EventosPrincipales• 3 meses antes• Los Sysadmins se empezaron a quedarcalvos  – El ataque de ImageMagick!!!  – Se usabange...
EventosPrincipales• 2 Meses antes  – Incertidumbrepor el rendimiento     • Se hizo un stress performance muydetallado     ...
EventosPrincipales• 1.5 meses antes  – Si! Si lo hacemos…. ( comprandomisboletos a San    Francisco, uno con el viaje norm...
EventosPrincipales• 1 Mes antes  – Se configuró la replica mysql multi-site     • El slave en joyent se promoveriacomo el ...
EventosPrincipales• 2 Semanas antes  – Planeodetalladominutoporminuto lo quepasaria     • QA Pidio 2 hrs paravalidacion, w...
EventosPrincipales• 1 Semana antes  – Se saco un respaldocompleto de producciony se cargo en    la replica en joyent     •...
EventosPrincipales• 2 dias antes (Lunes)  – Oh no!!! No teniamostareas de    capistranoparaactivarlasreglas del nginx  – S...
EventosPrincipales• 1 diaantes(Martes)  – SysadminsyDevOpsdescansando, dia off
EventosPrincipales• El Dia de la migracion  – SysadminsyDevOpsllegando a la oficina ~5pm  – Ultimo dump de produccion se c...
EventosPrincipales• Despues de 11pm  – Se empezotardepor la replica lenta     • Pagina de mantenimiento     • Esperarbackg...
EventosPrincipales• Validando la aplicacion  – QA validopor un dominio especial  – 8minutosdespues, dio sign off  – Seacti...
EventosPrincipales• 3 hrs despues de la migracion  – ImageMagick issues!!     • Crap! Algunasimagenes se servianpor       ...
EventosPrincipales• 8am diasiguiente  – Ya se puedenir a dormir  – En el camino     • Riiiing! “El distribution center no ...
Eventosprincipales• Despues de la migracion  – Performance issues     • Base de datos 5x maslenta, nadiesabiaporque       ...
EventosPrincipales• Al final:   – 20 ms mas lento que en rackspace   – 60% menos de facturacion   – Podemoscrecer on deman...
Tiempo para preguntas?      Gracias!        Edwin Cruz        @softr8
Upcoming SlideShare
Loading in...5
×

Migrando Rails Apps entre Cloud y Bare Metal Servers

508

Published on

Platica dada en MagmaRails 2012, aqui comparto mis experiencias de migrar aplicaciones rails de bare metal servers a custom cloud, de PaaS a bare metal servers y todas las combinaciones. Cualquier pregunta twitter: softr8

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
508
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

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

    1. 1. Migrando Rails Apps entre Cloud y Bare Metal Servers Edwin Cruz Crowd Interactive, MagmaRails 2012
    2. 2. El diario de un CTO/Techy Co-founder
    3. 3. Dia 1• Million dollar idea!• Investigación de mercado (alguienmásya lo hizo?)
    4. 4. Dia 2• Compraunacaja de bebidasenergizantes• Diseña el MVP
    5. 5. Dia 3• Empieza a codificar la aplicacion
    6. 6. Dia 3-7• Café• Café• Bebidaenergizante• Café• Dormir
    7. 7. Dia 7-10• Se tienealgoestable• Hora de buscar co-founder – Inversionistas al parecer le creenmas a un grupo de gente
    8. 8. Dia 1, Co-Founder• Million dollar idea!• Investigación de mercado
    9. 9. Dia 2• Diseñasu MVP• Hacemásinvestigacion• Buscatechy co-founder
    10. 10. Dia 3• Meetup
    11. 11. Dia 4• Meetup
    12. 12. Dia 6• Drinkup – Lo encuentra!
    13. 13. Dia 7• Empiezan a trabajar
    14. 14. Dia>10• Tienen un productoestable – MVP We <3 ruby on rails
    15. 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. 16. Como hacer un deployment?• git push heroku master• Click Deploy, ey deploy
    17. 17. Dia>20• Usuariosreales – Picos de latencia• Primer outage – Instanciaspequeñas – Base de datoscompartida
    18. 18. Asique…• Recap – Ya no tienesjefesdiciendoquelasnuevastecnologias no son lo suficientemente ‘estable’ parausarla• Cutting edge technologies – Muyprometedoras – Pocadocumentación – Developer felices
    19. 19. Sobrecarga de trabajo• Contratación de nuevos developers• Empiezadesarrollo de features en paralelo
    20. 20. Siguenllegandomásusuarios!• Production database• CDN• Más app servers• Pusher• La million dollar idea estodo un exito!
    21. 21. Trabajando en conjunto• Mas killer features• Third party services• Performance issues• NewRelicProfesional – Redisparasesiones – Memcached fragment cache
    22. 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. 23. Nuevas features• Background processing – Resque al rescate! • Phew, ya se teniaredis – Mismosrecursos• Mejoresestrategias de cache yexpiración• Todobajo control.
    24. 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. 25. Noticias del CEO• Necesitamos uptime de 99.997 – Deployment transparentes – Mascapacidad – Staging environments
    26. 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. 27. Deployment desde cero• Rails stack – Web server – Balancer/proxy – App servers – Database server – Fulltext search engine – Cache – Deployment scripts – Bootstrapingnuevosservidores
    28. 28. Arquitectura nginx haproxyUnicorn Unicorn Unicorn fork fork fork fork fork fork fork fork fork db
    29. 29. Antes que nada• Quees un gem• Quees bundler• Nuestro amigo el Gemfile• Capistrano• Chef• RVM• Rbenv
    30. 30. Web Server
    31. 31. Dejandorastros - Nginx
    32. 32. haproxy
    33. 33. Deployments transparentes
    34. 34. Dejandorastros – Rails side• Reemplazar Rails Logger – Una sola linea, se hace ‘grepable’• Enmascarardatossensitivos – Rails.config.filter_parameters+= [:card_number, :cvv]
    35. 35. Problemascomúnes• RepositoriosPrivados – Crearcuentacompartiday registrar llaves de los servidores• Firewalls – bundle pack• Gems paradesarrollo con dependenciasespeciales – bundle install –without development test
    36. 36. Capistrano• Herramientaparahacer de maneraconsistente, repetitivaygarantizada, de ployments de aplicaciones.• Scripts (recipes) – Ejecutan commandos de maneraremota via ssh
    37. 37. Capistrano$ capify .[add] writing ./Capfile[add] making directory ./config[add] writing ./config/deploy.rb[done] capified!
    38. 38. Capistrano(deploy.rb)
    39. 39. Capistano(deploy.rb)
    40. 40. Capistrano(deploy.rb)
    41. 41. Capistrano(deploy.rb) current_path current_release shared_path
    42. 42. Capistrano(recipes)
    43. 43. Capistrano• Como desarrollarfacilmente? – Vagrant – Chef-solo
    44. 44. Vagrant
    45. 45. Migrando una app de servidoresfísicos a una nube privada con ~15 mins de downtime
    46. 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. 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. 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. 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. 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. 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. 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. 53. EventosPrincipales• 2 Semanas antes – Planeodetalladominutoporminuto lo quepasaria • QA Pidio 2 hrs paravalidacion, wait what!??? – Miercoles 11pm empezariatodo
    54. 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. 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. 56. EventosPrincipales• 1 diaantes(Martes) – SysadminsyDevOpsdescansando, dia off
    57. 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. 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. 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. 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. 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. 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. 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. 64. Tiempo para preguntas? Gracias! Edwin Cruz @softr8
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×