Upload
eduardo-nunes-pereira
View
147
Download
0
Embed Size (px)
Citation preview
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