Microservices - ALM Roadshow 2015
-
Upload
renato-groff -
Category
Software
-
view
1.107 -
download
0
Transcript of Microservices - ALM Roadshow 2015
MicroservicesUMA NOVA ARQUITETURA PARA CRIAÇÃO DE SERVIÇOS
Renato GroffeMicrosoft 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, TI Selvagem)
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
◦ Microservices: 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 continuousdeployment 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)
Microservices
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
Microservices, uma nova alternativa para serviços
Microservices – O que são?
Serviços pequenos e autônomostrabalhando 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)
Microservices - Benefícios
◦ Adoção de novas tecnologias com maior facilidade
◦ Alta disponibilidade
◦ Escalabilidade
◦ Facilidades no Deployment
◦ Melhor organização do trabalho
Microservices - Benefícios
Adoçã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
Microservices - Benefícios
Alta disponibilidade
◦ Problemas costumam ser isolados
◦ Falhas em partes específicas ainda permitiriam o funcionamento de outros módulos de um sistema
Microservices - Benefícios
Escalabilidade
◦ 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
Microservices - Benefícios
Facilidades 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
Microservices - Benefícios
Melhor organização do trabalho
◦ Foco em produtos, não projetos
◦ Times pequenos e organizados em torno de capacidades de negócios → Cross-functionalteams
◦ Código mais simples e melhor estruturado
Microservices - Benefícios
Reusabilidade
◦ 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 Microservices?
◦ 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
Microservices – 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
Microservices – 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
Microservices – Cultura de Automação
Adoção de práticas de DevOps:
◦ Testes automatizados
◦ Deployment contínuo
◦ Uso de soluções de ALM como o Team Foundation Server da Microsoft
Microservices – 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
Microservices – 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)
Microservices – Deployment independente
Habilidade de implantar um serviço independentemente de outros
Microservices – 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
Microservices – 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
Microservices – 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
Microservices – Monitoramento
No 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
Microservices – MonitoramentoExemplo de dashboard gerado pelo Application Insights:
Microservices – Casos de Sucesso
Microservices – Outras Referências
◦ Microservice architecture - Chris Richardsonhttp://microservices.io/index.html
◦ Microservices - Martin Fowlerhttp://martinfowler.com/articles/microservices.html
Perguntas?
Obrigado!