/mastering-music-store

The 'Mastering Music Store' project was developed to validate my own knowledge of the various technologies currently used in the labor market. The goal is to study and further improve my knowledge in addition to being able to help new or experienced developers apply in your company, the whole project is open-source and anyone who feels the willingness to contribute will be welcome.

Primary LanguageShellMIT LicenseMIT

Mastering Music Store

O projeto 'Mastering Music Store' será desenvolvido para validar meus conhecimento das várias tecnologias utilizadas atualmente no mercado de trabalho. Não pretendo entrar em detalhes ou prover conhecimentos para soluções definitivas, ou servir como base de uma 'implementação adequada' - muito longe disso, é apenas um projeto com uma grande gama de tecnologia abordada de forma simples.

O objetivo é estudar e melhorar ainda mais meus conhecimentos, além de poder ajudar desenvolvedores novos ou experientes a aplicar esses conceitos em sua empresa, todo o projeto é de código aberto e qualquer um que quiser contribuir será bem-vindo.

Tecnologias

As tecnologias empregadas nesse projeto seram distribuidas conforme a necessidade de cada serviço.

  • Microservices - Técnicas de desenvolvimento de software baseado em micro serviços
  • Domain-Driven Design (DDD) - Abordagem para desenvolvimento de software para necessidades complexas
  • CircleCI - Plataforma de CI/CD
  • ELK - Realizar monitoramento de log, O Stack Elastic (ELK) é o conjunto formado pelas ferramentas Elasticsearch, Kibana, Logstash
  • Spring Cloud Netflix (Zuul, Eureka) - O Spring Cloud Netflix fornece integrações Netflix OSS para aplicativos Spring Boot
  • Spring Cloud Config - O Spring Cloud Config fornece suporte ao servidor e ao cliente para configuração externalizada em um sistema distribuído.
  • Spring Boot - O Spring Boot facilita a criação de aplicativos baseados em Spring autônomos e de produção que você pode "executar".
  • Flyway - Controle de versão e migração para banco de dados
  • MySQL - Banco de dados SQL
  • MongoDB - Banco de dados NoSQL
  • H2 - Banco de dados para os testes
  • Swagger - Documentação de API de forma dinâmica
  • JPA/Hibernate - Framework para persistencia de dados / ORM
  • Docker - Executa e gerencia aplicações dentro de invólucros chamados containers
  • RabbitMQ - RabbitMQ é um servidor de mensageria
  • jUnit5 e Mockito - Framework para execução de testes
  • Kotlin - Kotlin é uma Linguagem de programação multiplataforma que compila para a Máquina virtual Java

Sobre o projeto

Irei utilizar como referência todo o escopo do projeto music-store-api; O Music Store API trata-se de uma API para consultas e vendas de discos, sua base de dados é alimentada pela API do Spotify, na venda do disco é gerado um cashback de acordo com o dia da semana e o genêro de cada disco. A idéia do Mastering Music Store é a mesma, disponibilizar API's para consultas e vendas de discos e cadastro de usuários.

Especificações

  • TO DO

Desenvolvimento

Utilizando a idéia do music-store-api, irei desenvolver todo o sistema em API's separadas - tentando abordar um pouco o conceito de microservices e outras tecnologias. Para gerenciamento e controle dos microserviços será adicionado na primeira camada do projeto uma API Gateway que será desenvolvida utilizando a dependência do Spring Cloud Netflix - Zuul, em complemento com o Zuul, será inserido o Spring Cloud Netflix - Eureka como Service Discovery para termos um melhor controle dos serviços em execução e permitir futuramente um Load Balance(Ribbon) adequado, ainda na utilização do Spring Cloud irei implementar o Spring Cloud Config, que em um sistema distribuído será responsável em fornecer suporte para externalizar configurações.

A imagem a seguir mostra como será feita a divisão de contextos:

Atravéz dessa divisão, definimos os seguintes serviços para nosso sistema:

A porta de entrada API Gateway receberá as requisições e disponibilizará rotas apenas para os serviços de Usuário, Venda e Discos, os demais estarão protegidos pois serão responsavéis apenas para trafegos de dados entre os demais. O serviço de Descontos fornecera sob demanda dados de desconto para determinados discos de acordo com seus gêneros, para finalizar possuimos o serviço de Importação que obterá dados do Spotify e publicará em uma fila para ser cadastrados, esse serviço de importação será desenvolvido com o conceito de ELT (Extração, Transforção e Carga).

Para comunicação entre os serviços, troca de mensagens assincronas e Log, iremos utilizar o RabbitMQ, para os Logs será implementado um stack com o ELK de acordo com o seguinte fork: EnterpriseApplicationLOG

Atravéz desses dados foi definido a seguinte arquitetura base para o mastering-music-store


PROJECT IN DEVELOPMENT


Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

Please make sure to update tests as appropriate.

License

MIT