microservices - alm roadshow 2015

Post on 23-Jan-2018

1.107 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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!

top related