Pergunta

Temos dois sistemas onde o sistema A envia dados para o sistema B. É uma exigência que cada sistema pode ser executado independentemente do outro e nem vai explodir se o outro é baixo. A questão é qual é a melhor maneira para o sistema A para se comunicar com o sistema B enquanto atende a exigência de desacoplamento.

Sistema B tem atualmente um processo que pesquisa dados em uma tabela db e processa quaisquer novas linhas que foram inseridos.

Um projeto proposto é para o sistema A apenas para inserir dados em tabela db sistema de b e tem processo do sistema B as novas linhas pelo processo existente. A pergunta é se esta solução cumprir a exigência de dissociar os dois sistemas? É uma parte do banco de dados considerados de um sistema B, que pode se tornar indisponível e sistema de causar uma para explodir?

Outra solução é para o sistema A para colocar os dados em uma fila MQ e ter um processo que seria lido da MQ e, em seguida, inserir no banco de dados do sistema de B. Mas é essa sobrecarga apenas extra? Em última análise, é um MQ fila mais tolerante a falhas do que uma tabela db?

Foi útil?

Solução

De um modo geral, compartilhamento de banco de dados é um acoplamento próximo e não devem ser preferidos, exceto, possivelmente, para fins de velocidade. Não só para fins de disponibilidade, mas também porque o sistema A e B será alterado e atualizado em vários pontos em seu futuro, e deve ter dependências mínimos sobre o outro - passagem de mensagens é uma dependência óbvio, bases de dados enquanto compartilhados tendem a mordê-lo (ou seus herdeiros) na posterior quando menos se espera. Se você vai a rota de compartilhamento de banco de dados, pelo menos, fazer a interface de partilha explícita com mesas dedicadas ou pontos de vista.

Existem quatro níveis comuns de integração:

  1. compartilhamento de banco de dados
  2. O compartilhamento de arquivos
  3. chamada de procedimento remoto
  4. passagem de mensagens

o qual pode ser aplicado e combinada em várias situações, com diferentes disponibilidade e facilidade de manutenção. Você tem uma excelente visão geral na empresa padrões de integração local .

Tal como acontece com qualquer infra-estrutura de integração central, MQ deve ser hospedado em um ambiente com grande disponibilidade, failover completo & c. Existem outras soluções de fila que lhe permitem distribuir a coordenação fila.

Outras dicas

Use filas para comunicação. Não "passar" os dados do Sistema de A para B Sistema através do banco de dados. Você está usando o banco de dados como um gigante, caro, fila de mensagens complexas.

Use uma fila de mensagens como uma fila de mensagens.

Este não é overhead "Extra". Esta é a melhor maneira de sistemas de dissociar. É chamado de Service Oriented Architecture (SOA) e usando mensagens é absolutamente central para o projeto.

fila Um MQ é muito mais simples do que uma tabela DB.

Não compare "tolerância a falhas", porque um RDBMS usa enormes despesas gerais (quase inimagináveis) para atingir um nível razoável de segurança de que sua transação terminado corretamente. Locking. Carregando. Filas de gravação. Gerenciamento de armazenamento. Etc. Etc.

implementação A fila de mensagens confiável usa algum armazenamento de backup para manter o estado da fila. A sobrecarga é muito, muito menor do que um RDBMS. O desempenho é muito melhor. E é muito, muito mais simples de interagir com.

No SQL Server eu faria isso por meio de um pacote SSIS ou um trabalho (dependendo do número de registros e a complexidade do que eu estava em movimento). Outros bancos de dados também têm soluções de ETL. I como a solução ETL becasue I podem manter registros do que foi alterado e que erros foram processados, posso enviar registros que por algum motivo não vai para o outro sistema (estruturas de dados são raramente o mesmo entre dois bancos de dados) para uma exploração mesa sem matar o resto do processo. Eu também pode fazer alterações aos dados à medida que flui para ajustar as diferenças de banco de dados (coisas como valores de tabela de pesquisa, dizem que o estado concluído em db1 é de 5 e é 7 em DB2 ou dizer DB2 tem um campo obrigatório que db1 não e você faz tem que adicionar um valor padrão para o arquivado se for null). Se um ou outro servver é baixo o trabalho de executar o pacote SSIS irá falhar e nem sistema serão afetados, por isso mantém os datbases dissociados como usar disparadores ou replicação não.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top