Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

QCON SP 2016 - Elixir: Tolerância a Falhas para Adultos

2,312 views

Published on

Elixir é uma das novas linguagens que está despontando principalmente pela reputação de capacidade de altíssima concorrência e paralelismo que sua VM permite. Mas o principal elemento é que Erlang e por consequência, Elixir, é uma das poucas linguagens criadas assumindo que vamos cometer erros. Ele garante alta disponibilidade nos dando primitivas que permitam que nosso software continue funcionando, mesmo que às vezes ele falhe. E agora vamos ver como Erlang faz isso como Elixir expõe esse potencial a todos nós.

Published in: Technology

QCON SP 2016 - Elixir: Tolerância a Falhas para Adultos

  1. 1. ELIXIRTolerância a Falhas para Adultos @akitaonrails
  2. 2. ELIXIRTolerância a Falhas para Adultos @akitaonrails
  3. 3. @akitaonrails
  4. 4. FIM DA LEI DE MOORE
  5. 5. THREADS! (NÃO USE)
  6. 6. THREADS! (NÃO USE)
  7. 7. EVENTOS! (NÃO USE)
  8. 8. EVENTOS! (NÃO USE)
  9. 9. BAIXA LATÊNCIA
  10. 10. CO-ROTINAS (SUBROTINAS, FIBRAS)
  11. 11. CASOS REAIS
  12. 12. “Since cut-over of the first nodes in British Telecom's network in January 2002 only one minor fault has occurred, resulting in 99.9999999% availability.” “The network performance has been so reliable that there is almost a risk that our field engineers do not learn maintenance skills.” Bernt Nilsson - director of Ericsson’s Next Generation Systems program
  13. 13. BÁSICO …
  14. 14. PEER-TO-PEER NETWORKING
  15. 15. [a, b, c] = [a, 2, 3] {:ok, message} = {:ok, “world"} {:ok, [hello: message]} = {:ok, [hello: “world”]} [hello: message, world: message2] #=> [{:hello, message}, {:world, message2}]
  16. 16. [a, b, c] = [a, 2, 3] {:ok, message} = {:ok, “world"} {:ok, [hello: message]} = {:ok, [hello: “world”]} [hello: message, world: message2] #=> [{:hello, message}, {:world, message2}]
  17. 17. [a, b, c] = [a, 2, 3] {:ok, message} = {:ok, “world"} {:ok, [hello: message]} = {:ok, [hello: “world”]} [hello: message, world: message2] #=> [{:hello, message}, {:world, message2}]
  18. 18. [a, b, c] = [a, 2, 3] {:ok, message} = {:ok, “world"} {:ok, [hello: message]} = {:ok, [hello: “world”]} [hello: message, world: message2] #=> [{:hello, message}, {:world, message2}]
  19. 19. PATTERN MATCHING
  20. 20. CALL BY PATTERN
  21. 21. Spawn, Send, Receive
  22. 22. "PID" (Process ID)
  23. 23. PROCESSOS (GREEN THREADS)
  24. 24. List/Kill
  25. 25. ASYNCHRONOUS EXCEPTIONS
  26. 26. ASYNCHRONOUS EXCEPTIONS
  27. 27. Link, Flag
  28. 28. ACTORS!
  29. 29. GenServer
  30. 30. [h, t] = [1, 2, 3] #=> h = 1, t = [2,3] Process.list |> Enum.reverse #=> Enum.reverse(Process.list())
  31. 31. [h, t] = [1, 2, 3] #=> h = 1, t = [2,3] Process.list |> Enum.reverse #=> Enum.reverse(Process.list())
  32. 32. SUPERVISOR TREE (supervisor - supervisees/workers)
  33. 33. OTP (Open Telecom Platform)
  34. 34. MICRO “YOCTO” SERVICES (Micro > Nano > Pico > Femto > Atto > Zepto > Yocto)
  35. 35. MICRO “YOCTO” SERVICES (Micro > Nano > Pico > Femto > Atto > Zepto > Yocto)
  36. 36. MICRO “YOCTO” SERVICES (Micro > Nano > Pico > Femto > Atto > Zepto > Yocto)
  37. 37. • Keywords, Maps, Comprehensions
  38. 38. • Keywords, Maps, Comprehensions • Documentação testável/executável
  39. 39. • Keywords, Maps, Comprehensions • Documentação testável/executável • TypeSpecs, Behaviors
  40. 40. • Keywords, Maps, Comprehensions • Documentação testável/executável • TypeSpecs, Behaviors • Agents, Tasks, GenEvent
  41. 41. • Keywords, Maps, Comprehensions • Documentação testável/executável • TypeSpecs, Behaviors • Agents, Tasks, GenEvent • Macros, Sigils
  42. 42. • Keywords, Maps, Comprehensions • Documentação testável/executável • TypeSpecs, Behaviors • Agents, Tasks, GenEvent • Macros, Sigils • Armazenamento: ETS, DETS, Mnesia
  43. 43. Javascript - shared mutable global state Blocking Event Loop Rust - Low Level Async in progress No coroutines Go Suture (OTP Clone) goroutines sem ID shared mutable state static signatures Scala Akka (OTP Clone) shared mutable state static signatures Clojure Pulsar / Quasar Almost Erlang-like Process JVM limitations
  44. 44. “quase” …
  45. 45. Erlang: PRONTO! (30 anos)
  46. 46. APRENDENDO
  47. 47. OBRIGADO! www.akitaonrails.com/elixir @akitaonrails
  48. 48. OBRIGADO! www.akitaonrails.com/elixir @akitaonrails

×