Microserviços - Universidade Metodista - EETI 2016

Post on 16-Apr-2017

266 views 3 download

Transcript of Microserviços - Universidade Metodista - EETI 2016

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