SlideShare une entreprise Scribd logo
1  sur  48
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 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!
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                          ProcessoServidor
Exemplo: Somador ‘Distribuído’



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



                      {resultado, 15}


ProcessoCliente                          ProcessoServidor
“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 bibliotecas uteis
Princípios de Design


                                         Processos
Aplicações        Supervisores
                                      ‘trabalhadores’




             Comportamentos padrões
Aplicações
Podem ser compostas por N outras

            CaelumWeb

         Mochiweb        Mnesia
          Inets          Crypto

            CaelumCore

              StdLib

              Kernel
Seguem uma estrutura de diretórios

                          dependências
                           específicas
    arquivos
    privados




                             código
                           compilado




  código fonte
Possuem releases versionados




$erlang_home

                    1. estrutura de aplicação
                       2. versão do release
Supervisores
Formam uma árvore

 Mnesia                      CaelumWeb                      Processo
                                                         ‘Trabalhador’
                                                               N




               CaelumWeb                  CaelumWeb
Mochiweb       ‘Top Level’                  Server
                                         `Trabalhador’
               Supervisor




                                  Processo                  Processo
  Inet                         ‘trabalhador’             ‘Trabalhador’
                                      1                        2
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
Processos
‘trabalhadores’
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
E finalmente...
Os tais ‘behaviors’
Definem comportamentos padrão




application - comportamento comum para aplicação OTP

supervisor - comportamento comum para processo supervisor
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
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: Uma linguagem funcional para alta disponibilidade e escalabilidade

Contenu connexe

Similaire à Erlang/OTP: Uma linguagem funcional para alta disponibilidade e escalabilidade

Planejamento do processo_de_software_halan
Planejamento do processo_de_software_halanPlanejamento do processo_de_software_halan
Planejamento do processo_de_software_halanHalan Ridolphi
 
Linux - Inicialização e Gerenciamento de Processos
Linux - Inicialização e Gerenciamento de ProcessosLinux - Inicialização e Gerenciamento de Processos
Linux - Inicialização e Gerenciamento de ProcessosFrederico Madeira
 
Desenvolvimento em .Net - Testes Unitários
Desenvolvimento em .Net - Testes UnitáriosDesenvolvimento em .Net - Testes Unitários
Desenvolvimento em .Net - Testes UnitáriosVitor Silva
 
Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes. Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes. Tchelinux
 
Por que automatizar testes de software?
Por que automatizar testes de software?Por que automatizar testes de software?
Por que automatizar testes de software?Samuel Lourenço
 
ALM - Testes Manuais no Microsoft Test Manager
ALM - Testes Manuais no Microsoft Test ManagerALM - Testes Manuais no Microsoft Test Manager
ALM - Testes Manuais no Microsoft Test ManagerAlan Carlos
 
PLP – Paradigma de Programação Orientado a Modelos
PLP – Paradigma de Programação Orientado a ModelosPLP – Paradigma de Programação Orientado a Modelos
PLP – Paradigma de Programação Orientado a Modeloselliando dias
 
Estabilidade Básica - Conf Lean Management 2009 (Pt)
Estabilidade Básica - Conf Lean Management 2009 (Pt)Estabilidade Básica - Conf Lean Management 2009 (Pt)
Estabilidade Básica - Conf Lean Management 2009 (Pt)Luis Fernandes
 
Pregel: Um Sistema de Processamento de Grafos em Larga-Escala
Pregel: Um Sistema de Processamento de Grafos em Larga-EscalaPregel: Um Sistema de Processamento de Grafos em Larga-Escala
Pregel: Um Sistema de Processamento de Grafos em Larga-EscalaBruno Cunha
 
apresentacao_TDC_POA_Raphael_Mantilha.pdf
apresentacao_TDC_POA_Raphael_Mantilha.pdfapresentacao_TDC_POA_Raphael_Mantilha.pdf
apresentacao_TDC_POA_Raphael_Mantilha.pdfRaphael Mantilha
 
Qualidade de software com Visual Studio ALM
Qualidade de software com Visual Studio ALMQualidade de software com Visual Studio ALM
Qualidade de software com Visual Studio ALMAdriano Bertucci
 

Similaire à Erlang/OTP: Uma linguagem funcional para alta disponibilidade e escalabilidade (11)

Planejamento do processo_de_software_halan
Planejamento do processo_de_software_halanPlanejamento do processo_de_software_halan
Planejamento do processo_de_software_halan
 
Linux - Inicialização e Gerenciamento de Processos
Linux - Inicialização e Gerenciamento de ProcessosLinux - Inicialização e Gerenciamento de Processos
Linux - Inicialização e Gerenciamento de Processos
 
Desenvolvimento em .Net - Testes Unitários
Desenvolvimento em .Net - Testes UnitáriosDesenvolvimento em .Net - Testes Unitários
Desenvolvimento em .Net - Testes Unitários
 
Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes. Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes.
 
Por que automatizar testes de software?
Por que automatizar testes de software?Por que automatizar testes de software?
Por que automatizar testes de software?
 
ALM - Testes Manuais no Microsoft Test Manager
ALM - Testes Manuais no Microsoft Test ManagerALM - Testes Manuais no Microsoft Test Manager
ALM - Testes Manuais no Microsoft Test Manager
 
PLP – Paradigma de Programação Orientado a Modelos
PLP – Paradigma de Programação Orientado a ModelosPLP – Paradigma de Programação Orientado a Modelos
PLP – Paradigma de Programação Orientado a Modelos
 
Estabilidade Básica - Conf Lean Management 2009 (Pt)
Estabilidade Básica - Conf Lean Management 2009 (Pt)Estabilidade Básica - Conf Lean Management 2009 (Pt)
Estabilidade Básica - Conf Lean Management 2009 (Pt)
 
Pregel: Um Sistema de Processamento de Grafos em Larga-Escala
Pregel: Um Sistema de Processamento de Grafos em Larga-EscalaPregel: Um Sistema de Processamento de Grafos em Larga-Escala
Pregel: Um Sistema de Processamento de Grafos em Larga-Escala
 
apresentacao_TDC_POA_Raphael_Mantilha.pdf
apresentacao_TDC_POA_Raphael_Mantilha.pdfapresentacao_TDC_POA_Raphael_Mantilha.pdf
apresentacao_TDC_POA_Raphael_Mantilha.pdf
 
Qualidade de software com Visual Studio ALM
Qualidade de software com Visual Studio ALMQualidade de software com Visual Studio ALM
Qualidade de software com Visual Studio ALM
 

Plus de Leandro Silva

Arquitetura de Software 101
Arquitetura de Software 101Arquitetura de Software 101
Arquitetura de Software 101Leandro Silva
 
Async/Await Pattern in C#
Async/Await Pattern in C#Async/Await Pattern in C#
Async/Await Pattern in C#Leandro Silva
 
Uma breve introdução ao Terraform
Uma breve introdução ao TerraformUma breve introdução ao Terraform
Uma breve introdução ao TerraformLeandro Silva
 
SRE - Esperança não é uma estratégia
SRE - Esperança não é uma estratégiaSRE - Esperança não é uma estratégia
SRE - Esperança não é uma estratégiaLeandro Silva
 
Composição e Integração de Sistemas em 2013
Composição e Integração de Sistemas em 2013Composição e Integração de Sistemas em 2013
Composição e Integração de Sistemas em 2013Leandro Silva
 
Sistemas para o Mundo Real - TDC 2012
Sistemas para o Mundo Real - TDC 2012Sistemas para o Mundo Real - TDC 2012
Sistemas para o Mundo Real - TDC 2012Leandro Silva
 
Sistemas para o Mundo Real
Sistemas para o Mundo RealSistemas para o Mundo Real
Sistemas para o Mundo RealLeandro Silva
 
Gerenciando times autogerenciáveis
Gerenciando times autogerenciáveisGerenciando times autogerenciáveis
Gerenciando times autogerenciáveisLeandro Silva
 
Como vi Scrum ser rechaçado em uma grande empresa
Como vi Scrum ser rechaçado em uma grande empresaComo vi Scrum ser rechaçado em uma grande empresa
Como vi Scrum ser rechaçado em uma grande empresaLeandro Silva
 

Plus de Leandro Silva (9)

Arquitetura de Software 101
Arquitetura de Software 101Arquitetura de Software 101
Arquitetura de Software 101
 
Async/Await Pattern in C#
Async/Await Pattern in C#Async/Await Pattern in C#
Async/Await Pattern in C#
 
Uma breve introdução ao Terraform
Uma breve introdução ao TerraformUma breve introdução ao Terraform
Uma breve introdução ao Terraform
 
SRE - Esperança não é uma estratégia
SRE - Esperança não é uma estratégiaSRE - Esperança não é uma estratégia
SRE - Esperança não é uma estratégia
 
Composição e Integração de Sistemas em 2013
Composição e Integração de Sistemas em 2013Composição e Integração de Sistemas em 2013
Composição e Integração de Sistemas em 2013
 
Sistemas para o Mundo Real - TDC 2012
Sistemas para o Mundo Real - TDC 2012Sistemas para o Mundo Real - TDC 2012
Sistemas para o Mundo Real - TDC 2012
 
Sistemas para o Mundo Real
Sistemas para o Mundo RealSistemas para o Mundo Real
Sistemas para o Mundo Real
 
Gerenciando times autogerenciáveis
Gerenciando times autogerenciáveisGerenciando times autogerenciáveis
Gerenciando times autogerenciáveis
 
Como vi Scrum ser rechaçado em uma grande empresa
Como vi Scrum ser rechaçado em uma grande empresaComo vi Scrum ser rechaçado em uma grande empresa
Como vi Scrum ser rechaçado em uma grande empresa
 

Erlang/OTP: Uma linguagem funcional para alta disponibilidade e escalabilidade