Data | Versão | Descrição | Autor |
---|---|---|---|
28/03/2019 | 1.0 | Criação do documento e preenchendo os tópicos | Gabriela, André, Pedro, Iuri, Gustavo |
09/04/2019 | 1.1 | Adicionando tópicos 2 e 5 e arrumando a maneira de apresentar a arquitetura | Guilherme Marques |
25/04/2019 | 1.2 | Criação do diagrama de pacotes, alterações no diagrama de casos de uso e revisão ortográfica. | Gabriela, Iuri, Pedro |
24/05/2019 | 1.3 | Alteração do diagrama de fluxo e adição das ferramentas Rancher e Nginx | Guilherme Marques |
14/06/2019 | 1.4 | Atualizando o documento de arquitetura | Guilherme Marques |
1. Introdução
1.1 Finalidade
Este documento oferece uma visão geral arquitetural abrangente do sistema. Desse modo, especifica decisões relevantes na produção e implementação do projeto Aix em relação ao assunto discorrido explicitando como acontecerá a comunicação dos diversos serviços contidos no software como um todo. Para isso, serão empregadas diversas características do projeto como casos de usos, restrições e requisitos, qualidade, desempenho dentre outros com a finalidade de fundamentar as decisões tomadas pelo arquiteto em conjunto do DevOps, PO, ScrumMaster e a Equipe de Desenvolvimento no decorrer da estruturação do escopo.
1.2 Escopo
Serão documentados neste trabalho os componentes de software, padrões, plataformas de desenvolvimento e frameworks necessários para a composição do programa que se dedica ao aprendizado de seus usuários da linguagem python. Resumidamente, o software consiste em um bot disponibilizado dentro de um de um script em JavaScript que pode ser executado dentro da plataforma Jupyter Notebook que será disponibilizada para download. O bot também será disponibilizado através do Telegram.
Neste artigo serão exploradas todas as informações relacionadas à arquitetura do projeto, como por exemplo diagramas de classes, casos de uso, entre outros.
1.3 Referências
1.5 Visão Geral
Esta obra será segmentada da seguinte forma:
- Introdução: Apresentará a organização do documento, junto a uma breve finalidade do software.
- Representação de Arquitetura: Demonstra a arquitetura adotada no trabalho.
- Restrições e Metas de Arquitetura: Exibe os requisitos de usabilidade do software e os propósitos que influenciam a aplicação.
- Visão de Casos de Uso: Revela os casos de uso da aplicação.
- Visão Lógica: Exibe elementos importantes do programa segundo a arquitetura adotada e a modelagem do design.
2. Representação de Arquitetura
2.1 Diagrama de Relações
A imagem acima mostra a relação entre os microsserviços. Abaixo será explicado quais são os microsserviços e suas relações com os outros começando pelos mais externos, o Jupyter Notebook e o Telegram, e finalizando com as Analitics, o ElasticSearch e o Kibana.
2.1.1 Jupyter
O Jupyter Notebook é uma ferramenta para código e para formatação de texto utilizada para ensino de conteúdo em Python com textos formatados para melhor aprendizado.
Esse container contém um Jupyter Notebook modificado com um script JavaScript para mostrar o chat do RocketChat para que o aluno possa praticar e para tirar dúvidas com a Aix.
2.1.2 Telegram/Webhook
O Telegram é uma plataforma de mensagem simultanea para conversas. O Telegram por sua vez tem uma API para cadastro de bots para conversas simultaneas tanto de grupos quando apenas com o bot.
O Webhook é um canal de comunicação entre a Aix, ou Rasa Core, para que seja estabelecida uma conversa entre o bot e o aluno. O Webhook funciona como um agente passivo que só agirá enviando requisições para o Rasa Core quando o agente, ou seja o Aluno, enviar uma mensagem para ele.
2.1.3 RocketChat
O RocketChat é uma ferramenta para criação de Chats, open source e customizável. Ele é utilizado para criar iframe dentro do Jupyter Notebook onde está o chat para comunicação com a Aix. O seu container contém tanto um Webhook para comunicação quanto o sistema do RocketChat.
2.1.4 Rasa Core/Actions
O Rasa é uma ferramenta open source para a criação de um uma AI de conversação, ela possui ferramentas do Tensorflow para interpretação de linguagem natural e interpretação da intenção do usuário para a escolha de uma resposta melhor.
Por decisão de projeto o Rasa foi dividido em 2 containers, uma para as intents, stories e interpretação de linguagem natural, o Rasa Core e o outro para comunicação com APIs externas e execução de comandos mais complexos, o Rasa Actions.
2.1.5 APIs Externas
As APIs externas estão listadas com as setas vermelhas no diagrama acima elas são:
- O UHunt a API do UVA Judge,
- O Stack Exchange a API do Stack Overflow.
2.1.6 ElasticSearch/Kibana
Esse ultimo tópico é destinado as ferramentas de análise para de texto e das conversas com a Aix.
Primeiro existe a ferramenta de análise que é o ElasticSearch que é um container para análise dos textos e geração de dados a partir das conversas com a Aix.
Segundo tem-se o Kibana que é a ferramenta para visualização desses dados gerados pelo ElasticSearch e a criação de métricas, tabelas e outras maneiras para a melhora contínua do bot.
2.2 Tecnologias
O ChatBot Aix será uma ferramente que irá utilizar várias ferramentas como interface como o Jupyter Notebook e Telegram e terá um servidor principal com alguns serviços. As tecnologias a seguir são as necessárias para implementação tanto do Front-End como do Back-End.
- Flask: microframework: Ferramenta em Python, para a comunicação das API’s do projeto. Será usado na versão 1.0.2.
- Docker: Ferramenta para gerar um ambiente isolado e construído especificamente para a equipe que será utilizado para facilitar o desenvolvimento do projeto.
- Git: Ferramenta de versionamento que será usada em conjunto com o GitHub para salvar os dados do decorrer do projeto, possibilitando a hospedagem e a geração de backups do mesmo. Será usada a versão 2.7.4 ou maior.
- CodeClimate: Ferramenta para análise estática do código
- Rasa Core+NLU: Ferramenta para criação do ChatBot. Será usada na versão 0.14.6.
- Flake8: Ferramenta de análise estática de código. Será usada na versão 3.7.7.
- Rocket Chat: Ferramenta para visualização do chat.
- Jupyter Notebook: Ferramenta de compartilhamento de documentos e códigos executaveis.
- Telegram: Aplicativo de troca de mensagem.
- Travis CI: Ferramenta utilizada para integração continua.
- ElasticSearch: Ferramenta de análise de texto.
- Kibana: Plugin do ElasticSearch para a visualização dos dados obtidos pelo mesmo.
- Rancher: Gerenciador e orquestrador de containers Docker.
- Nginx: Ferramenta de balanceamento de carga, reverse proxy.
O sistema deve garantir a privacidade dos dados inseridos em seu banco de dados, ele deve conseguir responder às requisições em poucos segundos e ter alta disponibilidade, aproximandamente 99% do tempo. Ela também deverá atender aos requisitos não funcionais, como disponibilidade, segurança, usabilidade, escalabilidade,e garantir a manutenibilidade do sistema.
3. Metas e Restrições da Arquitetura
São metas de Arquitetura:
- Disponibilizar ao usuário um fluxo constante de conversas para sanar a necessidade do usuário de aprender o básico sobre a linguagem Python.
- Desacoplamento e independência entre outros serviços.
- Monitoramenteo e escalabilidade dos serviços.
São restrições de Arquitetura:
- Serviços centrais como os do Rasa Core e o Rasa Actions não devem se comunicar diretamente com o cliente apenas através de interfaces e APIs Gateways.
- Conexão necessária com a internet.
4. Visão de Casos de Uso
4.1 Diagrama de casos de uso
4.2 Especificações dos casos de uso
Casos de Uso | Ator | Descrição |
---|---|---|
UC01 - Iniciar conversa | Usuário | Este caso de uso ocorre quando inicializa o bot e manda uma mensagem inicial |
UC02 - Enviar arquivo | Usuário | Este caso de uso permite que o usuário envie um arquivo de código para o bot |
UC03 - Dar feedback da compilação dos códigos | - | Este caso de uso ocorre após a compilação de um código, onde o bot avisa o usuário de possíveis erros e warnings que aconteceram na ação pedida e os explica, para que possam ser consertados |
UC04 - Salvar conversa | - | Esse caso de uso ocorre após o usuário fechar o programa. O bot automaticamente salva os dados da conversa para que num próximo uso seja possível rever os que já foi conversado |
UC05 - Corrigir exercícios por um juíz online | Juíz online | Esse caso de uso fornece ao usuário a opção de encaminhar seu código diretamente ao um juíz online que efetuará a correção do mesmo |
UC06 - Pesquisar erros e dúvidas | StackOverflow | Esse caso permite ao usuário fazer pesquisas diretamente no banco de dados do StackOverflow a partir das mensagens com o bot |
5. Visão Lógica
5.1 Diagrama de Pacotes