Eu gostaria de criar um sistema que lida com mensagens de alerta de vários programas e possa processar esses alertas para consumidores de baixa velocidade por email. Tudo isso estaria contido em uma rede interna.
Eu acho que quero que a arquitetura básica fique assim:
A principal preocupação que tenho atualmente é o bit "Message Handler", que será o meu "tipo de API". Desejo que todos os componentes deste sistema enviem dados para a API, que lida com todas as gravações no banco de dados. Eu acho que essa abordagem é mais fácil porque simplifica a segurança e permite que eu contenha muitas das consultas de banco de dados mais complicadas em um único programa.
A preocupação é que eu queira que isso seja independente da linguagem - o que significa que qualquer código deve poder enviar mensagens para o meu manipulador - que as interpretará. Espero fazer isso via arquivos simples JSON - ou via chamadas REST para o programa (dando flexibilidade aos aplicativos de downstream).
Minha pergunta é-
Devo me preocupar com o manipulador de mensagens - ou acrescentaria simplicidade para permitir apenas o acesso direto ao banco de dados dos aplicativos de downstream, bem como dos outros dois componentes (Console de Gerenciamento e Alert Manager)?
Dessa forma, eles podem inserir qualquer alerta que desejarem - desde que o INSERT na (s) tabela (s) do banco de dados seja válido.
Não sou designer de software por profissão, então com licença - só quero que um projeto seja realizado no meu tempo livre.
fonte
Pergunta muito bem enquadrada!
Portanto, todas as decisões de arquitetura envolvem trocas. Se você está curioso para uma discussão sobre compensações, talvez edite sua pergunta nessa direção. Em vez disso, como a pergunta apenas pede uma posição, eu aceitarei o lado da argumentação a favor do MessageHandler. Vou dar um passo adiante para sugerir NÃO incluir um banco de dados - pelo menos não um banco de dados SQL, pelo menos para não iniciar. Basta fazer com que o MessageHandler salve o JSON no sistema de arquivos, digamos um diretório por hora de alertas recebidos (dependendo do volume, é claro) e tenha a API quando consultada pelo Alert Manager, apenas percorra os 2 últimos diretórios de alertas para decidir quais emails serão entregues (dependendo da prioridade, é claro).
Há um monte de coisas boas para tratar desse problema, e manter um banco de dados fora de cena nos estágios iniciais removerá muito ruído incidental e a solução desnecessária de problemas. Claro, talvez você tenha um amor oculto por criar modelos de dados relacionais e sonhe em escrever SQL. Nesse caso, esta resposta está totalmente errada. Mas, de um modo geral, mesmo os bancos de dados mais ágeis são plataformas de aplicativos terríveis e só são incluídos nos sistemas porque são especialistas em durabilidade e consulta indexada.
Boa sorte!
fonte