Come eseguire lavori batch tramite webservices o rest api

0

Ho un sito AppHarbor in cui ho bisogno di fare aggiornamenti settimanali ad alcuni dati. Non voglio seguire il percorso di distribuzione di un exe e aggiungere un ulteriore "webworker" al mio sito perché costano. Il mio pensiero è di aggiungere un servizio web / servizio API REST al sito in modo che possa chiamarlo, eseguirà il "batch job stuff", quindi quando sarà completo, restituirà un codice di stato personalizzato, come successo o fallimento. Dietro le quinte, aggiornerebbe una tabella "BatchLog" o qualcosa del genere, quindi potrei creare una pagina / vista in cui potrei accedere ai dettagli del registro e vedere quali processi batch hanno o non sono stati eseguiti.

Quindi, è così che sto pensando di voler implementare, ma sono un po 'scettico riguardo la sicurezza su questo. Prima di tutto, ovviamente non voglio che NESSUNO sia in grado di dare il via a questi lavori batch solo andando al mio servizio web / rest api.

Per risolvere il problema, penso che ci siano 2 modi diversi per farlo, o una combinazione di entrambi.

1) Richiedere alcune credenziali e forse un codice segreto aggiuntivo per farli effettivamente iniziare. 2) Configurare in una tabella quando è possibile eseguire effettivamente ogni processo batch e la frequenza. In questo modo, se un hacker chiama il mio servizio / riposo api. Sarà in grado di eseguire 1 ora all'ora / giorno / settimana / mese / ecc. In tal modo potrebbero eseguire il martello del servizio, ma ogni chiamata successiva restituirebbe un errore o qualcosa del genere.

Una cosa da notare, ho letto da qualche parte un paio di mesi fa che ci sono servizi cloud là fuori che "programmano" lavori batch come questo per te. E quello libero di cui leggo farà 1 servizio. Più di 1 e devi iniziare a pagare per questo. Quindi, per il mio esempio, creerei un solo servizio, lo chiamerò più volte al giorno / settimana e lascerò che la mia tabella di configurazione di BatchJob determini se deve effettivamente elaborarlo o meno.

Quindi, quanto è orribile un'idea? Quali sono altri approcci per realizzare lavori batch in un ambiente cloud in cui non offrono servizi batch.

    
posta ganders 25.06.2014 - 21:33
fonte

1 risposta

2

Questo è abbastanza normale e in molti ambienti è il modo più semplice per farlo. Ho diversi processi batch in esecuzione che spesso non fanno altro che chiamare un controller API REST con curl (sulla stessa macchina del mio server web).

Per la parte di protezione hai molte opzioni. L'autenticazione utente semplice è abbastanza semplice e dovrebbe essere sicura se codificata correttamente (ed è possibile utilizzare una password super complessa e un nome utente totalmente strano se lo si desidera, lo stesso per l'URL dell'attività), inoltre è possibile limitare le richieste a determinati indirizzi IP , se il batch è in esecuzione sulla stessa macchina, limitare a localhost è il più sicuro possibile. Se è possibile modificare le impostazioni del server Web, ci sarebbero ancora più opzioni, altrimenti il tuo codice dovrebbe essere in grado di fare comunque le cose più importanti.

Anche mentre scrivi, puoi limitare l'elaborazione in batch interrogando ora e data. Lo faccio comunque, dal momento che alcuni lavori non dovrebbero essere eseguiti ogni ora. Quindi nel mio caso esiste un solo controller chiamato ora e che decide cosa fare in base al tempo. Ad esempio, l'elaborazione di immagini con carichi pesanti viene eseguita solo una volta di notte, un'ora dopo l'esecuzione di altri lavoratori pesanti e durante il giorno viene eseguita una semplice importazione di dati ogni ora.

    
risposta data 25.06.2014 - 22:33
fonte

Leggi altre domande sui tag