Pular para o conteúdo principal

Arquitetura de Software

O E-Docs é um sistema complexo, possuindo muitos módulos em sua arquitetura de software para permitir a escalabilidade do mesmo. O início de seu desenvolvimento se deu num formato mais monolítico, mas conforme cresceu sua utilização, foi necessário segmentar sua execução em vários serviços diferentes. Atualmente, estamos num processo de revisão da arquitetura, aproveitando 6 anos de experiência neste e em outros projetos para simplificar algumas decisões de arquitetura e trazer uma arquitetura de software que seja mais simples e fácil de manter, com total foco em desempenho e escalabilidade.

Aplicações

De uma forma geral, o E-Docs é composto pelas seguintes aplicações:

Aplicação WEB

O acesso dos usuários através de navegador é feito no módulo WEB. Este módulo é responsável por toda a interação com o usuário, desde a autenticação até a execução de tarefas como captura de documentos, autuação de processos e encaminhamento de documentos. Trata-se de uma aplicação ASP.NET MVC, utilizando Entity Framework para acesso ao banco de dados, cliente HTTP para comunicação com outras APIs como Acesso Cidadão e Organograma, e cliente ElasticSearch para consultas mais elaboradas como as Caixas de Documentos, Processos e Encaminhamentos. O cache de dados é distribuído em duas camadas, sendo uma local e outra utilizando o Redis.

Aplicação API

O E-Docs possui uma API pública utilizada para integração de outros sistemas com o E-Docs. Esta API é utilizada para operações de consulta de metadados públicos, captura e encaminhamento de documentos, além de atos processuais como autuação, despacho e entranhamento. A API é uma aplicação ASP.NET Web API, compartilhando os mesmos recursos da aplicação WEB como Entity Framework, cliente HTTP, ElasticSearch e cache distribuído.

Aplicação DevArea

Para facilitar o suporte e solução de problemas por parte dos desenvolvedores, o E-Docs possui uma aplicação à parte, chamada DevArea, onde é possível consultar informações e até executar algumas operações, permitindo aos desenvolvedores corrigir eventuais falhas ou comportamentos inesperados.

Aplicação BackgroundJobs

Para realização de tarefas agendadas ou em segundo plano, que independem da conectividade do usuário no momento de sua execução, o E-Docs dispõe de uma aplicação Background. Esta aplicação é responsável por tarefas como envio de notificações, execução de processos de credenciamento e outras tarefas de execução rotineira, como a geração de Documentos Elo.

Aplicação de ProcessJobs (Filas de Processamento)

Como forma de permitir o incremento de escala de processamento, o E-Docs adota um sistema de filas baseado no padrão Outbox pattern. As principais ações do sistema são enviadas para uma fila de processamento, a qual é responsável por equilibrar a capacidade de processamento do sistema, principalmente por concentrar tarefas pesadas como capturas, encaminhamentos e despachos do processo.

APIs Internas

API de Certificado

Para permitir a captura de documentos no padrão ICP-Brasil, é necessário que o E-Docs valide um certificado digital antes de capturar um documento por ele assinado, garantindo assim que, no momento da captura, aquele certificado ainda estava válido e não havia sido revogado pelo seu detentor. Para isto, o E-Docs dispõe de uma API de Certificado, que é responsável por realizar os procedimentos de leitura do certificado e suas verificações.

API de PDF

O elemento central de um sistema de Documentos Eletrônicos como o E-Docs é processamento de documentos do tipo PDF. No E-Docs, a manipulação de PDFs é feita pela API de PDF, a qual permite ao sistema carimbar, mesclar, ou até mesmo gerar páginas em PDF a partir de um template HTML.

API Document Models

Para elaboração de documentos dinâmicos, o E-Docs dispõe de uma API de Document Models, a qual permite a criação de documentos a partir de um template HTML, preenchendo campos dinâmicos com informações do sistema. Esta API é utilizada para elaboração de termos, páginas de metadados, entre outras coisas.

Nova Arquitetura do E-Docs

Como esforço para melhorar a estabildiade e escalabilidade do sistema, bem como facilitar a manutenção e evolução do mesmo, o E-Docs está passando por uma revisão de sua arquitetura de software. A nova arquitetura do E-Docs é composta por várias APIs, cada uma responsável por um conjunto específico de funcionalidades. Há uma inspiração na arquitetura de microserviços, mas com um foco na redução de comunicação exagerada entre os serviços, uma vez que cada chamada as APIs busca resolver casos de uso específicos, o que garante uma maior eficiência e desempenho. As APIs são:

API Negócio Query

Com o foco em consultas de dados, a API Negócio Query é responsável por prover informações sobre processos, documentos, encaminhamentos e outros casos de uso do sistema. A partir desta api são construídas várias páginas do sistema, como a página de caixas de processos, encaminhamentos, contadores da tela inicial, entre outras. O mote desta API é prover informações de forma rápida e eficiente, sem a necessidade de processamento adicional.

API Agente Query

Como esforço de simplificar e melhorar a performance do sistema, a API Agente Query é responsável por prover informações sobre os agentes do sistema, como usuários, grupos, unidades organizacionais e outros. Todos estes dados são originários dos sistemas Acesso Cidadão, Organograma e Lotação e cabe a API Agente Query prover estas informações de forma rápida e eficiente, garantindo que todos os serviços do E-Docs façam uso da informação de forma padronizada.

API Elastic Query

O E-Docs utiliza de forma massiva um banco de dados orientado a documentos chamado ElasticSearh. Neste serviço de armazenamento, temos varias informações pré-processadas para simplicidade nas consultas e interpretação do estado dos dados. Esta API Elastic Query tem por objetivo concentrar e padronizar toda a comunicação do E-Docs com os dados armazenados no ElasticSearch e simplicar o processo de manutenção da aplicação, além de tornar mais claro os casos de uso onde os dados tem como origem este armazenamento.

API Notificações Composer

Assim como outras APIs da Nova Arquitetura, a API Notificações Composer tem por objetivo simplificar e padronizar a comunicação do E-Docs com o serviço de notificações. Esta API é responsável por compor e enviar notificações para os usuários do sistema, garantindo que as mensagens sejam entregues de forma rápida e eficiente.

API Negócio Base

Para garantir que as regras de negócio do sistema sejam aplicadas de forma consistente e padronizada, o E-Docs dispõe de uma API Negócio Base, a qual é responsável por concentrar e permitir a reutilização de regras de negócio comuns a vários módulos do sistema, de forma a evitar que a mesma regra de negócio seja implementada em vários lugares, o que dificulta a manutenção e evolução do sistema, bem como aumenta a possibilidade de bugs ao potencializar a implementação de versões diferentes da mesma regra.

API Classificação Query

Algumas informações utilizadas pelo E-Docs são acessórias e podem, no futuro, serem compartilhadas com outros sistemas similares. Para endereçar este cenário, a API Classificação query é responsável por prover informações sobre classificação documental, como plano de classificação, classes e fundamentos legais para restrição de acesso. Esta API é responsável por prover informações de forma rápida e eficiente, garantindo que os dados sejam acessados de forma padronizada e consistente.

API Usuário Manager

Para garantir que a autorização dos usuários seja feita de forma segura e eficiente, o E-Docs dispõe da API Usuário Manager, quem também é responsável por gerenciar funcionalidades personalísticas dos usuários, como processos favoritos.

API Negócio Command

Com o foco em operações que promovam alterações no E-Docs, a API Negócio Command é responsável por executar ações como marcar Encaminhamentos como lidos, incluir ou remover processos de pastas, entre outros.

CDN

Para simplificar o processo de entrega de conteúdo estático, o E-Docs utiliza um CDN (Content Delivery Network) para prover imagens, scripts e estilos estáticos para aplicação. O CDN é responsável por entregar o conteúdo de forma rápida e eficiente, garantindo que a aplicação seja carregada da forma correta. Esta estratégia possibilita uma simplificação do processo de monitoramento e manutenção da aplicação, visto que o carregamento de conteúdo estático é feito de forma independente da aplicação principal, além de permitir que, no futuro, o desenvolvimento de novas aplicações WEB possam fazer uso dos mesmos elementos.