Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Você não está sozinho, vá pra produção com Elixir!

3bd87aae5ae18d655d5e673771781399?s=47 Igor Florian
September 23, 2016

Você não está sozinho, vá pra produção com Elixir!

3bd87aae5ae18d655d5e673771781399?s=128

Igor Florian

September 23, 2016
Tweet

More Decks by Igor Florian

Other Decks in Technology

Transcript

  1. Você não está sozinho, vá pra produção com Elixir!

  2. @igorffs @igorflorianfs

  3. None
  4. Deploy

  5. • Ferramentas • Dificuldades • Hot code swap

  6. None
  7. FERRAMENTAS

  8. None
  9. http://www.phoenixframework.org/docs/heroku

  10. Guia estruturado

  11. buildpacks consolidados

  12. https://github.com/HashNuke/heroku-buildpack-elixir

  13. https://github.com/gjaldon/heroku-buildpack-phoenix-static

  14. A opção ➕ rápida ⚡ ➕prática

  15. ➖Hot code swap

  16. E se eu quiser ter minha própria infra?

  17. Como o pessoal de Erlang faz deploy?

  18. Existe um Elixir way?

  19. Exrm 
 (Elixir Release Manager)

  20. http://www.phoenixframework.org/docs/advanced-deployment

  21. Wrapper de ferramentas do Erlang

  22. https://github.com/erlang/rebar3

  23. https://github.com/erlware/relx

  24. http://learnyousomeerlang.com/release-is-the-word

  25. Release ==

  26. None
  27. None
  28. é composto por

  29. None
  30. None
  31. Elixir e Erlang estão inclusos!

  32. pode ser independente

  33. Ou não! Você escolhe.

  34. None
  35. Tá, mas por que isso?

  36. Facilidade de distribuição

  37. Sem nos preocupar com a versão instalada

  38. None
  39. Então posso distribuir minha release pra qualquer lugar?

  40. Posso compilar no meu Windows e executar no meu servidor

    Linux!!
  41. Obrigado Elixir! ♥

  42. Né?!

  43. Maaaais ou menos… (segura essa emoção )

  44. Cross-compiling

  45. Releases estão presas à arquitetura e S.O

  46. NIFs (Native Implemented Functions)

  47. (snif)

  48. Comofas?

  49. None
  50. None
  51. None
  52. A release contém executáveis

  53. • start • stop • ping • console • remote_console

    • upgrade • downgrade
  54. Não existem Mix tasks

  55. Porque não existe um Mix file

  56. Mesmo com Ecto, não poderá executar migrations

  57. http://blog.plataformatec.com.br/2016/04/running-migration-in-an-exrm-release/

  58. Configurações ⚙ com variáveis de ambiente

  59. None
  60. Todo código é compilado durante o build da release

  61. Nos arquivos de configuração, funções são executadas

  62. Todas configurações são compiladas e adicionadas em sys.conf

  63. None
  64. None
  65. Pouco flexível e não é seguro

  66. https://12factor.net/config

  67. E agora José?!

  68. @renanranelli

  69. RELX on the rescue!

  70. None
  71. None
  72. RELX_REPLACE_OS_VARS=true

  73. As tags serão substituídas pelos valores das variáveis de ambiente

    na máquina que a release será executada
  74. None
  75. http://blog.plataformatec.com.br/2016/05/how-to-config-environment-variables-with-elixir-and-exrm/

  76. ( Distillery ⚗…

  77. https://github.com/bitwalker/distillery

  78. Substituindo Exrm

  79. http://bitwalker.org/posts/2016-07-21-distillery-vs-exrm-vs-relx/

  80. …)

  81. Isso tá parecendo manual

  82. Prefiro Capistrano!

  83. None
  84. https://github.com/boldpoker/edeliver

  85. Gerencia e automatiza o processo de deploy

  86. bash scripts orquestram os builds e RPCs aos servidores

  87. Exrm por baixo dos panos

  88. ou mix + relx

  89. ou rebar (erlang only)

  90. ou Distillery

  91. Quanta coisa, né?

  92. Não se preocupe, edeliver abstrai as ferramentas utilizadas

  93. Deploy em ambientes de staging e production

  94. Você escolhe onde fazer o build da release

  95. Resolve problema de Cross-compiling

  96. Local Build Staging Production

  97. None
  98. None
  99. None
  100. None
  101. None
  102. None
  103. None
  104. http://blog.plataformatec.com.br/2016/06/deploying-elixir-applications-with-edeliver/

  105. Afinal, o que eu uso em produção?

  106. edeliver !

  107. Mas não deixe de conhecer as ferramentas que está usando

  108. Ht code l♥ving

  109. ZERO DOWNTIME

  110. Não é a única forma

  111. Show me the code!!

  112. GenServer

  113. None
  114. None
  115. None
  116. v0.1.0

  117. None
  118. v0.2.0

  119. None
  120. None
  121. None
  122. None
  123. None
  124. O que tá acontecendo?

  125. Code server

  126. Mantém 2 versões do código

  127. Código antigo é executado por processos antigos <

  128. Código novo é executado por processos novos =

  129. http://learnyousomeerlang.com/designing-a-concurrent-application#hot-code-loving

  130. http://erlang.org/doc/man/code.html

  131. Isso parece ser bem simples!

  132. None
  133. Mudança de estado

  134. None
  135. None
  136. None
  137. None
  138. None
  139. None
  140. O código precisa saber como reagir

  141. None
  142. None
  143. Feels like migration

  144. Appups

  145. None
  146. http://learnyousomeerlang.com/relups

  147. É dificil!

  148. Quando usar?

  149. Stateful apps, que não podem parar

  150. Trade-offs @

  151. Comunidade❤

  152. Obrigado! B