Abbiamo due prodotti che chiamiamo X e Y. Product-X è stato creato e ha numerosi clienti nei continenti, mentre lo sviluppo di Product-Y è iniziato qualche anno fa e deve ancora godere di qualsiasi cliente.
Ci siamo imbattuti in uno scenario in cui dobbiamo sincronizzare i dati e le azioni tra entrambi i sistemi. Questo può essere fatto in qualsiasi momento, ad es. i client possono utilizzare i sistemi da soli e in un secondo momento vorrebbero sincronizzarli.
Ora ospiteremo sempre Product-X sulle nostre server farm. Tuttavia i client possono o meno farlo per Product-Y e ospitarli localmente in proprio server farm. Sono molto nuovo nella progettazione di sistemi, quindi sto chiamando questi sistemi distribuiti che potrebbero non essere il termine giusto.
Entrambi i prodotti sono diversi e avranno sempre il proprio database e struttura indipendentemente dal fatto che si trovino nello stesso ambiente o nella server farm del cliente.
Esempio
- Sincronizzazione dei dati in base agli eventi, ad es. se qualcuno crea qualcosa in Product-X, deve essere creato anche in Product-Y ma seguendo diversi passaggi logici e lo stesso per quando qualcosa viene creato o aggiornato in Product-Y.
Soluzione possibile
-
Qualsiasi operazione che si verifica in qualsiasi sistema invierà i dati all'altro sistema utilizzando servizi generici e l'altro sistema deciderà cosa fare con esso.
-
Crea una cache di dati su entrambe le estremità, ad es. nelle tabelle SQL. Ciò significa che entrambi i sistemi non si chiederanno mai dati a vicenda o se hanno bisogno di qualcosa invieranno solo un flag e riceveranno una richiamata con dati.
-
Entrambi i sistemi avranno endpoint (servizi WCF) per connettersi l'un l'altro.
Domanda
- Va bene conservare una cache di dati, se no, quale sarebbe il design giusto per questo scenario?