Date post: | 08-Jan-2017 |
Category: |
Software |
Upload: | renato-groff |
View: | 293 times |
Download: | 3 times |
MicroservicesUMA NOVA ARQUITETURA PARA CRIAÇÃO DE SERVIÇOS
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, TI Selvagem, DotNetBaixada)
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 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)
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ô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)
Microservices - Benefícios◦ Adoção de novas tecnologias com maior facilidade
◦ Alta disponibilidade
◦ Escalabilidade
◦ Facilidades no Deployment
◦ Melhor organização do trabalho
Microservices - 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
Microservices - BenefíciosAlta disponibilidade
◦ Problemas costumam ser isolados
◦ Falhas em partes específicas ainda permitiriam o funcionamento de outros módulos de um sistema
Microservices - 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
Microservices - 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
Microservices - 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
Microservices - 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 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çã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
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
◦ Azure Service Fabric
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 – 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
Microservices – MonitoramentoExemplo de dashboard gerado pelo Application Insights:
Microservices – Casos de Sucesso
Microservices – Outras Referências◦ Microservice architecture - Chris Richardson
http://microservices.io/index.html
◦ Microservices - Martin Fowlerhttp://martinfowler.com/articles/microservices.html
Dúvidas?
Obrigado!