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.

Erlang/OTP - Caelum Tech Day 2009

1,992 views

Published on

Uma muito breve introdução a Erlang e à sua Open Telecom Platform, apresentada no Caelum Tech Day 2009.

Published in: Technology
  • Ver esse tipo de material aparecendo aqui (Brasil) traz bastante esperança no quesito novidade e soluções não triviais.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Erlang/OTP - Caelum Tech Day 2009

  1. 1. Erlang/OTP Alta disponibilidade para você Leandro Silva Thadeu Russo Caelum Tech Day 2009
  2. 2. Mais uma linguagem de programação?!
  3. 3. Hammm...
  4. 4. Histórico Década de 80 - Estocolmo - Suécia Ericsson precisava criar sistemas de telecom para ‘próxima’ geração
  5. 5. Eu quero alta: - disponibilidade; - escalabilidade; - confiabilidade. E milhares de processos concorrentes!
  6. 6. C/C++, ML, Ada? Smalltalk? Prolog?
  7. 7. Problemas comuns no universo da concorrência: shared memory lock & deadlock no hot swap
  8. 8. Por que não uma linguagem pra Ericsson?
  9. 9. É...
  10. 10. Erlang
  11. 11. Principais características de Erlang Funcional (high-level functions, list comprehension, loop by recursion, tail recursion) Concorrência baseada em troca de mensagens entre micro- processos ultra-leves (tem até um tipo de dado Pid) Pattern-matching (quase onipresente) Single-assignment variables (aka ‘variáveis imutáveis’) Runtime gerenciado (sim, uma ‘vm’) Sistema de tipos simples Pensando em Java, todas as ‘variáveis’ são final! Se não há o que alterar, não há concorrência!
  12. 12. Ops! Só um minutinho...
  13. 13. Da para programar com variáveis imutáveis?
  14. 14. Exemplo: Somatório função avaliação
  15. 15. Mas e a concorrência, onde foi parar?
  16. 16. Exemplo: Somador ‘Distribuído’ somador cliente
  17. 17. Exemplo: Somador ‘Distribuído’
  18. 18. Exemplo: Somador ‘Distribuído’ ProcessoServidor
  19. 19. Exemplo: Somador ‘Distribuído’ ProcessoCliente ProcessoServidor
  20. 20. Exemplo: Somador ‘Distribuído’ {self(), {soma, [1, 2, 3, 4, 5]}} ProcessoCliente ProcessoServidor
  21. 21. Exemplo: Somador ‘Distribuído’ {self(), {soma, [1, 2, 3, 4, 5]}} {resultado, 15} ProcessoCliente ProcessoServidor
  22. 22. “Nada está tão bom que não possa melhorar.”
  23. 23. Open Telecom Platform
  24. 24. Telecom?
  25. 25. Não deixe o ‘T’ te enganar!
  26. 26. O que é a OTP então?
  27. 27. É análogo ao Java EE! Uma plataforma, Com princípios de design, Componente reuzáveis E bibliotecas uteis
  28. 28. Princípios de Design Processos Aplicações Supervisores ‘trabalhadores’ Comportamentos padrões
  29. 29. Aplicações
  30. 30. Podem ser compostas por N outras CaelumWeb Mochiweb Mnesia Inets Crypto CaelumCore StdLib Kernel
  31. 31. Seguem uma estrutura de diretórios dependências específicas arquivos privados código compilado código fonte
  32. 32. Possuem releases versionados $erlang_home 1. estrutura de aplicação 2. versão do release
  33. 33. Supervisores
  34. 34. Formam uma árvore Mnesia CaelumWeb Processo ‘Trabalhador’ N CaelumWeb CaelumWeb Mochiweb ‘Top Level’ Server `Trabalhador’ Supervisor Processo Processo Inet ‘trabalhador’ ‘Trabalhador’ 1 2
  35. 35. São responsáveis por ‘restarts’ Supervisor Supervisor Processo ‘trabalhador’ 1 X Processo ‘Trabalhador’ 2 Processo ‘Trabalhador’ N X X X Processo ‘trabalhador’ 1 Processo ‘Trabalhador’ 2 Processo ‘Trabalhador’ N estratégia one_for_one estratégia one_for_all
  36. 36. Processos ‘trabalhadores’
  37. 37. São quaisquer processos que não sejam supervisores em uma árvores de supervisão Supervisor N CaelumWeb CaelumWeb ‘Top Level’ Server `Trabalhador’ Supervisor Processo ‘Trabalhador’ N Processo Processo ‘trabalhador’ ‘Trabalhador’ 1 2
  38. 38. E finalmente...
  39. 39. Os tais ‘behaviors’
  40. 40. Definem comportamentos padrão application - comportamento comum para aplicação OTP supervisor - comportamento comum para processo supervisor
  41. 41. Implementam design patterns frequentes gen_server - comportamento genérico para client/server gen_fsm - comportamente genérico para máquina de estado finita gen_event - comportamento genérico para lidar com eventos
  42. 42. Como?
  43. 43. Através de módulos de...
  44. 44. Quer ver alguns exemplos?
  45. 45. Vai ficar pra próxima! :)
  46. 46. Mas...
  47. 47. Há um kickoff fácil para a OTP http://github.com/leandrosilva/otp_kickoff

×