PDA

View Full Version : Cluster Parallelo


robynho85
21-12-2010, 15:25
Salve a tutti,

ho bisogno di creare un framework che mi permetta di suddividere il carico di lavoro di un qualunque programma(scritto in un qualunque linguaggio)su un cluster. è necessario suddividere il lavoro su piu processori senza che l'utente abbia necessità di imparare un nuovo linguaggio di comunicazione tra i nodi e in maniera trasparente, cioè come se lavorassimo su un unica macchina.

per adesso la configurazione attuale è:
Il sistema è composto da 4 macchine Dell Power Edge R410 con 2 Intel Xeon E5530 (8 core a 2.4Ghz, 8M Chache) e 24 GB di Ram e da una SAN Dell Equal Logic PS4000XV (16 HD 600GB) con 9.6TB di capacità di memorizzazione .
Tre macchine monta sistemi operativo Microsoft Windows Server 2008 R2 Enterprise e una Linux Fedora 12 (Constantine).
La caratteristica essenziale è la trasparenza, ovvero programmare come se si trattasse di una sola macchina.

Quale linguaggio è il migliore per un discorso del genere?(io pensavo Java con i thread)

Secondo voi in giro ci sono software che fanno già cose simili?

Come mi consigliate di procedere?

Considerate che sono un novizio del clustering e di tutto ciò che vi ruota attorno.

Ringrazio chiunque abbia informazioni in merito per la disponibilità

robynho85
26-12-2010, 19:27
Ragazzi nessuno ha qualche idea!!!PLEASEE

Jak696
27-12-2010, 15:45
Secondo voi in giro ci sono software che fanno già cose simili?

Come mi consigliate di procedere?

Considerate che sono un novizio del clustering e di tutto ciò che vi ruota attorno.

A tonnellate, pure open source probabilmente, cerca "load balancing" con google.

Visto che sei a digiuno di clustering, motivo in più per appogiarsi su qualcosa di già fatto. Non ne so molto, ma credo che il discorso che sta dietro ai software di load balancing sia abbastanza complicato.

Sisupoika
29-12-2010, 16:11
Dipende parecchio da cosa vuoi usare per programmare (linguaggio, framework, etc) e, soprattutto, se si tratta di applicazioni web oppure no.

Se si tratta di una normale web application, allora come Jak696 ti suggeriva parliamo di normale load balancing, per cui ti suggerisco di dare una occhiata ad haproxy oppure nginx.


Una soluzione che potrebbe andare bene a prescindere dal tipo di applicazione, a patto di lavorare in Ruby, e' quella di usare Delayed Jobs (http://vitobotta.com/cvr).

In pratica si tratta di un particolare systema di queueing basato su MySQL, molto semplice da utilizzare, estremamente flessibile e che ti consente di dividere il processing di jobs tra diversi host, e puoi anche avviare un numero diverso di workers su ciascun host.

Cmq qualunque sistema basato su queues puo' andare bene, a patto di poter "pacchettizzare" il processing in jobs. Altrimenti, beh, specifica meglio :D

robynho85
29-12-2010, 18:51
Il mio concetto è semplice...Io ho 4 macchine ognuna con 4 processori che hanno ognuna un OS diverso.

Interfacciandomi su una delle 4 macchine devo eseguire un qualunque programma(java,ruby,etc) e parallelizzarlo sui 16 processori totali senza che l'utente debba imparare alcun linguaggio o inviare segnali tra le macchine(cioè vedere il sistema in maniera trasparente).

Esiste qualcosa che mi possa aiutare?

Spero di essere stato chiaro...Scusatemi se non sono preciso ma non sono pratico della materia.

Grazie mille a tutti

Sisupoika
29-12-2010, 19:07
Si', Ok, ma questo programma di cui parli: CHE FA'? :D

robynho85
29-12-2010, 19:36
Si', Ok, ma questo programma di cui parli: CHE FA'? :D

Questo programma non fa altro che sfruttare le potenzialità del cluster...

Un qualunque programma che può essere eseguito in parallelo...Da un esempio tipo questo per java: a qualunque altra cosa

class Prova extends Thread {
private int id, p;
public static void main(String [] args) {
if (args.length == 1) {
try {
int n = Integer.parseInt(args[0]);
System.out.print("\033[2J");
for (int i = 1; i <= n; i++) {
(new Prova(i)).start();
System.out.print("\033["+i+";0HT"+i);
}
} catch (NumberFormatException e) {}
}
}
Prova(int n) {id = n; p = 3;}
public void run() {
for (long i = 0; i < 99999999; i++) if (i % 10000000 == 0)
System.out.print(this);
}
public String toString() {
p++; return "\033["+id+";"+p+"H"+"*";
}
}

Non guardiamo la sintassi del programma...Me lo ha dato il mio professore e non lo ho scritto io. Se si esegue questo programma si vede che i 4 processori della prima macchina lavorano al 100% tutti...Devono lavorare tutti e 16, cioè anche le altre tre macchine

ingframin
29-12-2010, 20:38
Hai provato a vedere questo?
http://www.globus.org/
I miei amici informatici lo hanno usato per l'esame di griglie