Microserviços
UMA NOVA ARQUITETURA PARA A IMPLEMENTAÇÃO DE SISTEMAS
Renato Groffe
◦ Microsoft Most Valuable Professional (MVP)
◦ Multi-Plataform Technical Audience Contributor
◦ Mais de 15 anos de experiência na área de Tecnologia
◦ Autor Técnico e Palestrante
Contatos
http://renatogroffe.net/
/renatogroffe /in/renatogroffe
/canaldotnet /renatogroffe
/@renato.groffe /renatogroff
Agenda
◦ Aplicações Monolíticas
◦ Microserviços: uma nova alternativa para serviços
◦ Exemplo prático
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
◦ Costuma-se ficar preso a uma tecnologia
◦ Difícil entendimento e manutenção, com o
crescimento da aplicação
◦ A adoção de práticas de continuous
deployment torna-se mais difícil →
indisponibilidade de todo o sistema durante
implantações
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
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 ideal
para 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í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
Microserviços - Benefícios
Alta disponibilidade
◦ Problemas costumam ser isolados
◦ Falhas em partes específicas ainda
permitiriam o funcionamento de outros
módulos de um sistema
Microserviços - 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
Microserviços - 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
Microserviços - 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-functional
teams
◦ Código mais simples e melhor estruturado
Microserviços - 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
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ção
Adoção de práticas de DevOps:
◦ Testes automatizados
◦ Deployment contínuo
◦ Uso de soluções de ALM como o
Visual Studio Team Services
Microserviços – Ocultar Implementação
Ser 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)
◦ Bases de dados descentralizadas (uma
para cada microserviço)
Microserviços – Deployment independente
Habilidade de implantar um serviço
independentemente de outros
Microserviços – Deployment independente
Diversas 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
Microserviços – Isolamento de Falhas
Garantir 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
◦ O Microsoft Azure conta com um serviço de
monitoramento chamado Application Insights
Microserviços – Casos de Sucesso
Microserviços – Outras Referências
◦ Microservice architecture - Chris Richardson
http://microservices.io/index.html
◦ Microservices - Martin Fowler
http://martinfowler.com/articles/microservices.html
Exemplo prático
Exemplo prático
Deployment de API REST no Microsoft Azure com as seguintes
tecnologias
◦ Azure API App
◦ SQL Azure
◦ ASP.NET Core 1.1
◦ Dapper
◦ Entity Framework Core
◦ Visual Studio 2017
Dúvidas?
Obrigado!

Arquitetura de Microserviços - Tecnologia na Prática - Julho/2017

  • 1.
    Microserviços UMA NOVA ARQUITETURAPARA A IMPLEMENTAÇÃO DE SISTEMAS
  • 2.
    Renato Groffe ◦ MicrosoftMost Valuable Professional (MVP) ◦ Multi-Plataform Technical Audience Contributor ◦ Mais de 15 anos de experiência na área de Tecnologia ◦ Autor Técnico e Palestrante
  • 3.
  • 4.
    Agenda ◦ Aplicações Monolíticas ◦Microserviços: uma nova alternativa para serviços ◦ Exemplo prático
  • 5.
  • 6.
    Aplicações Monolíticas Estruturalmente maissimples → 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
  • 7.
    Aplicações Monolíticas –Problemas Não é uma abordagem recomendável para aplicações mais complexas
  • 8.
    Aplicações Monolíticas –Problemas ◦ Costuma-se ficar preso a uma tecnologia ◦ Difícil entendimento e manutenção, com o crescimento da aplicação ◦ A adoção de práticas de continuous deployment torna-se mais difícil → indisponibilidade de todo o sistema durante implantações
  • 9.
    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
  • 10.
    Solução para osproblemas das aplicações monolíticas?
  • 11.
    O velho “dividirpara conquistar” → Serviços
  • 12.
    Microserviços, uma novaalternativa para serviços
  • 13.
    Microserviços – Oque são? Serviços pequenos e autônomos trabalhando de forma conjunta, a fim de atender a uma demanda específica
  • 14.
    Qual o tamanhoconsiderado ideal para 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
  • 15.
    Autonomia em ummicroservice? ◦ 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)
  • 16.
    Microserviços - Benefícios ◦Adoção de novas tecnologias com maior facilidade ◦ Alta disponibilidade ◦ Escalabilidade ◦ Facilidades no Deployment ◦ Melhor organização do trabalho
  • 17.
    Microserviços - Benefícios Adoçãode 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
  • 18.
    Microserviços - Benefícios Altadisponibilidade ◦ Problemas costumam ser isolados ◦ Falhas em partes específicas ainda permitiriam o funcionamento de outros módulos de um sistema
  • 19.
    Microserviços - 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
  • 20.
    Microserviços - Benefícios Facilidadesno 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
  • 21.
    Microserviços - Benefícios Melhororganizaçã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
  • 22.
    Microserviços - 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
  • 23.
    Como implementar umaarquitetura 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
  • 24.
    Microserviços – Princípiosde 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
  • 25.
    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
  • 26.
    Microserviços – Culturade Automação Adoção de práticas de DevOps: ◦ Testes automatizados ◦ Deployment contínuo ◦ Uso de soluções de ALM como o Visual Studio Team Services
  • 27.
    Microserviços – OcultarImplementação Ser 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
  • 28.
    Microserviços – Descentralização ◦Times multifuncionais cuidando de um produto (ao invés de diferentes equipes para cada fase do desenvolvimento) ◦ Bases de dados descentralizadas (uma para cada microserviço)
  • 29.
    Microserviços – Deploymentindependente Habilidade de implantar um serviço independentemente de outros
  • 30.
    Microserviços – Deploymentindependente Diversas 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
  • 31.
    Microserviços – Isolamentode Falhas Garantir 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
  • 32.
    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 ◦ O Microsoft Azure conta com um serviço de monitoramento chamado Application Insights
  • 33.
  • 34.
    Microserviços – OutrasReferências ◦ Microservice architecture - Chris Richardson http://microservices.io/index.html ◦ Microservices - Martin Fowler http://martinfowler.com/articles/microservices.html
  • 35.
  • 36.
    Exemplo prático Deployment deAPI REST no Microsoft Azure com as seguintes tecnologias ◦ Azure API App ◦ SQL Azure ◦ ASP.NET Core 1.1 ◦ Dapper ◦ Entity Framework Core ◦ Visual Studio 2017
  • 37.
  • 38.