Qual è il modo migliore per eseguire il failover offline di un client basato sul desktop che utilizza un servizio Web?

13

Ho tre progetti in arrivo che condividono un problema comune:

they need to have the logic on a web system and they need a local application (e.g. point of sale) that communicates with such system through a RESTful web service.

La mia soluzione

La soluzione che sono riuscito a realizzare è implementare nell'applicazione desktop accodamento dei messaggi per archiviare le operazioni mentre il servizio è offline, più precisamente, accodamento di messaggi asincroni . Tuttavia, questa è la parte facile (se tale è la soluzione migliore). Mi occupo anche della sincronizzazione dei dati e della risoluzione dei conflitti.

Il sistema principale deve essere basato sul Web poiché è necessaria un'app Web per i report e il monitoraggio da parte degli stakeholder e i servizi Web gestiscono le richieste per diversi stabilimenti.

I client desktop (preferibilmente sottili) saranno implementati con Java (più specificamente Netbeans) e il sistema web con Symfony2. Due dei progetti richiedono l'integrazione dell'hardware per il cliente, quindi rendere l'applicazione desktop con tecnologia Web (ad esempio Appcelerator Titanium) potrebbe essere un grosso problema.

La mia domanda

  1. Qual è la soluzione migliore che si adatta alle dimensioni, ovvero la massima efficienza con il minimo sforzo (e preferibilmente senza costi aggiuntivi, come l'acquisto di un server di backup per le operazioni locali)?

  2. Chi altri l'ha già trattato? Come hai risolto il tuo problema? Quali lezioni puoi condividere?

  3. Come hai gestito la sincronizzazione?

Modifica: aggiunta una parte mancante alla mia domanda al punto # 3

    
posta dukeofgaming 18.05.2011 - 07:10
fonte

3 risposte

3

So che la tua domanda è java, ma mi piace molto questa architettura di bus dei messaggi per questo tipo di cose

Fondamentalmente quando i messaggi vengono inviati ottengono potenzialmente due risposte. Il primo proviene dalla cache locale, il secondo dal server una volta collegato.

Sono abbastanza sicuro che potresti adattare questa architettura (rhino bus e nhib) ai tuoi (MQ e hib) abbastanza facilmente.

    
risposta data 26.05.2011 - 23:11
fonte
10

Fai tutto localmente e sincronizza periodicamente .

Ecco cosa farei se fossi in te (non sono a conoscenza del framework di sincronizzazione in Java come in .NET).

Conserva un timestamp nell'applicazione locale che manterrà l'ultima volta che ti sei connesso correttamente.

Indipendentemente dal tempo di ricollegamento, tale timestamp verrà utilizzato per estrarre nuovi dati, quindi inviare nuovi ordini generati localmente.

Quindi manterrai due timestamp. Uno per definire quando l'ordine è stato creato (localmente o online) e uno quando è stato registrato dal server.

Non raccomando Accodamento messaggi per quello. In passato ho utilizzato MQ per un sito di e-commerce che doveva essere collegato a Navision. Tutto è stato gestito all'interno di Navision e le modifiche sono state inviate al sito di e-commerce tramite MQ, incluso lo stato dell'ordine e tutte le descrizioni dei prodotti, i prezzi, ecc. Nuovi ordini sono stati inviati a Navision anche tramite MQ.

    
risposta data 18.05.2011 - 09:34
fonte
1

O dovresti guardare a implementazioni di database di sistemi connessi occasionalmente che fanno il lavoro di sincronizzazione dei client remoti al server. (SQL Server ha questo con SQL CE in misura, Outlook lo fa).

In questo modo, è possibile eseguire tutte le modifiche localmente in un database di ingombro ridotto (mantiene il controllo delle versioni / logici logici ecc. in modo da non doversi preoccupare degli orologi del PC, ecc.) e ogni volta che si va online, si sincronizza questo con il server principale.

Non sceglierei una soluzione REST quando il sistema non può essere online la maggior parte del tempo.

    
risposta data 23.05.2011 - 07:40
fonte

Leggi altre domande sui tag