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
Alta disponibilidade para você

          Leandro Silva
           Thadeu Russo



      Caelum Tech Day 2009
Mais uma linguagem
 de programação?!
Hammm...
Histórico
Década de 80 - Estocolmo - Suécia

Ericsson precisava criar sistemas de
telecom para ‘próxima’ geração
Eu quero alta:
  - disponibilidade;
   - escalabilidade;
   - confiabilidade.

E milhares de processos
     concorrentes!
C/C++,
             ML,
 Ada?     Smalltalk?
Prolog?
Problemas comuns no
universo da concorrência:
     shared memory
     lock & deadlock
       no hot swap
Por que não uma
 linguagem pra
    Ericsson?
É...
Erlang
Principais características de Erlang
 Funcional (high-level functions, list comprehension, loop by
 recursion, tail recurs...
Ops! Só um
minutinho...
Da para programar
  com variáveis
  imutáveis?
Exemplo: Somatório


função




              avaliação
Mas e a concorrência,
   onde foi parar?
Exemplo: Somador ‘Distribuído’




                somador




  cliente
Exemplo: Somador ‘Distribuído’
Exemplo: Somador ‘Distribuído’




                    ProcessoServidor
Exemplo: Somador ‘Distribuído’




ProcessoCliente      ProcessoServidor
Exemplo: Somador ‘Distribuído’



             {self(), {soma, [1, 2, 3, 4, 5]}}




ProcessoCliente                      ...
Exemplo: Somador ‘Distribuído’



             {self(), {soma, [1, 2, 3, 4, 5]}}



                      {resultado, 15}
...
“Nada está tão bom que não possa melhorar.”
Open Telecom
  Platform
Telecom?
Não deixe o ‘T’
te enganar!
O que é a OTP
    então?
É análogo ao
                          Java EE!
Uma plataforma,

Com princípios de design,

Componente reuzáveis

E biblio...
Princípios de Design


                                         Processos
Aplicações        Supervisores
                 ...
Aplicações
Podem ser compostas por N outras

            CaelumWeb

         Mochiweb        Mnesia
          Inets          Crypto

...
Seguem uma estrutura de diretórios

                          dependências
                           específicas
    arqui...
Possuem releases versionados




$erlang_home

                    1. estrutura de aplicação
                       2. ver...
Supervisores
Formam uma árvore

 Mnesia                      CaelumWeb                      Processo
                                  ...
São responsáveis por ‘restarts’



                Supervisor                                      Supervisor




   Proce...
Processos
‘trabalhadores’
São quaisquer processos que não
sejam supervisores em uma árvores
          de supervisão
                                ...
E finalmente...
Os tais ‘behaviors’
Definem comportamentos padrão




application - comportamento comum para aplicação OTP

supervisor - comportamento comum p...
Implementam design patterns frequentes




 gen_server - comportamento genérico para client/server

 gen_fsm - comportamen...
Como?
Através de módulos de...
Quer ver alguns
   exemplos?
Vai ficar pra
 próxima! :)
Mas...
Há um kickoff fácil
     para a OTP


 http://github.com/leandrosilva/otp_kickoff
Erlang/OTP - Caelum Tech Day 2009
Upcoming SlideShare
Loading in …5
×

Erlang/OTP - Caelum Tech Day 2009

1,987 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

×