Paragoni di cambio efficienti tra sistemi di rete

0

Panoramica

I've got 2 systems over a network. The 2nd system produces some results based on the current contents of system A. How can I efficiently produce results in system B if getting the contents of system A takes a long time?

Sitazione attuale

  • Ho un sistema, sistema A, che mantiene i clienti (dettagli personali, ecc.). L'utente può inserire manualmente gli hit in questo sistema.

  • Ho un altro sistema, sistema B, che esegue, ogni notte, alcuni controlli su ciascun cliente. Controlla se un cliente appare su una lista di persone con restrizioni producendo un resoconto di hit. Un utente controlla ogni mattina questo sistema e controlla manualmente i risultati prodotti. Se un hit viene approvato, viene inviato tramite POST per il salvataggio nel sistema A.

Il problema

L'utente potrebbe aver inserito un hit manuale nel Sistema A, che è stato trovato automaticamente anche nel Sistema B.

Soluzione A

Send a GET request to system A, every time I present system's B overnight results to the user, to get the existing hits and filter them out of hits produced by System B

Per migliorare questa discrepanza, ogni volta che presento i risultati del sistema B al mattino, posso inviare una richiesta GET per ottenere i risultati esistenti di un cliente nel Sistema A e quindi eseguire un confronto, filtrando i risultati che esiste nei successi di A e B.

Questo mi consente di mostrare solo i nuovi successi nel Sistema B. L'utente visualizza solo i nuovi hit trovati.

Un problema con questa soluzione

Non posso efficientemente sapere in anticipo quanti nuovi colpi effettivi esistono nel Sistema B. Ho bisogno di GET 50.000 clienti, dal Sistema A, ogni volta che voglio ottenere il numero di nuovi colpi.

Soluzione B

Send a GET request to system A, when a hit is produced by System B, overnight, to see if it's really a new hit that doesn't exist in System A.

Problema con questa soluzione

Poiché la richiesta GET viene inviata al momento quando viene prodotto un hit durante il controllo dell'elenco e non quando i risultati vengono presentati all'utente, potrebbe esserci una mancata corrispondenza. L'utente potrebbe non aver teso ai risultati di System B e andare avanti e inserire manualmente un hit nel sistema A. Il sistema B mostrerebbe comunque che il colpo inserito manualmente dal sistema A è un nuovo successo nei risultati mattutini del sistema B.

Esiste un modo standard per gestire tali problemi?

Dettagli

  • I 2 sistemi sono basati su Node.js / Express framework. Ho costruito io stesso quei sistemi in modo da avere il pieno controllo su di essi.
  • I sistemi possono comunicare tra loro utilizzando un'API REST.
  • Mi piacerebbe mantenere i 2 sistemi disaccoppiati, onorando il principio di singola responsabilità - ovvero il sistema A tiene semplicemente dati, il sistema B esegue schermate automatiche ecc. In particolare vorrei evitare di intrecciare le funzionalità tra ogni sistema
posta Nik Kyriakides 30.03.2017 - 12:35
fonte

1 risposta

0

Ho risolto questo problema con una combinazione di quanto segue:

Cache HTTP

Per ottenere i nuovi hit, invio una richiesta di GET per afferrare gli hit dal sistema A. Quella richiesta di GET viene memorizzata nella cache esattamente per 1 minuto. Eventuali richieste successive vengono fornite dalla cache anziché recuperarle nuovamente in rete.

Potrebbe esserci una mancata corrispondenza nel nuovo hit count ma è per periodi di tempo molto brevi (quando la cache è obsoleta). Posso certamente vivere con quello

Ignora la cache quando l'utente focalizza l'attenzione e ottiene una nuova copia

Quando l'utente si concentra su un particolare hit (ed è pronto a trasferirlo), eseguo nuovamente una richiesta GET diretta per quella particolare parte di dati, ignorando la cache.

Questo garantisce che quando l'utente sta per prendere una decisione / operazione su un hit, viene presentato con una porzione di dati garantita e non aggiornata.

    
risposta data 31.03.2017 - 03:59
fonte

Leggi altre domande sui tag