Tópicos abordados nesta apresentação realizada durante o a semana EETI 2016 da Universidade Metodista - São Paulo (02/05/2016):
- Aplicações Monolíticas
- Serviços: uma visão geral
- Arquitetura de Microserviços
2. 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
5. 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
6. Aplicações Monolíticas – Problemas
Não é uma abordagem
recomendável para aplicações
mais complexas
7. 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
8. 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
11. Modelos arquiteturais possíveis - Serviços
SOA (Service Oriented Architecture)
REST (Representational State Transfer)
Microserviços
12. 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
13. SOA – Princípios (segundo Thomas Erl)
◦ Reusabilidade
◦ Autonomia
◦ Contrato Padronizado
◦ Baixo Acoplamento
◦ Abstração
◦ Independência de Estado (Stateless)
◦ Visibilidade
◦ Capacidade de Composição
14. 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
15. 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
18. 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
19. 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
20. 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)
21. Microserviços - Benefícios
◦ Adoção de novas tecnologias com maior
facilidade
◦ Alta disponibilidade
◦ Escalabilidade
◦ Facilidades no Deployment
◦ Melhor organização do trabalho
22. 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
23. 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
24. 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
25. 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
26. 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
27. 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
28. 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
29. 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
30. 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
31. 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 Team
Foundation Server da Microsoft
32. 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
33. 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)
35. 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
* A plataforma Azure oferece suporte a todos estes
cenários
36. Um pouco mais sobre Containers
O que são?
◦ Unidade de deployment
◦ Ambiente isolado
◦ Coleção isolada de recursos
37. Um pouco mais sobre Containers
Physical Server
Hypervisor
Guest OS Guest OS
App
Framework
App
Framework
App
A
App
A
Guest OS
App
Framework
App
B
Host OS
38. Um pouco mais sobre Containers
Physical Server
Host OS
Container
Manager
App
Framework
App
A
App
Framework
App
B
App
B
App
B
39. Um pouco mais sobre Containers
Quais os benefícios?
◦ Implantação rápida
◦ Processo conduzido de forma
repetível e confiável
40. Microserviços – Um pouco mais sobre Containers
Cená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
41. 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
42. 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
43. Microserviços – 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