Newsgroup: it.comp.programmare
Titolo: Progetto server su più macchine

Ciao NG,
Mi servirebbe di mettere in piedi un progettino che
descrivo di seguito (non è pertinente, ma uso il
C++, posix thread e librerire per i socket native
per il compilatore).
Dovrei scrivere un'applicazione che possa girare su
più macchine, che faccia da server "sparso": un
client si connette all'applicazione server su una
macchina (possono esserci più client che si
connettono allo stesso server sulla stessa macchina)
e il server va a vedere quante altre sue "copie"
girano sui vari PC connessi, li interrroga su cosa 
stanno
facendo e smista il lavoro di conseguenza. Una volta
che ciascuna istanza del server ha risposto e i vari
pezzi in cui è stata scomposta la richiesta del
client sono stati tutti ricevuti, trasmette la
risposta al client. Ovviamente, come caso 
particolare, se il server che sta girando è uno solo 
si ricade nel solito modello client-server che più o 
meno riesco a gestire. Tralasciando per un po' una 
serie di problemi che vedo abbastanza complessi, le 
mie prime domande sono:
1) Non ho per niente chiaro quante porte come minimo
vanno usate; un server può usare la stessa porta per
molti client, ma tra loro come fanno i server (parlo
sempre dello stesso programma che sta girando
contemporaneamente su macchine diverse) a comunicare
l'uno con l'altro?
2) Come organizzo l'architettura di smistamento del
carico? Su ogni istanza del server deve girare un
thread che interroga tutti gli altri server in
sequenza? E se tutti fanno la stessa cosa non ci
saranno una quantità di conflitti? Ho la brutta
sensazione che occorra una specie di applicazione
supervisore ma siamo da capo. Se il PC dove dovesse
girare questo supercontrollore non è più disponibile
che succede? Occorre un sistema di sincronizzazione
globale? E se sì come si fa?
3) Per fare le prime prove, è possibile far girare 
in XP più istanze della stessa applicazione?
Insomma, come imposto almeno il lavoro per capire
come si fa un progetto simile?
grazie!
Apx.

in XP pi� istanze della stessa applicazione?
Certo. Potresti anche installare VMWare e creare pi� macchine virtuali
sulla stessa macchina fisica, simulando macchine fisiche distinte.

34567 sulla macchina Y; C impiega la 56789 sulla macchina Z. 
Sorry, da riscrivere: 
2) applicazioni server A, B e C che girano sulla stessa macchina X; in
questo caso le applicazioni server dovranno necessariamente usare
porte distinte: A impiega la 12345 sulla macchina X; B impiega la
34567 sulla macchina X; C impiega la 56789 sulla macchina X. 

Per ora grazie mille (nel senso che rileggerò e ci
penserò su). Il problema che devo risolvere è quello
con cui ogni tanto sbomballo su vari NG. Ho un
modello di un oggetto fisico che evolve nel tempo e
a ogni passo deve risolvere alcune centinaia di eq.
differenziali (ovviamente possono esserci diverse
"istanze" del modello con parametri iniziali
diversi). L'idea era quella di fare una specie di
lista istante per istante di tutte le equazioni in
ballo, ciascuna nel caso etichettata con un
riferimento all'istanza del modello, e smistare
tutto tra i server. Non appena le equazioni sono
risolte tutte per quella specifica istanza, si passa
al passo temporale successivo e finito il calcolo,
il server rispedisce al client le varie funzioni del
tempo.
Però non vorrei vincolarmi a questo schema nel senso
che potrei riciclare la stessa struttura di "server
di calcolo distribuito/i" per diversi altri
problemucci su scala molto grande che ho nel paniere
delle cose da fare, per questo volevo puntare sui
criteri generali e la tua risposta per ora pare
starci a fagiolo.
grazie ancora!
Apx.
-- 
Perché gli iraniani odiano il vento?
Perché gli sbatte tutte le persiane.

[...]smistare tutto tra i server.
http://it.wikipedia.org/wiki/Grid_computing
Considera che esistono sistemi gi� consolidati per il calcolo
distribuito e soluzioni open-source gi� studiate e collaudate.

 open-source già studiate e collaudate.
Wow! Qualsiasi cosa si pensi è sicuramente stata già
fatta. Ho dato un'occhiata ma molto superficiale, e
mi pare una strada dura poco meno che scrivermi
tutto da solo.
BOINC pare compili solo su Linux e purtroppo, per
qualche problema di cui non vengo a capo, VirtualBox
mi fa piantare il PC con lo schermo blu. Altri, tipo
mi pare Alchemi (sic.) hanno comunque
un'architettura gerarchica per cui sembra esistere
una specie di controllore dei servers, mentre a me
piaceva l'idea che nel caso di messa fuori servizio
di uno o più, gli altri si riallocassero i task. Un
altro progetto di cui però non ricordo il nome ora è
in C# che odio dal più profondo del mio cuore ma se
vedessi che funge potrei tentare di interfacciarlo
con il mio ambiente, che è MinGW (e non so se c'è il
compilatore per C#).
Prima però di chiedere altro e links per mia
abitudine darò un'occhiata un po' meno superficiale,
magari qualcosa di adatto lo trovo.
Comunque sì, sospettavo esistessero queste cose ma
vederle è incredibile; direi che l'emulatore di
Warcraft, Arcemu, lo passo al secondo posto dei
progetti più "pazzeschi" che conosco (oh, be', ce ne
sarebbero tanti, lo so).
ciao!


 magari qualcosa di adatto lo trovo.
Il progetto Seti da anni distribuisce un software che permette ad una
rete di computer di effettuare sequenze di calcoli matematici
distribute per ogni pc.
Se ho capito bene è ciò che vorresti fare tu.
Vedi
http://setiathome.berkeley.edu/
potresti contattarli ed avere maggiori dettagli.

 potresti contattarli ed avere maggiori dettagli.
grazie pure a te! Ora vado e vedo, magari qualcosa 
di usabile lo trovo.
