Introdução a Microservices com Node.JS

Post on 08-Aug-2015

147 views 0 download

Transcript of Introdução a Microservices com Node.JS

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