Trabalho de conclusão do curso (TCC 2) de Engenharia de Software da Universidade Federal do Ceará, campus de Quixadá.
Este trabalho propõe um método, ou seja, um conjunto de passos bem definidos para auxiliar o desenvolvimento de software baseado em microserviços.
Um método para o desenvolvimento de software baseado em microsserviços
1. Thiago Pereira Rosa
Engenharia de Software
02/2016
Orientadora:
Msc. Ticiana Linhares Coelho da Silva
Co-orientador:
Dr. Flávio Rubens de Carvalho Souza
UM MÉTODO PARA O DESENVOLVIMENTO DE
SOFTWARE BASEADO EM MICROSSERVIÇOS
Trabalho de Conclusão de Curso
2. Roteiro da apresentação
• Justificativa
• Trabalhos relacionados
• Problemática e Objetivos
• Microsserviços
• Aplicações monolíticas
• Breve histórico sobre os microsserviços
• Definição formal
• Características
• Método de desenvolvimento
• Estudo de caso & implementação
• Conclusão
• Trabalhos futuros
• Referências bibliográficas
4. Trabalhos Relacionados
• LEVCOVITZ, Alessandra; TERRA, Ricardo; VALENTE, Marco Tulio. Towards
a Technique for Extracting Microservices from Monolithic Enterprise
Systems. 3rd Brazilian Workshop on Software Visualization, Evolution
and Maintenance (VEM), p. 97-104, 2015.
• NAMIOT, Dmitry; SNEPS-SNEPPE, Manfred. On Micro-services Architecture.
International Journal of Open Information Technologies, v. 2, n. 9, p.
24-27, 2014.
• VIENNOT, Nicolas et al. Synapse: a microservices architecture for
heterogeneous-database web applications. In: Proceedings of the Tenth
European Conference on Computer Systems. ACM, 2015. p. 21.
5. Microsserviços ou Microserviços?
Para a tradução do termo Microservices, optei por adotar a nova
regra da reforma ortográfica da Língua Portuguesa de 2013 (com
período de adaptação de 4 anos).
– HÍFEN: “R” e “S”
Nova regra: O hífen não será mais utilizado em prefixos
terminados em vogal seguida de palavras iniciadas com “r”
ou “s”. Nesse caso, essas letras deverão ser duplicadas.
Neste caso, o correto é utilizar o termo microsserviços.
7. Problemática
A utilização dos microserviços melhora o
desenvolvimento de sistemas de software mais
complexos, confiáveis e com maior qualidade?
8. Microsserviços
Além da campanha publicitária
até 1990 2000 2010
Pré SOA Tradicional SOA Microsserviços
Microserviços (2014)
• Serviço único por processo
• Rede de comunicação leve e interoperável
• Baseado nos conceitos do negócio
• Linguagem de programação
• Synchronous / Asynchronous
• Independente de outros
RPC (1991)
• Serviço único por processo
• Rede de comunicação encapsulada e interoperável
• Baseado nos conceitos de negócio
• Linguagem de programação
• Synchronous / Asynchronous
• Independente de outros
9. Microsserviços
Além da campanha publicitária
até 1990 2000 2010
Pré SOA Tradicional SOA Microsserviços
Microserviços (2014)
• Serviço único por processo
• Rede de comunicação leve e interoperável
• Baseado nos conceitos do negócio
• Linguagem de programação
• Synchronous / Asynchronous
• Independente de outros
RPC (1991)
• Serviço único por processo
• Rede de comunicação encapsulada e interoperável
• Baseado nos conceitos de negócio
• Linguagem de programação
• Synchronous / Asynchronous
• Independente de outros
Unix Philosophy (1984)
"Esta é a filosofia Unix:
Escreva programas que façam apenas uma coisa mas que façam bem feito.
Escreva programas que trabalhem juntos. Escreva programas que manipulem
streams de texto, pois esta é uma interface universal”
10. O ciclo de adoção na TI corporativa
http://enterpriseitadoption.com
11. “In short, the microservice architectural style is an approach to
developing a single application as a suite of small services, each
running in its own process and communicating with lightweight
mechanisms, often an HTTP resource API.
These services are built around business capabilities and
independently deployable by fully automated deployment
machinery. There is a bare minimum of centralized management
of these services, which may be written in different programming
languages and use different data storage technologies”
– Martin Fowler
12. Microsserviços e a Arquitetura em Camadas
http://microxchg.io/2016/index.html
13. Microsserviços e a Arquitetura em Camadas
http://microxchg.io/2016/index.html
16. Características dos Microsserviços
• Pequenos.
• Executados em seu próprio processo.
• Possuem um mecanismo leve de comunicação (via HTTP)
• Construídos em torno da capacidade do negócio
• Independente implementáveis.
• Possuem o mínimo de gerenciamento centralizado.
• Podem ser escritos em linguagens de programação diferentes.
• Podem utilizar diferentes tecnologias de persistência.
17. A anatomia de um microsserviço
RESTfull API
Tecnologia de
desenvolvimento
escolhida
Configuração de
implantação
}
• Modelagem RML
• JSON
• Traits e schemas
• Java
• Groovy
• Scala
• Go, Node, Ruby…
• Variáveis de ambiente
• Buildpacks
19. Metodologia
• Este método fornece um conjunto de passos para a
construção de software baseado em microsserviços.
• Minimizar a necessidade de re-implementação, caso
ocorram mudanças.
• Limitação de serviços devidamente coesos com os
mecanismos projetado para evolução das interfaces.
• Envolvendo uma combinação de tecnologias em diferentes
áreas da TI.
• Interoperável.
20.
21. Metodologia Ágil e o Produto mínimo viável
http://www.enricdurany.com/work/stop-thinking-of-minimum-viable-products/
22. Casos de uso inteligentes
• Cada processo elementar é implementado
em uma única aplicação.
• Os requisitos são modelados usando casos
de uso inteligentes.
• Cada aplicativo consiste em um caso de uso
de alto nível e uma série de casos de uso
subsequentes.
• Deve-se somar os serviços que são
necessários para implementar o modelo.
• Podemos fazer o mapeamento de impacto
sobre os serviços.
• Os casos de uso inteligentes formam uma
base sólida para os testes de integração.
23. Comportamento dos microsserviços
Caso clientes utilizem diretamente os microsserviços:
• Lógica de negócio e lógica de tratamento de error são
movidos para o lado do cliente.
• Requer várias solicitações para executar um fluxo
padrão.
Caso clientes utilizem um agregador de chamadas:
• Maior desempenho.
• API otimizada para aplicações (comportamento consistente)
• Promoção do isolamento de funcionalidades
Não Sim
24. Tecnologias de microsserviços
• Spring Boot
• Dropwizard
• Play 2
• Hystrix
• Netflix OSS
• Kibana
• Logstash
• Loggly
• Pagerduty
• Servo
• Atlas
• Graphite
• Zipkin
Desenvolvimento
Logging Monitoramento
• Zookeeper
• Curator
• Eureka
Localização e Descoberta
• Archaius
Configurações
30. Estudo de caso - Startup Fototerapia
• Este estudo de caso consistiu em implementar uma aplicação
funcional básica (protótipo) no contexto de auxílio ao tratamento
médico com o uso de fototerapia, utilizando o método de
desenvolvimento de software baseado em microsserviços
proposto neste projeto de pesquisa e trilhando os requisitos
funcionais elementares necessários para a construção do sistema.
• bright-ms_middleware
• bright-ms_auth
• bright-ms_cliente
• bright-sistema_principal
Estudo de caso
32. Spring Boot
• Convenção sobre a abordagem de configuração.
• Java, Groovy ou Scala.
• Arquivos auto-contidos em Jar ou War.
• Gerenciamento de dependências através de pré-empacotamento.
Estudo de caso
@ComponentScan
@EnableAutoConfiguration
public class bright-ms_auth_App {
public static void main(String[] args) {
SpringApplication.run(bright-ms_auth_App.class, args);
}
}
35. Conclusão
• Microsserviços são complexos e multidisciplinares.
• Apoiam diferente tipos e contextos de software.
• Não devem ser utilizados para qualquer sistema de
software.
• Atenção redobrada para as estruturas de comunicação e
interação entre serviços.
• Diversas tecnologias com suporte à microsserviços
consolidadas no mercado.
36. Trabalhos futuros
• Advanced Message Queueing Protocol (AMQP)
• Programação reativa
• Segurança dos microsserviços
• Escalabilidade dos microsserviços
37. Referências Bibliográficas
• FIELDING, Roy Thomas. Architectural styles and the design of network-based
software architectures. 2000. Tese de Doutorado. University of California, Irvine.
• FOWLER, Martin. Patterns of enterprise application architecture. Addison-
Wesley Longman Publishing Co., Inc., 2002.
• LEWIS, James; FLOWER, Martin. Microservices. Disponível em: <http://
martinfowler.com/articles/microservices.html> Acesso em: 18 jun. 2015.
• MARINESCU, Dan C. Cloud computing: Theory and practice. 1.ed. Waltham:
Newnes, 2013.
• Microservices, Docker and Containers, an Overview. Disponível em: <http://
www.simplicityitself.com/articles/microservices-docker-and-containers-an-
overview>. Acesso em: 25 jan. 2016.
• Microxchg - The Microservices Conference in Berlin. Disponível em: <http://
microxchg.io>. Acesso em: 23 jan. 2016.
38. Referências Bibliográficas
• NAMIOT, Dmitry; SNEPS-SNEPPE, Manfred. On Micro-services Architecture.
International Journal of Open Information Technologies, v. 2, n. 9, p. 24-27,
2014.
• NEWMAN, Sam. Building Microservices. 1 ed. O'Reilly Media, Inc., 2015.
• RICHARDSON, Chris. Microservices architecture. Disponível em <http://
microservices.io/patterns/microservices.html> Acesso em: 20 mai. 2015.
• RICHARDSON, Chris. Microservices: Decomposing applications for deployability
and scalability. 2014.
• The twelve-factor app. Disponível em <http://12factor.net> Acesso em: 13 mai.
2015.
• THONES, Johannes. Microservices. Software, IEEE, v. 32, n. 1, p. 116-116,
2015.
40. UM MÉTODO PARA O DESENVOLVIMENTO DE
SOFTWARE BASEADO EM MICROSSERVIÇOS
Thiago Pereira Rosa
Engenharia de Software
Universidade Federal do Ceará
Orientador(a):
Msc. Ticiana Linhares Coelho da Silva
Co-orientador:
Dr. Flávio Rubens de Carvalho Souza