um método para o desenvolvimento de software baseado em microsserviços

40
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

Upload: thiago-pereira

Post on 19-Feb-2017

863 views

Category:

Software


6 download

TRANSCRIPT

Page 1: Um método para o desenvolvimento de software baseado em microsserviços

Thiago Pereira Rosa Engenharia de Software

02/2016

Orientadora: Msc. Ticiana Linhares Coelho da SilvaCo-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

Page 2: Um método para o desenvolvimento de software baseado em microsserviços

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

Page 3: Um método para o desenvolvimento de software baseado em microsserviços

Objetivo

Propor um método para o desenvolvimento de software baseado em microsserviços

Page 4: Um método para o desenvolvimento de software baseado em microsserviços

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.

Page 5: Um método para o desenvolvimento de software baseado em microsserviços

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.

Page 6: Um método para o desenvolvimento de software baseado em microsserviços

Aplicação monolítica

Page 7: Um método para o desenvolvimento de software baseado em microsserviços

Problemática

A utilização dos microserviços melhora o desenvolvimento de sistemas de software mais complexos, confiáveis e com maior qualidade?

Page 8: Um método para o desenvolvimento de software baseado em microsserviços

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

Page 9: Um método para o desenvolvimento de software baseado em microsserviços

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”

Page 10: Um método para o desenvolvimento de software baseado em microsserviços

O ciclo de adoção na TI corporativa

http://enterpriseitadoption.com

Page 11: Um método para o desenvolvimento de software baseado em microsserviços

“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

Page 12: Um método para o desenvolvimento de software baseado em microsserviços

Microsserviços e a Arquitetura em Camadas

http://microxchg.io/2016/index.html

Page 13: Um método para o desenvolvimento de software baseado em microsserviços

Microsserviços e a Arquitetura em Camadas

http://microxchg.io/2016/index.html

Page 14: Um método para o desenvolvimento de software baseado em microsserviços

Persistência poliglota dos Microserviços

Page 15: Um método para o desenvolvimento de software baseado em microsserviços

Escalabilidade dos Microserviços

https://leanpub.com/software-architecture-for-developers/read#c4

Page 16: Um método para o desenvolvimento de software baseado em microsserviços

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.

Page 17: Um método para o desenvolvimento de software baseado em microsserviços

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

Page 18: Um método para o desenvolvimento de software baseado em microsserviços

Método de desenvolvimento

Page 19: Um método para o desenvolvimento de software baseado em microsserviços

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.

Page 20: Um método para o desenvolvimento de software baseado em microsserviços
Page 21: Um método para o desenvolvimento de software baseado em microsserviços

Metodologia Ágil e o Produto mínimo viável

http://www.enricdurany.com/work/stop-thinking-of-minimum-viable-products/

Page 22: Um método para o desenvolvimento de software baseado em microsserviços

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.

Page 23: Um método para o desenvolvimento de software baseado em microsserviços

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

Page 24: Um método para o desenvolvimento de software baseado em microsserviços

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

• ArchaiusConfigurações

Page 25: Um método para o desenvolvimento de software baseado em microsserviços

Testando os microsserviços

Code Developer Test Test Acceptance

Test Acceptance Live

Método de desenvolvimento

Page 26: Um método para o desenvolvimento de software baseado em microsserviços

Apresentação

Processo

Domínio

Serviços

Páginas Grids / Panels

Controles

Casos de Uso Fluxos

Objetos de domínio Factories / Repositórios

Enuns, Tuplas, Reference Objects

Services gateway Services Clients

Info objects / Search objects

ComponentesAutenticação Clientes Relatórios

Page 27: Um método para o desenvolvimento de software baseado em microsserviços

Apresentação

Processo

Domínio

Serviços

Páginas Grids / Panels

Controles

Casos de Uso Fluxos

Objetos de domínio Factories / Repositórios

Enuns, Tuplas, Reference Objects

Services gateway Services Clients

Info objects / Search objects

ComponentesAutenticação Clientes Relatórios

Testes de integração BDD, Selenium

Testes Unitários

Testes Unitários

Page 28: Um método para o desenvolvimento de software baseado em microsserviços

Monitoramento Método de desenvolvimento

Page 29: Um método para o desenvolvimento de software baseado em microsserviços

Estudo de caso & Implementação

Page 30: Um método para o desenvolvimento de software baseado em microsserviços

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

Page 31: Um método para o desenvolvimento de software baseado em microsserviços

Front-end Estudo de caso

Page 32: Um método para o desenvolvimento de software baseado em microsserviços

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);

} }

Page 33: Um método para o desenvolvimento de software baseado em microsserviços

Spring Boot | bright-ms_auth (video) Estudo de caso

Page 34: Um método para o desenvolvimento de software baseado em microsserviços

Repositório Estudo de caso

https://bitbucket.org/kamihouse/bright_microservices

Page 35: Um método para o desenvolvimento de software baseado em microsserviços

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.

Page 36: Um método para o desenvolvimento de software baseado em microsserviços

Trabalhos futuros

• Advanced Message Queueing Protocol (AMQP)

• Programação reativa

• Segurança dos microsserviços

• Escalabilidade dos microsserviços

Page 37: Um método para o desenvolvimento de software baseado em microsserviços

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.

Page 38: Um método para o desenvolvimento de software baseado em microsserviços

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.

Page 39: Um método para o desenvolvimento de software baseado em microsserviços

Obrigado!

https://kamihouse.wordpress.com/2015/06/20/um-metodo-para-o-desenvolvimento-de-software-baseado-em-microservices

Page 40: Um método para o desenvolvimento de software baseado em microsserviços

UM MÉTODO PARA O DESENVOLVIMENTO DE SOFTWARE BASEADO EM MICROSSERVIÇOS

Thiago Pereira RosaEngenharia de SoftwareUniversidade Federal do Ceará

Orientador(a):Msc. Ticiana Linhares Coelho da Silva Co-orientador:Dr. Flávio Rubens de Carvalho Souza