Introdução a arquitetura Microservices, como evoluímos das arquiteturas monolíticas até padrões de arquitetura Microservice, onde pequenos serviços distribuídos na rede compõem uma grande peça. Serão abordadas técnicas de distribuição de dados e chamadas remotas, gerenciamento dos serviços distribuídos e como minimizar as dores de cabeça. Toda arquitetura e prática será realizada em cima da plataforma NodeJS.
4. # 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
6. • 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.
8. Serviços
• Aplicações modernas consomem serviços
• Aplicações modernas oferecem serviços
• Serviços de acordo e para qualquer device.
9.
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 de Dados
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.
13.
14. 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.
15. 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).
16. Fatores importantes
• Codebase (GIT)
• Dependency Management
• Build, Release and Run
• Port Binding
• Disposability
• Logs
19. • 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)
20.
21.
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.