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


drawing



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:

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

drawing

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

drawing