Come implementare l'applicazione che si connetterà al server consentendo al server di richiedere i dati

1

Non sono sicuro di cosa intitolare questa domanda o se questo è il posto giusto per chiederlo. Dopo aver fatto ricerche su Google e sono uscito continuamente vuoto, mi sto rivolgendo qui come ultima risorsa.

Ho sviluppato un'applicazione web SAAS che genera report complessi per i nostri clienti. I report vengono generati prelevando i dati dall'istanza del servizio SQL del nostro cliente. Attualmente accediamo a SQL Server tramite VPN.

Avere accesso completo alla rete a più server client tramite VPN è un rischio per la sicurezza che vorremmo allontanarci. La mia idea è di scrivere un agente che verrà eseguito come servizio Windows che si connetterà ai nostri server e attenderà le richieste di dati dall'istanza del server SQL a cui avrà accesso tramite la rete locale.

La mia domanda è come implementare la connessione tra il servizio Windows e i miei server. Il requisito principale è che sia sempre connesso e pronto a servire i dati da SQL Server. Un'opzione che ho incontrato è l'utilizzo di RabbitMQ in una configurazione RPC, ma questa è l'unica soluzione che ho trovato. Quali sono altri modi praticabili per implementare questo tipo di soluzione?

Ritengo che questo non sia un requisito del tutto inusuale, ma ho trovato pochissime informazioni online che mi hanno indirizzato nella giusta direzione.

    
posta Icode4food 15.03.2016 - 09:05
fonte

2 risposte

1

C'è qualcosa che ti impedisce di utilizzare una connessione socket TCP tradizionale? Potresti anche essere in grado di farla franca con una soluzione websocket (HTML5 - anche costruita su TCP). Non hai menzionato quale lingua stai sviluppando, ma la mia ipotesi è che sia Java o C # e in tal caso, troverai migliaia di tutorial, esempi di codice e librerie predefinite disponibili su Internet per aiutarti a farlo e esecuzione.

Spetterà a te criptare in modo appropriato i dati che vorrai inviare su Internet, ma di nuovo, sono al 100% positivo che potresti trovare esempi di algoritmi di crittografia comuni.

Per quanto riguarda la scalabilità, con connessioni costanti a tutti i client, dovrai eventualmente mettere più server online per gestire il carico extra dai client connessi. Ti imbatterai in questo problema con qualsiasi soluzione che finisci per implementare (compresa la tua attuale soluzione VPN). In effetti, probabilmente raggiungerai i limiti della tua soluzione VPN prima di quanto faresti con qualsiasi tipo di architettura client / server tradizionale.

    
risposta data 15.04.2016 - 08:00
fonte
0

Approccio 1 (tradizionale):

  • Tutte le istanze di Sql Server hanno demoni di editori che rispondono alla richiesta inviata sulla directory sftp in base all'approccio del watcher di file.
  • Un'istanza simile è quindi in esecuzione sul lato del consumatore che sta aspettando la risposta dal publisher.
  • Utilizza il pattern Regex che definisce con precisione il client insieme ai resolver di richiesta. Astenersi dall'integrare qualsiasi logica aziendale in esso.

Nota: gli editori possono essere il tuo servizio di Windows.

Pro:

  • Tunnel Vpn non richiesto per ogni server.

Con:

  • Ogni server Sql necessiterebbe di un'installazione di editore che aggiunga ulteriore manutenzione.

Approccio 2:

  • Utilizza un framework di coda (coniglio / Kafka)
  • Demone consumer centralizzato prende la richiesta dai servizi e la invia a q.
  • Il demone editore installato su tutte le istanze del server Sql legge il messaggio e risponde ai dati in base alla richiesta specificata sul server previsto.
  • Il demone del consumatore riceve la risposta e la associa alla richiesta di servizio appropriata.

Pro:

Non credo che sia un Guarda solo ingegneria.

Con:

  • Con questo approccio hai ancora bisogno di un tunnel per comunicare.
  • Manutenzione dal momento che l'editore è attraverso i client.
  • È necessario dedicare una buona quantità di tempo alla gestione dell'architettura di richiesta / risposta q dal momento che ci sono molti casi d'angolo da gestire a livello di editore / consumatore e tra il consumatore e il thread del servizio Web.

Approccio 3:

  • Utilizzare Spring JDBC per creare più connessioni al database che verrebbero inizializzate insieme al servizio (il pool di connessioni deve essere parte di questa implementazione). Questa è una soluzione centralizzata che è facile da mantenere ma richiede di nuovo Vpn.
risposta data 16.03.2016 - 05:34
fonte

Leggi altre domande sui tag