Categoria: Linux

Ufficio Grid Computing con ambienti virtuali - Parte 4

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

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 3 abbiamo creato la nostra elaborazione della macchina virtuale e creare macchine Windows per diventare lavoratori a tempo di inattività.

L'esecuzione del codice più recente

Inevitabilmente, dopo aver creato il vostro business lavoratori logica cambierà, i bug si troverà, più efficiente il codice più velocemente sarà prodotta in tal modo di lasciare la tua lavoratori seduti intorno l'elaborazione dei dati utilizzando vecchio codice puzzolente . Come possiamo allora sì che siamo sempre utilizzando la versione ultima e più grande del nostro script di trasformazione?

Ci sono alcuni modi molto semplici semplici che possiamo fare questo, il trucco, però, è quello di ridurre la potenza di elaborazione e il traffico di rete in questo senso. Iniziamo con la più semplice delle soluzioni e migliorare lentamente nel corso di un paio di iterazioni.

Il primo metodo sarebbe quello di collegare semplicemente al nostro server di posti di lavoro di controllo (tramite SAMBA, FTP, o simili) e tirare giù l'ultima versione del codice. Non molto efficiente, ma farà il lavoro. Consente di migliorare su questo in qualche modo, come sulla creazione di uno script utilizzando rsync e che ogni volta, invece? In alternativa cosa di mettere il nostro ultimo script trasformazione in sovversione analizzando il codice inizialmente e poi semplicemente aggiornando il nostro codice in ogni run ( svn update )?

Alla fine potremmo ritrovarci con uno script bash (chiamato da cron ogni 10 minuti) che sembra semplice come questo:

  # / Bin / sh
 se ps ax | grep-v grep | grep php > / dev / null
 poi
     echo "Job sta elaborando, uscita"
 altro
     echo "Il lavoro non è in esecuzione, inizia ora"
     cd / path / to / lavoro / copia
     svn update
     php yourJobProcessingScript.php
 fi 

Ora possiamo essere sicuri che ad ogni esecuzione che siamo sicuramente in funzione l'ultimo codice. Siamo garantire questo, aggiornando la nostra base di codice ogni volta che esegue una corsa e di ridurre il traffico di rete solo trasferire il file di differenze tutta la nostra rete.

Nella mia configurazione di dimostrazione, ho fatto esattamente come sopra. Subversion è stato installato sul mio server di lavoro di elaborazione e ho semplicemente tirato l'ultimo codice dal ramo di un 'lavoratore' utilizzando 'svn update'. Ho anche aggiunto un tag numero di versione per il mio script di trasformazione che è stata restituita al database come parte della restituzione dei risultati. In questo modo ho potuto vedere che il mio codice è in corso di aggiornamento ogni volta che ho copiato il mio tronco in avanti, ovvero ramo di lavoro che mi è stato sicuramente l'esecuzione dello script più recente elaborazione.

Utilizzando le più recenti dati

Se il trattamento di posti di lavoro fa uso di fonti di dati poi ad un certo punto questi stanno per essere aggiornati anche. A meno che voi chiamate le fonti di dati su una base molto rari si sta andando ad inondare la tua rete con traffico non appena il vostro lavoratori inizieranno portare tutto a un punto morto. Per la mia soluzione, ho deciso che mi piacerebbe spostare le mie fonti di dati in giro con le mie macchine virtuali.

Tenere sei cavalli lì! Che cosa succede se le mie fonti di dati sono enormi? Beh, questo è davvero un caso di quantità di dati stiamo parlando? Essa può essere più conveniente installare un hard disk più grandi in ogni macchina che per l'acquisto di un ulteriore server di elaborazione. Questa è una questione di budget, ed è fino al business di decidere. E 'forse che le fonti di dati sono così grandi che il suo solo impraticabile per mantenere tale quantità di dati nelle vostre macchine lavoratore. In quel caso cosa faresti? Beh, potremmo guardare i dati chiamando un server locale, ma questo potrebbe causare problemi con la rete. In questo caso un sistema di rete come questa può diventare realistico di includere nel vostro ambiente di ufficio. Può anche essere che si può guardare in strategie alternative di esecuzione, per esempio solo a chiamare il tuo lavoratori 20:00-06:00 ogni notte e / o limitazione dei dati di origine richieste.

Passando permette di dire la nostra quantità di dati di fonti a 100GB di dati. Beh sì che è un po 'di dati per spostarsi all'interno della rete su un aggiornamento. Come possiamo garantire di avere l'ultima copia dei dati in questo caso? Rsync è una possibilità, ma personalmente credo che, eseguendo l'origine dati più recenti sul server di lavoro di trasformazione e di impostazione come un master in replica (con un log bella bin lungo) potrebbe essere la strada da percorrere:

replica Impostando ciascuno dei vostri lavoratori su come uno schiavo per gli aggiornamenti lavoro di controllo del server per le origini dati saranno trickle down bene alla tua lavoratori senza un enorme aumento delle attività di rete (cioè a meno che si esegue un aggiornamento di dati enorme e tutti i vostri lavoratori calcio in in una sola volta). Questo ha dei vantaggi rispetto a rsync che non si otterrebbe una lunga pausa prima di ogni lavoro, come gli aggiornamenti del database, il mysql daemon sul ​​lavoratore continuamente aggiornare i propri dati durante l'elaborazione continua.

Ecco come ho impostato il mio server dimostrazione. Per impostare la replica ho seguito la guida sul sito di mySQL ( Impostazione della replica ) e in 20 minuti avevo il mio lavoro inital replicare il controllo dei job server dataset. Per ogni lavoratore addizionale le impostazioni di replica e di processo lavorato ogni volta che la VM è stato copiato.

Riepilogo

In questa sezione di questo articolo abbiamo preso in considerazione quanto sia facile e indolore sia per mantenere il vostro codice di elaborazione fino a data da rsync using o subverion (SVN) per fare il lavoro e ridurre il traffico di rete al file.Un stesso Abbiamo anche discusso di come per mantenere l'origine dati le informazioni up-to-date, consentendole di trickle down ad ognuno dei vostri lavoratori. Così zona assicurando che tenere il passo con la logica di business e le informazioni in nostro sistema di ufficio griglia. Ci sarà ovviamente innumerevoli alternative per svolgere questi compiti, ma qui erano due semplici esempi per mostrare come una soluzione è facile da trovare.

La prossima volta

Nella parte finale di questa serie, giustamente chiamato Parte 5 , parleremo di questo sistema per la distribuzione. Cercherò di riassumere quanto è stato appreso e ciò che sono riuscito a creare.

Ufficio Grid Computing con ambienti virtuali - Parte 3

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

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 2 abbiamo visto i posti di lavoro di un server verrà eseguito, e quanti posti di lavoro dovrebbe essere configurato in modo da ottenere maggiore quantità di lavorazione garantendo nel contempo che ogni lavoro viene elaborato senza fallo.

Impostazione del lavoratore - o server LIMP

Il passo successivo nel processo è quella di creare il vostro lavoratori virtuale. Per questo ho intenzione di utilizzare un impianto di CentOS utilizzando VirtualBox. Sto per installare MySQL e PHP su server, noto anche come LIMP (Li nux, m ySQL, P HP) Servera (forse ho fatto quel nome).

  • Installare VirtualBox su una macchina Windows (seguire il link)
  • Scaricare e installare CentOS (attuale versione 5.3) all'interno di una macchina virtuale creata

Non c'è nessun punto me andare a questo c'è probabilmente 1,000 's di tutorial grandi là fuori (ok, qui è uno: Creazione e Managing CentOS macchina virtuale sotto VirtualBox ). Il punto importante da notare suppongo è che ho chiamato il mio GridMachine macchina virtuale.

Per quanto riguarda le mie scelte di virtualizzazione client e il sistema operativo andare non vi è grande motivo convincente per ogni scelta. VirtualBox è una cosa che uso sul mio computer di casa ed è sostenuto dai tre maggiori sistemi operativi. Ho scelto CentOS come un buon sistema operativo stabile e lo uso sul mio server web. Sono un grande credente nel strumenti giusti per il lavoro (anche se sto applicando 'utilizzare il più veloce e più facile per te' mentalità qui), quindi se il sistema operativo X viene eseguito il codice più rapidamente e in modo più efficiente uso che, invece:)

Importante assicurarsi che la VM usa DHCP, altrimenti per ogni nuova macchina virtuale dovrebbe essere configurato separatamente, che è qualcosa che non want.By utilizza il protocollo DHCP non abbiamo bisogno di configurare le impostazioni di rete per le macchine lavoratore individualmente, DHCP consegnerà IPs fuori per voi. Quindi è possibile copiare la macchina virtuale per l'ufficio, senza preoccuparsi di impostare su ognuna (questo migliora la scalabilità e riduce l'amministrazione lavoratore).

Il processo che si dovrebbe mirare a ottenere sarebbe quello di ottenere una nuova macchina fisica, installare VirtualBox, e quindi più o meno distribuire l'immagine virtuale senza molto altro. Potrebbe essere saggio per impostare tutti i vostri operai su una sottorete diversa, in modo da poter almeno vedere come molte macchine sono in esecuzione. Avrete anche bisogno di creare le vostre macchine con un contratto lungo o illimitato lease DHCP.

Come eseguire i lavori del lavoratore

Questo è un settore interessante e ci sono diversi metodi validi per i processi di trasformazione del lavoratore. Qui mi limiterò a discutere le due più evidenti:

  • Perennemente in esecuzione script: uno script, che si tratti di uno script di shell o uno script PHP viene eseguito una volta al lavoratore e viene eseguito come parte di un ciclo infinito. Ho scontato questo metodo come uno schianto di script e potenzialmente tuo lavoratori cesseranno di funzionare senza un qualche tipo di intervento.
  • l'esecuzione di script Cron based: ogni X minuti il ​​demone cron prende il via una chiamata allo script per ottenere le cose. Senza una qualche verifica questo potrebbe portare a molte molte copie del vostro script lavoratore in esecuzione.

La mia decisione era quella di andare con cron che prende il via uno script di shell ogni 10 minutes. mio script di shell esegue le seguenti operazioni:

  1. Ottenere una lista dei processi e grep questo per 'php'. Se non lo trova e poi continua.
  2. Chiamate il vostro codice di posti di lavoro, nel mio caso questo potrebbe essere qualcosa basato su PHP
  3. script Worker completa la sua corsa
  4. Pronti a partire di nuovo la chiamata successiva del caso

Il mio script bash un aspetto simile al seguente:

  # / Bin / sh
 se ps ax | grep grep-v |> php grep / dev / null
 poi
     echo "Job sta elaborando, uscita"
 altro
     echo "Il lavoro non è in esecuzione, inizia ora"
     php yourJobProcessingScript.php
 fi 

Nota: l'eco sono quasi completamente inutile, ma può aiutare la prossima persona che arriva per cercare di modificarle.

Che conclude il set up della macchina virtuale lavoratore, veloce, semplice e facile da copiare per ogni nuovo pezzo di hardware che si riceve. Il 'bravura' del sistema di rete in realtà non è visualizzato nel sistema operativo, il suo tutto a che fare con il codice creato per elaborare i processi, la configurazione di posti di lavoro, e nel fare in modo che il processo viene eseguito quando opportuno (cioè quando l'host è inattivo ).

Configurazione di Windows per inizializzare i lavoratori

Il primo compito è quello di lavorare il comando richiesto per eseguire la macchina virtuale da linea di comando di Windows. Se hai installato VirtualBox nel percorso predefinito e che hai chiamato il tuo GridMachine lavoratore quindi il comando necessario per caricare il tuo lavoro è la seguente:

  "C: \ Program Files \ Sun \ VirtualBox \ VBoxManage.exe" GridMachine startvm 

Tuttavia, per eseguire lo script in uno stato 'senza testa' abbiamo bisogno di utilizzare:

  "C: \ Program Files \ Sun \ VirtualBox \ VBoxHeadless.exe" startvm GridMachine-- VRDP = off 

Questo farà partire la macchina virtuale senza l'interfaccia grafica e consentono di salvare lo stato con garbo. Il secondo argomento si spegne RDP in modo che non entri in conflitto con le finestre RDP, o dare un messaggio su in ascolto sulla porta 3389. Il nome della macchina virtuale è case sensitive!

Quindi, abbiamo bisogno di impostare le finestre fino al calcio d'inizio la nostra VM lavoratore una volta che la macchina è rimasto inattivo. Per fare questo (in Windows XP) è necessario andare su Start -> Programmi -> Accessori -> Utilità di sistema -> Operazioni pianificate, come di seguito:

le operazioni pianificate

Successivamente clicca su 'Aggiungi operazione pianificata' seguito da Sfoglia per aggiungere un programma personalizzato. Passare al vostro script VBoxManage e scegliere OK. Programma il compito per una qualsiasi delle opzioni (cambieremo questo in un minuto) e continuare. Dopo aver saltato le finestre schermata successiva vi chiederà che si desidera eseguire questo compito, io suggerirei o 'Administrator' o la creazione di un nuovo utente con privilegi. Ricordate che non vogliamo interferire con l'account personale di serie sulla macchina in qualsiasi punto. Fare clic su Opzioni prossima mostra e verificare avanzate per questa operazione.

Alla fine della casella di testo eseguire add 'startvm' GridMachine corda e far sì che la nostra eseguite solo quando il login è lasciato spuntata. Visita il compito pianificazione successiva e modificare la goccia orario fino all'opzione 'quando inattivo', scegliere la quantità di tempo che si desidera che il computer sia inattivo prima di passare alla scheda successiva.

Infine, deselezionare l'opzione in cui si afferma interrompere l'attività se è stato in esecuzione una quantità X di tempo, ma non selezionare l'opzione per interrompere l'operazione se la macchina non è più inattiva.

Orario

Che è poi per la configurazione host di Windows!

Riepilogo

In questa parte abbiamo creato una macchina virtuale di agire come un lavoratore, nonché il modo in cui chiediamo ed eseguire il nostro script di elaborazione del processo (per me uno script PHP). Da qui si guarda a come impostare le nostre copie di Windows per avviare la macchina virtuale in modalità headless quando il computer diventa inattivo, e salvare il suo stato quando l'utente riprende l'uso della macchina. Speriamo a questo punto si sta vedendo come è semplice creare un tale sistema e sono prurito per ottenere alcuni esperimenti te va!

La prossima volta

In parte 4 ci troveremmo di fronte a utilizzare gli strumenti per garantire che si sta eseguendo l'ultima versione del codice e dei dati di fonti in modo che i risultati ottenuti siano sempre up-to-date con le ultime informazioni di business e la logica.

Ufficio Grid Computing con ambienti virtuali - Parte 1

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.

Come PHP sviluppatore ho intenzione di utilizzare gli strumenti che uso ogni giorno e cioè, Linux, MySQL , PHP, VirtualBox e Subversion (SVN). Comunque spero che questa guida si adatta ad altri linguaggi e tecnologie altrettanto bene.

La soluzione che fornisce sarà molto liberamente ispirato al tipo di lavorazione che avevamo bisogno per raggiungere ciò però non può essere vero attraverso l'intero articolo come farò cambiare le cose per semplicità, o per produrre scenari di utilizzo più interessante.

Questi ambienti virtualizzati verrà eseguito su macchine Windows poiché questo è ciò che la maggioranza degli uffici di esecuzione. Il trattamento che le macchine per ufficio, fare non dovrebbe interferire con il personale con quelle macchine, dovrebbe richiedere alcuna manutenzione sulla macchina, ed essere facilmente implementabile a nuove macchine non appena saranno disponibili. Inoltre, nuove macchine virtuali non dovrebbe richiedere alcuna configurazione aggiuntiva in quanto riduce notevolmente la scalabilità e la facilità con cui il sistema di rete può essere estesa.

Perché Distribuire un Grid Computing di Office?

In primo luogo si potrebbe pensare, perchè non basta usare una risorsa di cloud computing come piattaforma EC2 di Amazon ? Beh, i motivi potrebbero essere diversi, ad esempio:

  • Non ti affidare determinati dati in un ambiente di cloud computing
  • Non puoi inserire determinati dati in un ambiente di cloud computing per motivi legali (come i dati di lasciare il paese), potenzialmente per motivi legali, ad esempio, i record NHS.
  • Si desidera mantenere la vostra unità di elaborazione stretta e avere il pieno controllo anche l'hardware
  • Non hai i fondi del progetto di eseguire le istanze cloud
  • Il vostro ufficio non dispone di una connessione ad internet e quindi la sua non è possibile utilizzare una risorsa cloud
  • Non ti piace la pioggia, le nuvole suggeriscono pioggia, quindi si mantiene ben lontano

Sono sicuro che l'elenco potrebbe continuare, ma penso che sia abbastanza per ora.

Vantaggi di un Grid Computing Office

Beh, lascia fare un po 'di matematica (e in stile vera fisica permette di fare alcune ipotesi spazzamento). Immaginate di avere grandi server beefy trasformazione in esecuzione 100 posti di lavoro al giorno. In ufficio hai 50 macchine che sono al minimo 16 ore al giorno, ognuna di queste macchine è del 10% potente come la vostra elaborazione beefy sever. (Tutti i risultati qui sono arrotondati per migliorare le prestazioni sottovalutare).

Quindi, 1 macchina * 10% * di potenza 2 / 3 del tempo = 0,067 ossia il 1 ° trattamento del desktop in tempo di inattività in grado di elaborare 6 posti di lavoro pieno al giorno.

Se ora su questa scala in 15 tavoli di inattività per processi come molti posti di lavoro al giorno, come il server di elaborazione principale fa.

Quindi, nel nostro ufficio fingere di 50 macchine potremmo aumentare il nostro potere di trasformazione dal 1 server fino a 4 server di full-processing, o potremmo essere di trasformazione 400 posti di lavoro al giorno invece di 100.

Si noti, per nessun investimento in hardware nuovo la vostra azienda ha appena aumentato la sua capacità di elaborazione batch 4 volte! Potenzialmente si sta andando ad aumentare il consumo di energia, ma dalla maggior parte degli ambienti office Sono stato a macchine sono generalmente di sinistra durante la notte, comunque, quindi questo potrebbe essere visto come una iniziativa verde.

Altri vantaggi anche significare che gli investimenti in nuove (o aggiornato) server di elaborazione può essere ritardata se il tuo macchine d'ufficio sono sufficienti e che, come si migliora la potenza del vostro macchine per ufficio, la vostra rete dell'ufficio diventa più potente automaticamente.

Tecnologie

Che cosa avete bisogno? (O più correttamente quello che ho usato):

  • macchine per ufficio Idle (nel mio caso un portatile di ricambio vecchie finestre XP)
  • VirtualBox (o un altro software di virtualizzazione client)
  • Una macchina virtuale con PHP, MySQL in esecuzione running un taglio verso il basso OS, sto chiamando questi miei server LIMP:)
  • Lavori per l'esecuzione
  • server di lavoro (può essere un'altra macchina virtuale da qualche parte)

Tipico Jobs

I tipi di posti di lavoro che è stato progettato questo sistema per l'esecuzione è la seguente:

  • Sistema riceve un elenco di dati su cui abbiamo bisogno di partita e restituire risultati
  • Matching tratta di controllare / ricerca diversi (abbastanza statico) le fonti di dati
  • Risultati da fonti di dati possono richiedere ulteriori conferme, la fusione, la verifica di ulteriori fonti di dati, in risposta ai risultati
  • I dati vengono restituiti con record che soddisfano pienamente convalidati e trasformati
  • Ogni record all'interno di un lavoro è indipendente dal resto

Quindi, in pratica stiamo cercando di processi in esecuzione che richiedono un insieme di ricerche nei database e qualche calcolo, uno scenario abbastanza tipico in un ambiente aziendale.

Le soluzioni Grid non sono solo vantaggioso per l'elaborazione dei processi di questo tipo. Fondamentalmente, qualsiasi processo che può essere suddivisa in unità indipendenti possono essere eseguiti in parallelo. Vedere questa wikipedia per esempi e ulteriori informazioni: Grid Computing , ma un paio di esempi famosi sono Seti @ Home e BIONC . Ci sono strutture per l'esecuzione di griglie di calcolo, e questi sono ben merita di essere esaminata.

Che cosa otteniamo?

Entro la fine di questi articoli spero di mostrare che la distribuzione di una griglia di ufficio non deve essere estremamente costose o di tempo. Io vado a discutere:

  • Impostazione del sistema di controllo del lavoro, la configurazione di posti di lavoro
  • Creazione di un trattamento corretto della macchina virtuale
  • Come configurare il sistema su una macchina Windows
  • Garantire che si sta utilizzando l'ultimo codice e dati
  • Distribuzione e benchmarking
  • Guardando al futuro

Sarò edificio (ok ho costruito, poi ha scritto questo) una applicazione di esempio per testare i concetti su una macchina locale con Windows XP e la mia macchina virtuale 'GridMachine'. Il mio server di controllo del lavoro sarà la mia macchina principale che corre Fedora 11 .

Questo è in alcun modo lo scopo di dimostrare un sistema completamente funzionante robusto, il suo significato più di una dimostrazione e discussione mostrando che queste cose possono essere realizzati in uno spazio di tempo ragionevolmente breve e con poca spesa. Non esitate a inviarmi eventuali commenti, correzioni o miglioramenti e farò del mio meglio per mantenere questo articolo aggiornato alla partita.

La prossima volta

Nella parte 2 inizierò guardando il sistema di controllo del lavoro, e guardare in quanti posti di lavoro dovrebbe essere configurato in modo da ottenere maggiore quantità di lavorazione garantendo nel contempo che ogni lavoro viene elaborato senza fallo.

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 delle 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

La terza tabella e finale consiste in 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 avresti avuto almeno un lavoro completo facilmente liquidati entro la fine di ogni periodo lungo di inattività, in questo modo di mantenere i posti di lavoro ticchettio sopra e in caso peggiore di un lavoro avrebbe preso due giorni per il primo processo dovrebbe mancare.
  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à.

Ufficio Grid Computing con ambienti virtuali - Parte 5

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

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 4 abbiamo esaminato l'uso di strumenti per assicurare che stiamo correndo l'ultima versione dei sorgenti di dati e codice in modo che i risultati ottenuti siano sempre aggiornati con le ultime informazioni di business e la logica.

Pre-distribuzione

Prima di distribuire il vostro sistema di rete, se c'è una cosa che si fa e una cosa sola è valutare il vostro sistema attuale! Non importa quello che dicono i colleghi su quanto lavoro in più il sistema è intenzione di fare se non si hanno numeri a sostegno di questo vostro garanzie non sono nulla. Così,

  • quanti record si può processo attualmente? Al giorno? Per ora?
  • Quanto tempo è in genere necessario per girare un lavoro?
  • Quanto più capacità hai?

Ci sono anche altre domande:

  • Se il server di elaborazione (o uno dei server di elaborazione) si stabiliscono come saranno le conseguenze sulle vostre capacità, si sarà azzoppato?
  • Quali vantaggi vi speranza / si aspettano di ottenere da un sistema a griglia?
  • Le vostre macchine per ufficio in grado di eseguire i lavori?
  • Se la vostra (o di posti di lavoro si può essere convertito) per lavorare in questo stile di esecuzione?

L'ultimo punto importante è quello di prendere il vostro tempo su una modifica importante come questo. Aggiornare il codice di elaborazione a lavorare con la nuova metodologia, punto di riferimento nuovo. Eventualmente impostare il server di elaborazione per eseguire una macchina virtuale, dopo tutti i vostri server di elaborazione sarà solo un altro lavoratore (solo uno molto potente relativamente). Lasciare che il processo di insediamento di nuove.

Distribuzione

Il mio suggerimento sarebbe quello di pop in un week-end ufficio eseguire tutte le installazioni e setup. Fate questo poco prima di quindici giorni di vacanza e lasciare in modo che altri poveretto per far fronte alle conseguenze ... forse no ...

Di distribuzione per un sistema come questo ha bisogno di essere lento. Nonostante sia relativamente semplice da impostare questo sistema interesserà l'intera infrastruttura di ufficio (anche quello digitale). In primo luogo, roll out di un paio di macchine alla volta, controllare il traffico di rete, come i padroni di casa lavoratore di eseguire in un giorno per giorno. Potrebbe essere necessario modificare la configurazione di posti di lavoro in risposta alle vostre conclusioni.

Una volta che il sistema si è risolta con poche macchine (diciamo il 10% di tutte le macchine per ufficio, vale a dire 5) continuare a monitorare il traffico di rete e la macchina host benchmark performance. nuovamente Avanti, si dovrebbe ora essere la trasformazione di posti di lavoro del 33% rispetto la tua primi benchmark. Controlla questo è così, o che siete almeno in questo campo da baseball. In caso contrario, indagare su ciò che sta accadendo prima di passare. Ripetete questo ciclo fino a quando non hanno felicemente tutte le macchine per ufficio in esecuzione senza uccidere performance individuale macchina o rettifica la rete a un punto morto.

In ogni momento tenere benchmarking, anche dopo tutte le distribuzioni sono fatti. Controlla gli aggiornamenti come nuovo codice influenzare la velocità del vostro sistema, controllare tutti i lavoratori stanno segnalando in posti di lavoro e di trasformazione. Lentamente (molto lentamente) la configurazione di incremento di posti di lavoro per ottenere il meglio dal vostro lavoratori e di rete.

Stop!

Che cosa succede se si desidera interrompere la vostra lavoratori in esecuzione a un certo momento? Sono tutti là fuori in esecuzione, rigeneranti, e facendo del loro meglio per elaborare i dati come insetti affamati. La risposta può sembrare ovvio ma vale la pena di aggiungere solo nel caso in cui la sua trascurato. Basta modificare lo script di elaborazione con un exit (0) or die () o qualche altra indicazione per uccidere il vostro lavoro di elaborazione. An important reason why we always try to update to the latest processing script before any run!

Dimostrazione del sistema

In order to write this set of short articles I created a very small grid to demonstrate the technologies and methodologies. I read lots of articles, tutorials, and used various tools to setup and monitor what was going on. By no means have I gone out and saturated a whole office with traffic and nor have I had access to a regular staff members PC to see how host performance was affected.

My demonstration system was very humble indeed. I used my regular desktop set up as a job control server. On this I had installed mySQL server installed set up as a master in replication, PHP , and SVN linked through apache (for access via worker VM).

I then created a centOS worker machine on VirtualBox on a 6 year old windows XP laptop. I setup scheduled tasks as specified after copying the VM onto the machine and let it go.

The virtual machine was set up with PHP, subversion, and mySQL. I checked out a branch named 'worker' from my job control servers repository and made sure it could be updated using 'svn update'. Next I setup mySQL as a slave and checked that data was replicating from mySQL on the job control server down to the worker VM. After all this I setup the bash script and the cron job.

My processing script basically went along the lines of this (very simple stuff):

  • Read in the name field
  • Counted the number of similar names in a table from the data source held on the VM
  • Counted the number of names as above but splitting the name by spaces (ie forename, middle, surname)
  • Repeated this process 1,000 times

Each job took approximately 20 minutes to run. At one point I opened several copies of the worker VM on the windows laptop and watched the jobs be checked off by each of the worker IP addresses. At this point I also confirmed that replication automatically restarted.

Leaving the laptop to idle resulted in a worker starting to process jobs from the job control server. When resuming laptop usage there was a delay of about 30-60 seconds, this is a fair amount of time and staff would need to be made aware that their machine may pause for a short while when returning to the machine. Newer machines may not have a pause of this long. The benefit of the amount of processing performed by these machines during idle periods would more that outweigh staff members having to wait a short period (say 1 minute) on arriving at their machines of a morning (I frequently wait longer that this for a Windows Defender update to take place) provided they were made aware of this (useful time to grab a morning coffee!).

Overall I feel confident that I have demonstrated the technologies that could be used to create such a system. I have shown that such a system does work on a (very) small scale and with some more experimenting could be scaled up utilise the resources of an office's machines. If I don't get to the point of doing this I would be very interested to know/see when someone else does.

Conclusions / Evaluation

Il passo successivo ovvia sarebbe quella di avere realmente un esempio reale e iniziare a implementare un sistema come questo all'interno di un ambiente di ufficio e vedere cosa succede. Chiedere a un business di impegnarsi per questo senza una società sentiero ardente per provare la tecnologia e l'efficacia può essere un po 'difficile. Tabella / calcolo distribuito è molto popolare è alcuni circoli e ha alcune applicazioni di grandi dimensioni (BIONC, SETI @ Home, Folding @ Home, ecc.) Non ho, però, trovare una scala più piccola e semplice sistema come questo nelle mie ricerche che potrebbero essere implementato all'interno di un ambiente di ufficio.

Ho creato un sistema fondamentalmente libera utilizzando software open source per lo più e gli strumenti disponibili in quasi ogni ufficio. Le tecnologie sono state sostanzialmente dimostrato e dimostrano di effettuare e funzionare come previsto. Spero di avere dimostrare che con non molto lavoro e con una configurazione molto semplice è possibile distribuire un sistema di grid computing ufficio che è potente, a basso costo, Â e scalabile al tempo stesso.

Una volta che il sistema è installato e funzionante non c'è quasi mai fine alla quantità di personalizzazione e miglioramenti si possono fare. Per le statistiche esempio / benchmarking può essere facilmente aggiunto che mostra il valore di un tale sistema ogni giorno. Le nuove macchine possono essere aggiunti rapidamente e facilmente come e quando si arriva con gli aggiornamenti per l'hardware esistente rafforzare la potenza di elaborazione.

Spero che abbiate gradito la lettura di questa serie di articoli e la sua vi ha dato spunti di riflessione sul funzionamento di un sistema di rete in ufficio. La soluzione presentata qui non necessariamente funziona in tutte le situazioni, ma dovrebbe essere adattabile per consentire di ottenere il trattamento dei dati fatta usando la propria soluzione.

Non esitate a inviarmi eventuali commenti, correzioni o miglioramenti e farò del mio meglio per mantenere questo articolo aggiornato alla partita.

[AVVISO] figlio pid XXXX uscita segnale Segmentation fault (11)

Con Steven Watkin Lloyd , Domenica 11 Ottobre 2009 06:09

Se hai recentemente aggiornato PHP o Apache è forse scontra con il problema del webserver restituire pagine vuote, e lanciando messaggi d'errore nel vostro log con idea del perché, ecco un possibile modo per risolvere il problema ...

Ho avuto questo problema un paio di volte di recente dopo l'aggiornamento di Apache o PHP in una macchina virtuale. La prima volta ho notato l'errore ho semplicemente ripristinato un backup del mio VM ma la seconda volta mi sono reso conto che avrei dovuto esaminare la questione.

La prima volta ho notato il problema alcune delle mie pagine web venivano serviti come file vuoto, mentre gli altri lavorato assolutamente bene. Dopo qualche indagine ho notato che apache si mise a scrivere in / var / log / http / error_log con il seguente messaggio riprese,:

[AVVISO] figlio pid XXXX uscita segnale Segmentation fault (11)

Non c'è da assegnare ad andare on-line, e la maggior parte delle pagine su di esso pista off a nulla. Detto questo, ho ristretto il rilascio di PHP crash quando si cerca di non necessarie librerie dinamiche.

Guardando il mio php.ini (/ etc / php.ini) ho commentato tutte le librerie dinamiche caricate in programma di tornare in commentandoli come richiesto. I due che ho dovuto prendere da dove pdo.so e mysql . così.

Una volta che queste sono state rimosse tutte le mie pagine web venivano serviti bene, come prima l'opzione / update PHP Apache.

Wireless on Acer 5002 WLMi on Linux (Fedora 11)

By Steven Lloyd Watkin , Saturday 11th July 2009 9:48 pm

As I've spent another few hours today without internet access I thought I'd better get this written down so that next time I mess my laptop up the information is easy to fix.

Basically to get wireless drivers working for an Acer 5002 WLMi you'll need to use b43-fwcutter. Instructions can be found here: Linux Wireless B43 .

Easy once the information is located.













Tema di Panorama Themocracy

11 visitors online now
8 ospiti, 3 bots, 0 utenti
Max visitatori oggi: 14 alle 12:11 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