Come gestire correttamente le transazioni di accesso ai file?

1

Sto cercando buone pratiche o qualsiasi consiglio riguardante i meccanismi di transazione per l'accesso ai file . Avremo più istanze di un'applicazione distribuite su una rete ridondante (cloud) che guarda una directory su un NAS disponibile al 100%. Sto anche cercando un'architettura alternativa che potrebbe essere più appropriata.

  • Avremo migliaia di dispositivi mobili che accedono al sistema ogni minuto. I dispositivi producono un file binario (immagine ad esempio) che viene inviato a un servizio RESTful senza trasformazione. Il dispositivo deve eseguire rapidamente il lavoro per preservare la batteria.
  • Poiché il servizio RESTful deve prendere l'input il più velocemente possibile, il file binario viene attualmente scritto direttamente come file in un NAS con disponibilità al 100%.
  • Se si verifica un errore (il file non viene scritto correttamente), il client viene avvisato e può riprovare.

Dobbiamo creare un servizio di lavoro che guarderà la cartella di file per i nuovi file per elaborarli. L'operatore li convertirà in un altro formato, quindi li sposta in un'altra cartella sul NAS. Utilizzeremo il maggior numero possibile di istanze per gestire il carico.

La mia preoccupazione principale riguarda l'accesso ai file. Il servizio RESTful sta scrivendo su un file temporaneo con un'estensione che il servizio worker sta ignorando (.tmp), quindi dopo che l'ultimo byte è stato scritto, il file viene rinominato. Il processo è veloce, ma non possiamo permetterci il caso in cui 2 o più servizi di lavoro accedono allo stesso file nello stesso momento.

Abbiamo bisogno di un meccanismo di transazione o di qualsiasi altro modello di architettura di entreprise.

Esiste qualche tipo di meccanismo di transazione del file system che viene ridimensionato?

    
posta Mat 09.05.2012 - 10:23
fonte

2 risposte

3

Un database, ad esempio, gestirà questa situazione in una transazione e quasi tutti i db con l'eccezione di MSAccess e SQLite gestiranno questo più veloce, più affidabile e più efficiente dell'accesso ai file.

Un'altra possibilità è quella di utilizzare uno dei tanti gestori di code disponibili (RabbitMQ, WebsphereMQ ecc.) che faciliterebbe anche qualsiasi problema di pianificazione e di bilanciamento del carico.

    
risposta data 09.05.2012 - 11:57
fonte
1

La mia comprensione dalla descrizione è, per il servizio RESTful:

Input:

1- Un file (e il suo nome)

Output: 1- Un file temporaneo

2- Un file temporaneo rinominato

Problema:

Impedisci l'accesso ai file da 2 servizi.

Suggerimento:

In base a ciò, se si nomina il file temporale in output (1) con un nome univoco per ogni file, ad esempio GUID + qualsiasi nome di file, è possibile generare un file temporaneo sicuro e univoco nome. Solo l'istanza del servizio che ha creato il file temporale conosce il GUID. La stessa istanza utilizza lo stesso valore per rinominare il file temporaneo dopo che è stato spostato dalla cartella temporanea.

    
risposta data 09.05.2012 - 12:14
fonte