Documentação oficial do projeto horizontes, um projeto sem fins lucrativos que abrirá os horizontes dos jovens brasileiros para as oportunidades que existem e fazem mais sentido para o seu perfil.
Para essa primeira versão (MVP), objetivamos criar uma landing page onde o estudante pode preencher com seus dados e receber recomendações de instituições baseadas no match com as informações inseridas. Esse match é realizado através do envio das informações para a API do ChatGPT, retornando as principais instituições e motivo do match.
No momento a implementação conta com 3 microsserviços essenciais e alguns outros que serão necessários nas próximas etapas, apresentados a seguir.
Interface - Responsável por guardar as rotas que estão presentes no microsserviço, bem como as informações esperadas para enviar um request e receber a resposta.
Implementação - Implementação do microsserviço de fato, onde é realizado o contato com o banco de dados e aplicadas as lógicas de negócio.
Existem duas branches principais nos projetos, a main e a deploy.
A main é a branch principal para densenvolvimento, então todas as novas alterações são inseridas nela e ela é configurada para que o microsserviço possa ser rodado localmente na máquina ou em um docker compose local.
A branch deploy apresenta configurações usadas para subir o microsserviço na cloud e tem as alterações realizadas na main depois de maturadas. Foi utilizado o pipeline jenkins e o EKS da AWS para realizar esse deploy automatizado.
Microsserviço responsável por gerenciar as informações dos alunos (pessoas em busca de oportunidades). O microsserviço de aluno conta com:
Microsserviço responsável por gerenciar as informações das instituições e oportunidades cadastradas na plataforma, desde instituições de ensino superior, cursinhos para olimpíadas, vestibulares militares, entre outros. O microsserviço de instituição conta com:
Microsserviço responsável por gerenciar as recomendações (matchs) entre um aluno e uma instituição parceira cadastrada na plataforma. Esse microsserviço recebe o id de um aluno cadastrado na base de dados, utiliza a api de embeedings da OpenAI e retorna as k instituições com maior match (por uma busca por similaridade vetorial) com o aluno, salvando no BD. Esse microsserviço foi implementado python (fastapi). Também foi desenvolvida uma versão dela para o POC usando a api do chatGPT, disponivel abaixo.
Implementação recomendação python
Implementação recomendação em java
Microsserviço responsável por gerenciar as contas presentes na plataforma. Para próximas versões, teremos diferentes tipos de usuário (como o admin, aluno, tutor, coordenador de instituição) que poderão realizar um login na plataforma. Esse microsserviço então será acoplado para integrar o ecossistema e permitir uma interação a longo prazo com a plataforma. Esse micrroserviço conta com:
Microsserviço responsável por gerenciar autenticação da plataforma. Conta com uma implementação de Json Web Token (JWT) que é salvo no header da requisição para permitir verificar quem é o usuário (autenticação) e permitir acesso ao recurso que requisitou (caso tenha direito). Ele conta com:
Microsserviço que recebe todas as requisições, valida a necessidade de autenticação e redireciona para o próximo microsserviço (discovery).
Microsserviço que recebe uma requisição interna e redireciona para o microsserviço que implementa a rota buscada, pois ele tem o mapeamento de portas em que cada microserviço está operando, além de realizar o balanceamento de carga. Ele trabalha em conjunto com o gateway para que seja possível a requisição chegar até o microsserviço correto somente com a informação do endpoint.
Ferramenta utilizada para a implementação contínua, integração contínua e entrega contínua (CI/CD). Utilizamos para automatizar o deploy da aplicação.
Nesse projeto foi utilizado o docker compose para criar um ambiente mais próximo de uma implementação em produção, permitindo a execução de todos esses microsserviços em uma rede privada criada pelo docker, em que só o gateway precisa estar visível para máquinas externas. O repositório abaixo apresenta o docker compose utilizado:
Para executar o projeto só é preciso clonar os repositórios apresentados até então, numa mesma pasta e executar os comandos:
cd ./docker-compose
docker compose up -d --build