Ufficio Grid Computing con ambienti virtuali - Parte 2

Con Steven Watkin Lloyd , Venerdì 4 Dicembre, 2009 11:23

Introduzione

Io lavoro in una azienda dove siamo eseguire processi batch molti trasformazione milioni di record di dati ogni giorno e ho pensato di recente su tutte le macchine che si siedono intorno ogni giorno non fare nulla per diverse ore. Non sarebbe bello se potessimo usare queste macchine per sostenere la potenza di elaborazione del nostro sistema? In questa serie di articoli sto andando a guardare i potenziali benefici di impiegare un ufficio griglia utilizzando ambienti virtualizzati.

Nella Parte 1 ho dato una panoramica del sistema e delle tecnologie userò come pure discusso alcune delle possibili motivazioni per cui si vorrebbe creare una griglia di ufficio.

Job Control

Se avete intenzione di essere in esecuzione di posti di lavoro allora stai andando avere bisogno di qualche modo per la loro gestione. Il sistema di controllo di lavoro (sul server di lavoro) deve essere veramente ben pensato prima ancora di tentare di eseguire una griglia ufficio. Quindi, in primo luogo, quali sono i compiti di un sistema di controllo del lavoro:

  • Distribuite posti di lavoro su richiesta di lavoratori
  • Informa i lavoratori che tipo di lavori da eseguire
  • Traccia di lavoro
  • Assicurarsi che i lavori vengono eseguiti solo una volta
  • Fornire dati del lavoro per i lavoratori, o almeno di dire loro dove trovarlo

Il sistema deve anche essere estensibile, una soluzione che funziona per ora in un singolo caso può essere estesa ad eseguire diversi tipi di lavori come l'azienda vede il valore di una soluzione in griglia. Ad esempio, i lavori possono ottenere le priorità, più di un tipo di lavoro può esistere (cioè basi di codice diversi), alla fine si può anche eseguire più macchine lavoratore differenti che sono ottimizzati per ogni tipo di lavoro (anche se questo si discosta dalla 'operaio generico 'idea). Cerca sempre di pensare al futuro quando i sistemi di sviluppo, una visione a breve termine può portare alla frustrazione più lungo termine e un aumento dei tempi di sviluppo.

Job Server

Stiamo andando a bisogno di un posto di controllare i nostri posti di lavoro da, questo dovrebbe essere l'unico sistema in un reticolo che è un localizzatore di risorsa fissa, che sia un indirizzo IP, nome host, URL (usando il DNS interno), ecc Questo perché I lavoratori hanno bisogno di sapere dove cercare lavoro, i lavoratori hanno bisogno di trovare il sistema di controllo di lavoro (non il sistema di controllo di posti di lavoro a trovare i lavoratori).

Il server di posti di lavoro in sé non hanno davvero un compito difficile (comunque in un sistema di base), ha bisogno di memorizzare un elenco di posti di lavoro, distribuire posti di lavoro, ricevere risultati e, successivamente, conservarle per il successivo recupero. Come queste parti (come 'mano di posti di lavoro') sono definite può essere molto di base. Più tardi siamo in grado di estendere il sistema per includere un'interfaccia di amministrazione di aggiungere, modificare, eliminare, sospendere posti di lavoro ma questo è al di là di questo esercizio.

Non vi è alcun motivo quindi che il server di lavoro non poteva essere una macchina virtuale in esecuzione all'interno del server di elaborazione principale a condizione che non scarica troppe risorse da esso. Il server di lavoro ha tuttavia bisogno di alta disponibilità, se va giù su un Venerdì sera si sta andando a perdere un intero weekend di lavorazione, potenzialmente vi costa un paio di settimane di tempo di elaborazione (rispetto al server principale di elaborazione da solo) . Potreste voler considerare di mettere il server di lavoro in un ambiente carico equilibrato per l'alta disponibilità.

Impostazioni di base

La configurazione di base per il nostro server di posti di lavoro sarà composto da ciò che io chiamo uno dei miei server LIMP (che è nux Li, ySql M, P HP). Il codice in esecuzione su lavoratori thea realmente capire il lavoro che può essere eseguito tramite l'interazione con il controllo dei job con i database di sistema. Più tardi abbiamo potuto creare un servizio web ed effettivamente distribuire posti di lavoro piuttosto che i lavoratori fare il lavoro duro di loro, ma per ora continueremo con il principio KISS (Keep It Simple, Stupid!).

Quindi, consente di creare tre mySQL tabelle a che fare con posti di lavoro. Questi saranno `posti di lavoro`, `jobRecords`, e `jobResults`.

Offerte di lavoro tavola Qui sto usando SQL Buddy un po grande alternativa al phpMyAdmin solo perché è più facile da installare su CentOS (per gli altri vedi: 10 grandi alternative a phpMyAdmin )

Questa tabella è composta da 5 campi semplici,

  • id univoco identificare il processo
  • Nome: Potrebbe essere un riferimento cliente, o un qualsiasi numero di altri identificatori
  • Status: Hai bisogno di sapere dove il lavoro è, ad esempio,
    • 0: Non avviato
    • 1: Raccolto
    • 2: Completato
  • started_by: Chi è iniziato a fare il lavoro? Questo non è del tutto necessario, ma è un bello avere. Io suggerirei di monitoraggio da parte dei lavoratori il loro indirizzo IP sulla rete
  • started_at: Quando il lavoratore iniziare il lavoro? Con la tracciatura dei lavori che non hanno completato entro quantità X di tempo sappiamo che dobbiamo far salire il lavoro ancora una volta e avviare l'elaborazione di un altro lavoratore. I lavoratori possono interrompere l'elaborazione / go offline per qualsiasi numero di ragioni, mancanza di corrente, crash, perdita di rete, ecc

E 'facile come questo tavolo potrebbero essere estesi con alcuni campi, per consentire il monitoraggio per le statistiche, una colonna di tempo finale per verificare quanto tempo il lavoro ha avuto, un contatore per vedere quanti lavoratori prese il posto di lavoro (ovviamente questo deve tendere alla 1), la priorità di lavoro, l'elenco può continuare a lungo. In scenari più complessi di posti di lavoro sarebbe possibile specificare la quantità di memoria il lavoratore avrebbe avuto bisogno (e quindi utilizzare solo i lavoratori adatti), o anche che tipo di lavoratore sarebbe necessario.

Consente di aggiungere un paio di posti di lavoro ad esempio:

esempio di posti di lavoro

La tabella successiva è di nuovo abbastanza semplici da capire, questi sono i nostri record di posti di lavoro. Esse sono legate alla tabella principale di posti di lavoro da una colonna `jobs_id`. Il make up di questa tabella molto dipende dai dati che avete bisogno di fornire ai vostri lavoratori, consente di fare un esempio molto semplice in cui abbiamo quattro colonne:

  • ID: ID del record
  • name: il nome della persona
  • indirizzo: Indirizzo Persona
  • jobs_id: l'ID del processo che questo disco è legata alla

Il tavolo terzo e ultimo costituito da una tabella dei risultati, ha più o meno allo stesso trucco come la nostra tabella di record e con l'aggiunta di alcune colonne potrebbe essere parte della tabella di record:

  • job_record_id: Link il risultato al tavolo di lavoro
  • risultato: i dati del risultato

... E questo è tutto ciò che serve per il controllo del lavoro! (Anche se ad un livello molto elementare) Nel mio caso mi ha indicato un altro tavolo dove si trovava la mia di dati da elaborare, ma questo potrebbe altrettanto facilmente essere un file, i parametri per eseguire codice di simulazione, è il nome.

Selezione di un lavoro

Come affermato precedentemente, i lavoratori faranno il nostro lavoro di gestione per noi, per ora, quindi tutto quello che dobbiamo fare è veramente trovare un lavoro che ha bisogno di trasformazione e di ottenere le informazioni. Come possiamo fare questo? Bene scegliere i nostri criteri di scelta di posti di lavoro e cercano un lavoro, in SQL ho fatto la seguente:

  1. Prendete qualsiasi lavori che non sono contrassegnati come completo ma dal nostro lavoratore e reset loro (__ME__ sostituire con un identificatore, sarebbe più semplice indirizzo IP):
      UPDATE `occupazione` SET `status` = 0 dove `status` = 1 E `started_by` = __ME__; 
  2. Utilizzando i nostri criteri di scelta di posti di lavoro, selezionare un processo e dire al sistema di controllo che questo lavoro si sta occupando:
      UPDATE `occupazione` SET `status` = 1, `started_by = __ME__`, `started_at` = NOW (), dove `status` = 0 o
     (`Status` = 1 `E` started_at> DATE_SUB (NOW (), INTERVAL X ORA)) ORDER BY `id` ASC; 

    Afferrando posti di lavoro che non hanno prodotto risultati in quantità X di tempo possiamo garantire che tutti i lavori vengono eseguiti in caso di crash o di un lavoratore allontanato senza permesso.

  3. Avanti afferrare i dettagli di posti di lavoro seguita dagli stessi record:
      SELECT * FROM `occupazione` WHERE `started_by` = __ME__ LIMIT 1;
     SELECT * FROM `job_records` WHERE `id` = __JOBID__; 

Al termine del lavoro inseriamo i nostri dati di risultato e di segnare il lavoro più completo. Ricorda come i lavori possono suspend / resume in qualsiasi momento, consentire una certa robustezza nello script. Potrebbe essere che il compito sospende a metà strada attraverso l'aggiornamento del sistema di controllo del lavoro, in modo da verificare il numero di record in un posto di lavoro e il numero di risultati salvati nel sistema di controllo del lavoro sarebbe una mossa saggia.

Inoltre, mentre questo dimostra come i lavori possono essere selezionati e gestiti da un frame-query SQL si dovrebbe davvero essere astrarre il controllo di posti di lavoro in modo che se si decide di passare ad usare un servizio web, un sistema basato su file XML , o qualsiasi altro numero di sistemi non influenzerà il codice di sopra di esso.

Lavoro di configurazione

L'altro aspetto da considerare è la dimensione del lavoro e della configurazione. Giocando con una configurazione di posti di lavoro si può trovare un ottimo equilibrio tra velocità, la replica di processo e l'affidabilità. Prendete un paio OFA scenari:

  1. Offerte di lavoro prendere 1 giorno ciascuno a correre: questo significa che il tuo lavoratori bisogno di 15 giorni per elaborare ogni posto di lavoro (si ricordi il 10% della potenza per 2/3rds del tempo). Chiaramente questa non è una configurazione di saggio, la dimensione del lavoro è troppo grande! Ci vorrebbe almeno il doppio del tempo per ottenere un lavoro elaborato del lavoratore iniziale andare AWOL (il tempo di prendere che non ha restituito un risultato più il tempo di ritrattamento). In un ideale che ci hanno almeno un lavoro di lieve liquidati entro la fine di ogni minimo lungo periodo, in questo modo di mantenere i posti di lavoro ticchettio sopra e nel peggiore dei casi un lavoro avrebbe richiesto due giorni per elaborare il primo dovrebbe andare mancanti.
  2. Offerte di lavoro prendere 1 minuto per eseguire: Questo significa che i vostri lavoratori impiegano circa 15 minuti per eseguire ogni lavoro. Anche se questo può inizialmente sembrare ideale, è possibile ottenere ulteriori elaborazioni di lavoro durante l'ora di pranzo, coffee break, incontri, ecc questo scenario gravano su altre zone del vostro sistema e introduce i propri problemi. Ad esempio, in primo luogo il setup rapporto tempo di elaborazione sta per andare a destra verso il basso, perdendo così l'efficienza del sistema. La rete sta per essere costantemente in streaming informazioni di lavoro ai lavoratori diversi staff frustrante che dong il loro lavoro quotidiano. Sei anche andando a mettere più pressione sul server di elaborazione dei processi in quanto deve servire fuori un sacco di piccoli pezzi di lavoro su base regolare. Infine, in questa situazione se il server di lavoro va giù che si vuole creare un registro enorme ritorno di opera incompiuta mentre più posti di lavoro potrebbe di trattamento continuato beatamente ignaro che il server di lavoro era in difficoltà.

In realtà non ci sarà nessuno configurazione ideale per la configurazione di rete, molto dipende dalle risorse disponibili, i tipi di lavoro, lavoro requisiti di tempo di risposta, capacità di rete e così via. Tuttavia alcune linee guida potrebbe essere:

  • Offerte di lavoro formato in modo che ciascun lavoratore può ottenere attraverso almeno 3-4 posti di lavoro in un periodo di 15 ore (più lunga del probabile periodo di tempo di inattività)
  • Gioca con la dimensione del lavoro in modo che i tempi di configurazione diventa abbastanza insignificante rispetto al tempo di elaborazione (tenendo conto del punto precedente).
  • Se un processo non si completa in doppio la quantità di tempo (forse meno) ci si aspetta di completare lo presumere che la sua assenza ingiustificata andato e iniziare il trattamento con un altro lavoratore. Questo significa che potrebbe essere necessario attendere fino a tre volte la lunghezza normale di un lavoro che sia completato (forse più a lungo se il lavoro non risulta). Si consiglia di ridurre questo tempo, ma attenzione a non ridurre troppo come si può iniziare a duplicare le operazioni di elaborazione su base regolare.
  • Offerte di lavoro dovrebbero essere indipendenti al di fuori dei requisiti, per quanto possibile. Il server di lavoro, ad esempio, dovrebbe essere contattati a inizio e fine di ogni lavoro.
  • Non saturare la rete, questo avrà due effetti negativi, il personale durante il giorno si trova utilizzando la rete frustrante e problemi possono essere sperimentati con connessioni in timeout un problema che non faranno che peggiorare come si scala la griglia.
  • Garantire posti di lavoro può essere eseguito sul vostro lavoratori. Se i processi diventano troppo spazio di memoria di lavoro intensivo o intensivo del disco partirà l'interruzione e l'unica cosa che noterete è una goccia nel numero di lavori elaborati senza alcun vero motivo.

Risultati Invio di un lavoro

Nel presentare i risultati di un lavoro, è importante verificare che i risultati non siano stati presentati da un altro lavoratore, soprattutto se il lavoratore corrente è stato sospeso per qualche tempo.

Quando i risultati sono presentati garantire che il numero di risultati corrisponde al numero di record all'interno del posto di lavoro.

Come detto in precedenza, e non possono essere più enfatizzato, costruire la tolleranza ai guasti nel reperimento di posti di lavoro e la presentazione dei risultati. I lavoratori possono (e molto probabilmente) entrerà in modalità di sospensione al più scomodo di volte e questo deve essere soddisfatta. Inoltre, ancora una volta astraendo la vostra presentazione risultati aiuteranno soddisfare le future modifiche al sistema di controllo dei lavori molto più facile da affrontare.

Riepilogo

In questo sezionali, abbiamo guardato a ciò che un server di controllo di lavoro deve fare e come ottenere un sistema molto semplice set up. Abbiamo discusso di come recuperare un lavoro dal sistema di controllo e come configurare al meglio posti di lavoro per sfruttare al massimo il nostro sistema del vostro ufficio griglia. Per finire, un paragrafo o due, a presentare i risultati al server di controllo del lavoro è stato presentato.

  • Un server di controllo del lavoro gestisce posti di lavoro e assicura che tutte le unità di lavoro sono stati completati
  • Astraendo il lavoro seleziona / presentazione dei risultati si può cambiare la tecnologia del server di controllo senza problemi molto
  • Configurare i processi per assicurare che vengono eseguiti in modo rapido ed efficiente, senza mettere troppa pressione sulla infrastruttura di rete, e senza duplicare le operazioni di elaborazione su base regolare.
  • Assicurarsi che si genera tolleranza ai guasti e checking errore nella vostra routine, i lavoratori possono sospendere e riprendere e il più scomodo di volte. Ricordati di controllare se i risultati sono già stati presentati da un altro lavoratore.

La prossima volta

Nella parte 3 creeremo la nostra elaborazione della macchina virtuale e creare le nostre macchine Windows di diventare lavoratori a tempo di inattività.

One Response to "Office Grid Computing con ambienti virtuali - Parte 2"

  1. Idrolizzare ha detto:

    Heya! Buona idea, ma potrebbe veramente fare il lavoro?

Lascia un commento













Tema di Panorama Themocracy

6 visitatori online
4 persone, 2 bots, 0 utenti
Max visitatori oggi: 11 alle 00:46 UTC
Questo mese: 26 alle 2011/07/05 12:35 UTC
Questo anno: 130 al 28-03-2011 22:40 UTC
Tutti i tempi: 130 al 28-03-2011 10:40 UTC