Introdução
+
# whoami
Eduardo Nunes Pereira
Engenheiro de software com 11 anos de experiência
em desenvolvimento web. Especializado em
construir softwares utilizando PHP, Javascript
(Node.JS) e Amazon Web Services.
github.com/eduardonunesp
br.linkedin.com/in/eduardonunesp
Modelo tradicional
Banco
de dados
Negócios
Apresentação
http://martinfowler.com/articles/microservices.html
• Integração continua mais difícil
• Atualizar um ou mais componentes pode significar o
“redeploy” da aplicação inteira.
• Escalar componentes individuais é quase impossível.
• Impacto no desenvolvimento
• Componentes fortemente unidos requerem uma maior
coordenação entre os desenvolvedores.
• Base de código (git/svn/…) enormes, requer maior esforço
para manter e extender o repositório.
• Vantajoso para um projeto rápido, mas a longo prazo irá
manter o projeto “amarrado" as tecnologias envolvidas.
Aplicações modernas
Mobile
Web Apps
IoT
Serviços
• Aplicações modernas consomem serviços
• Aplicações modernas oferecem serviços
• Serviços de acordo e para qualquer device.
Microservices : Nutshell
• Comunicação entre processos na rede
• Funcionalidades entregues via requisições HTTP,
TCP, PubSub, Queue
• Utilização de protocolos leves
• "Do One Thing And Do It Well” - UNIX Philosophy
Modelo moderno
Banco de Dados
Negócios
Apresentação
http://martinfowler.com/articles/microservices.html
Target : Particionamento
• Serviços distribuídos de forma granular
• Micro aplicativos independentes
• Evolução de componentes individuais
• Deploy em pequenas partes, e com test A / B
• Escalabilidade de forma simples
• Melhor distribuição entre os times de dev.
SOA ?
• Uma evolução do SOA
• Ser leve, aspecto principal simplicidade
• Fazer uma coisa e fazer bem (lembra da filosofia Unix)
• Kickstart, menos bla-bla-bla e mais code-code-code
• REST, sem milhões de parâmetros e nomes do tipo:
”ws-alguma-coisa".
• Padrão de comunicação mais flexível HTTP / QUEUE /
PUBSUB / TCP.
Desvantagens
• Deploy de uma arquitetura monolítica é bem mais simples
• Requer uma maior automação e utilização de ferramentas
de análise
• Complexidade da operação, monitoramento, gerenciamento
de um número enorme de diferentes processos
• Muitos padrões de comunicação podem dificultar um
diagnóstico.
• Rede: Falhas, Timeouts e Latência (mais selvagem ainda na
internet).
Fatores importantes
• Codebase (GIT)
• Dependency Management
• Build, Release and Run
• Port Binding
• Disposability
• Logs
http://12factor.net/
• Sistema de empacotamento e distribuição super
simples NPM
• Kickstart: npm init, npm install, “code-code-code"
• Metodologia leve e focada
• I/O asynchronous
• Excelente performance (thanks V8)
• MEAN Stack (Mongo, ExpressJS, AngularJS, Node.JS)
• Pattern matching: Maneira flexível de controlar as
regras de negócio
• Transport Independence: Como as mensagens são
transportadas não é algo que deve focar.
• Plugins: Vários plugins já desenvolvidos
• Seneca: Ferramentas para organizar as regras de
negócio do seu App em forma de Microservices.
–Torvalds, Linus (2000-08-25).
“Talk is cheap. Show me the
code.”
Referências
• Martin Fowler / James Lewis
• http://martinfowler.com/articles/microservices.html
• http://nginx.com/blog/microservices-at-netflix-
architectural-best-practices/
• http://www.slideshare.net/adrianco (Cockcroft)
• http://microservices.io/patterns/microservices.html
• http://theartofscalability.com/
Recomendações
Obrigado

Introdução a Microservices com Node.JS

  • 1.
  • 4.
    # whoami Eduardo NunesPereira Engenheiro de software com 11 anos de experiência em desenvolvimento web. Especializado em construir softwares utilizando PHP, Javascript (Node.JS) e Amazon Web Services. github.com/eduardonunesp br.linkedin.com/in/eduardonunesp
  • 5.
  • 6.
    • Integração continuamais difícil • Atualizar um ou mais componentes pode significar o “redeploy” da aplicação inteira. • Escalar componentes individuais é quase impossível. • Impacto no desenvolvimento • Componentes fortemente unidos requerem uma maior coordenação entre os desenvolvedores. • Base de código (git/svn/…) enormes, requer maior esforço para manter e extender o repositório. • Vantajoso para um projeto rápido, mas a longo prazo irá manter o projeto “amarrado" as tecnologias envolvidas.
  • 7.
  • 8.
    Serviços • Aplicações modernasconsomem serviços • Aplicações modernas oferecem serviços • Serviços de acordo e para qualquer device.
  • 10.
    Microservices : Nutshell •Comunicação entre processos na rede • Funcionalidades entregues via requisições HTTP, TCP, PubSub, Queue • Utilização de protocolos leves • "Do One Thing And Do It Well” - UNIX Philosophy
  • 11.
    Modelo moderno Banco deDados Negócios Apresentação http://martinfowler.com/articles/microservices.html
  • 12.
    Target : Particionamento •Serviços distribuídos de forma granular • Micro aplicativos independentes • Evolução de componentes individuais • Deploy em pequenas partes, e com test A / B • Escalabilidade de forma simples • Melhor distribuição entre os times de dev.
  • 14.
    SOA ? • Umaevolução do SOA • Ser leve, aspecto principal simplicidade • Fazer uma coisa e fazer bem (lembra da filosofia Unix) • Kickstart, menos bla-bla-bla e mais code-code-code • REST, sem milhões de parâmetros e nomes do tipo: ”ws-alguma-coisa". • Padrão de comunicação mais flexível HTTP / QUEUE / PUBSUB / TCP.
  • 15.
    Desvantagens • Deploy deuma arquitetura monolítica é bem mais simples • Requer uma maior automação e utilização de ferramentas de análise • Complexidade da operação, monitoramento, gerenciamento de um número enorme de diferentes processos • Muitos padrões de comunicação podem dificultar um diagnóstico. • Rede: Falhas, Timeouts e Latência (mais selvagem ainda na internet).
  • 16.
    Fatores importantes • Codebase(GIT) • Dependency Management • Build, Release and Run • Port Binding • Disposability • Logs
  • 17.
  • 19.
    • Sistema deempacotamento e distribuição super simples NPM • Kickstart: npm init, npm install, “code-code-code" • Metodologia leve e focada • I/O asynchronous • Excelente performance (thanks V8) • MEAN Stack (Mongo, ExpressJS, AngularJS, Node.JS)
  • 22.
    • Pattern matching:Maneira flexível de controlar as regras de negócio • Transport Independence: Como as mensagens são transportadas não é algo que deve focar. • Plugins: Vários plugins já desenvolvidos • Seneca: Ferramentas para organizar as regras de negócio do seu App em forma de Microservices.
  • 24.
    –Torvalds, Linus (2000-08-25). “Talkis cheap. Show me the code.”
  • 25.
    Referências • Martin Fowler/ James Lewis • http://martinfowler.com/articles/microservices.html • http://nginx.com/blog/microservices-at-netflix- architectural-best-practices/ • http://www.slideshare.net/adrianco (Cockcroft) • http://microservices.io/patterns/microservices.html • http://theartofscalability.com/
  • 26.
  • 27.