MicroserviçosUMA NOVA ARQUITETURA PARA A IMPLEMENTAÇÃO DE SOFTWARES
SEMANA EETI 2016
Renato Groffe Microsoft Technical Audience Contributor (MTAC), MCP, MCTS, OCA, ITIL, COBIT
Mais de 15 anos de experiência na área de Tecnologia
Pós-graduação em Engenharia de Software – ênfase em SOA
MBA em Business Intelligence
Graduação em Sistemas de Informação
Articulista e Palestrante (Devmedia, .NET Magazine, Canal .NET, TechNet Wiki,
.NET Coders, Baixada Tech)
Técnico em Processamento de Dados
Contatos◦ Facebook: https://www.facebook.com/renatogroff◦ Canal .NET: https://www.facebook.com/canaldotnet◦ LinkedIn: http://br.linkedin.com/in/renatogroffe
Agenda
◦ Aplicações Monolíticas
◦ Serviços: uma visão geral
◦ Microserviços: uma nova alternativa para serviços
Aplicações Monolíticas
Aplicações Monolíticas Estruturalmente mais simples → as diversas partes do sistema formam um único bloco
Desenvolvimento, testes e implantação acontecem de forma mais fácil
Uma boa abordagem para aplicações relativamente pequenas
Aplicações Monolíticas – Problemas
Não é uma abordagem recomendável para aplicações mais complexas
Aplicações Monolíticas – Problemas◦ A adoção de práticas de continuous
deployment torna-se mais difícil → indisponibilidade de todo o sistema durante implantações
◦ Costuma-se ficar preso a uma tecnologia
◦ Difícil entendimento e manutenção, com o crescimento da aplicação
Aplicações Monolíticas – Problemas◦ Problemas em coordenar as ações em equipe
◦ Queda na qualidade do código com o decorrer do tempo
◦ Consumo maior de recursos (IDE, servidores de aplicação)
◦ Escalabilidade comprometida
Solução para os problemas das aplicações monolíticas?
O velho “dividir para conquistar” → Serviços
Modelos arquiteturais possíveis - Serviços SOA (Service Oriented Architecture)
REST (Representational State Transfer)
Microserviços
SOA – Definição de serviço◦ Unidade básica para a implementação de
serviços em conformidade com esta arquitetura
◦ Um componente de software com capacidades, as quais são implementadas sob a forma de operações (métodos)
◦ As capacidades podem ser vistas como funcionalidades das quais um ou mais sistemas dependem
SOA – Princípios (segundo Thomas Erl)◦ Reusabilidade
◦ Autonomia
◦ Contrato Padronizado
◦ Baixo Acoplamento
◦ Abstração
◦ Independência de Estado (Stateless)
◦ Visibilidade
◦ Capacidade de Composição
SOA – Problemas comuns◦ Falta de consenso da indústria em como
implementar esta arquitetura (inúmeras especificações complementares para Web Services)
◦ Dificuldades em encontrar a melhor forma de dividir algo maior em partes menores
REST – Visão Geral◦ Modelo arquitetural proposto por Roy Fielding em 2000, estando
baseado no conceito de recurso e no uso de requisições HTTP
◦ Recurso → elemento (conjunto de dados) do qual uma aplicação depende, normalmente representando um item de negócio
◦ Utilização de JSON ou XML para representar os dados associados a um recurso
◦ RESTful Web Services → serviços seguindo esta arquitetura
REST – Representação Esquemática
Microserviços, uma nova alternativa para serviços
Microserviços – O que são?
Serviços pequenos e autônomos trabalhando de forma conjunta, a fim de atender a uma demanda específica
Qual o tamanho considerado idealpara um microservice?◦ Não existe um padrão exato para definir o
tamanho de um microserviço
◦ Um caso de uso específico pode ser a origem de um pequeno serviço
◦ Alguns conceitos propostos por Robert C. Martin (“Uncle Bob”) servem de diretrizes:
◦ Coesão◦ Princípio da Responsabilidade Única
Autonomia em um microservice?◦ Indica o grau de independência de um serviço em
relação a influências externas
◦ Um microserviço deve contribuir para um baixo acoplamento
◦ Deploy como um componente isolado
◦ Alterações devem acontecer sem afetar os consumidores de um serviço (sempre que possível)
Microserviços - Benefícios◦ Adoção de novas tecnologias com maior facilidade
◦ Alta disponibilidade
◦ Escalabilidade
◦ Facilidades no Deployment
◦ Melhor organização do trabalho
Microserviços - BenefíciosAdoção de novas tecnologias com maior facilidade
◦ Escolha da alternativa mais adequada para cada contexto
◦ Facilidade em acompanhar as tecnologias em alta num determinado momento
◦ Impacto mínimo em aplicações que dependam de um microserviço
◦ Evolução de partes de um projeto sem grandes impactos
Microserviços - BenefíciosAlta disponibilidade
◦ Problemas costumam ser isolados
◦ Falhas em partes específicas ainda permitiriam o funcionamento de outros módulos de um sistema
Microserviços - BenefíciosEscalabilidade
◦ Torna-se mais fácil expandir a capacidade de processamento para partes específicas de um sistema
◦ A opção por soluções de cloud computing (como Azure e Amazon Web Services) tem um papel importante neste aspecto
Microserviços - BenefíciosFacilidades no Deployment
◦ Torna-se mais simples a adoção de um processo de continuous deployment
◦ Um microserviço pode ser atualizado sem que todo o sistema deixe de operar
◦ Mudanças (que sempre existirão) costumam causar um menor impacto
Microserviços - BenefíciosMelhor organização do trabalho
◦ Foco em produtos, não projetos
◦ Times pequenos e organizados em torno de capacidades de negócios → Cross-functional teams
◦ Código mais simples e melhor estruturado
Microserviços - BenefíciosReusabilidade
◦ Componentização de funcionalidades de negócio
◦ Diferentes tipos de aplicações (Web, desktop, mobile) podem consumir as funcionalidades de um microserviço
Como implementar uma arquitetura de Microserviços?
◦ Seguindo alguns princípios propostos por especialistas da área de software
◦ Adotando serviços oferecidos por uma solução de cloud computing, como o Microsoft Azure
Microserviços – Princípios de Desenvolvimento (segundo Sam Newman)◦ Modelagem com base em conceitos do negócio
◦ Adotar uma cultura de automação
◦ Ocultar detalhes internos de implementação
◦ Descentralização
◦ Deployment independente
◦ Isolamento de Falhas
◦ Monitoramento
Microserviços – Modelagem◦ Adoção de práticas de Domain-Driven Design
◦ Um maior alinhamento com a área de negócios
◦ Facilidade em acompanhar as mudanças do negócio
◦ Evita-se uma modelagem falha e baseada puramente em aspectos técnicos
Microserviços – Cultura de AutomaçãoAdoção de práticas de DevOps:
◦ Testes automatizados
◦ Deployment contínuo
◦ Uso de soluções de ALM como o Team Foundation Server da Microsoft
Microserviços – Ocultar ImplementaçãoSer agnóstico do ponto de vista da tecnologia (ideia de “caixa-preta”):
◦ Comunicação baseada no modelo REST (requisições HTTP + JSON) → Padrão de mercado atualmente
◦ Capacidade de um serviço evoluir sem efeitos colaterais
◦ Consumidores não precisam conhecer detalhes internos de um microserviço
Microserviços – Descentralização◦ Times multifuncionais cuidando de um produto
(ao invés de diferentes equipes para cada fase do desenvolvimento)
◦ Evitar o uso de soluções de Enterprise Service Bus (ESB) ou de orquestração
◦ Bases de dados descentralizadas (normalmente, uma para cada serviço)
Microserviços – Deployment independente
Habilidade de implantar um serviço independentemente de outros
Microserviços – Deployment independenteDiversas abordagens para implantação:
◦ Uma única instância de um serviço por host
◦ Múltiplas instâncias de um serviço por host
◦ Uma instância de um serviço por máquina virtual
◦ Uma instância de serviço por Container → Docker
* A plataforma Azure oferece suporte a todos estes cenários
Um pouco mais sobre ContainersO que são?
◦ Unidade de deployment
◦ Ambiente isolado
◦ Coleção isolada de recursos
Um pouco mais sobre Containers
Physical Server
Hypervisor
Guest OS Guest OS
AppFramework
AppFramework
AppA
AppA
Guest OS
AppFramework
AppB
VM
Host OS
Um pouco mais sobre Containers
Physical Server
Host OS
Container Manager
AppFramework
AppA
AppFramework
AppB
AppB
AppB
Container
Um pouco mais sobre ContainersQuais os benefícios?
◦ Implantação rápida
◦ Processo conduzido de forma repetível e confiável
Microserviços – Um pouco mais sobre ContainersCenários
◦ Desenvolvimento/Testes
◦ Excelentes para microserviços
◦ Docker é atualmente a principal solução, baseando-se para isto no uso de Linux
◦ Windows Server 2016 terá suporte nativo
Microserviços – Isolamento de FalhasGarantir a operação de um sistema mesmo diante de problemas requer:
◦ Um planejamento adequado prevendo falhas e o tratamento das mesmas
◦ Algum tipo de sacrifício em termos de disponibilidade ou consistência
Microserviços – Monitoramento◦ Estipular métricas a serem analisadas
◦ Definir como e onde tais métricas serão coletadas
◦ Elaborar uma estratégia de log comum a todos os microserviços de um projeto
◦ Cuidados em não sobrecarregar o processamento dos serviços com ações de instrumentação
Microserviços – MonitoramentoNo caso do Microsoft Azure, uma alternativa seria o uso do Application Insights:
◦ Este mecanismo suporta além de .NET outras plataformas, como Java, Node.js, PHP e Python
◦ Conta com meios para a coleta de dados em modo server-side, client-side ou mobile
◦ Disponibiliza dashboards para a análise dos dados coletados
Microserviços – MonitoramentoExemplo de dashboard gerado pelo Application Insights:
Microserviços – Casos de Sucesso
Microserviços – Outras Referências◦ Microservice architecture - Chris Richardson
http://microservices.io/index.html
◦ Microservices - Martin Fowlerhttp://martinfowler.com/articles/microservices.html
Perguntas?SLIDESHARE:
http://bit.ly/microservices-metodista-eeti-2016
Obrigado!
SEMANA EETI 2016
Top Related