Vai al contenuto


Foto

[Java] Architettura distribuita


Questa discussione e' stata archiviata Questo significa che non e' possibile rispondere
79 risposte a questa discussione

#1 Sgurbat

Sgurbat

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStelletta
  • 9.772 Messaggi:

Inviato 16 marzo 2013 - 12:45

Allora: siccome c'è da migliorare le performance di un'applicazione in Java "composita" spalmandola su più server avrei bisogno di capire come fare una cosa.

 

Riassumendo questa applicazione al momento è dotata di una web-app come frontend grazie alla quale gli utenti caricando file vari (pdf, excel ecc) tramite un Wizard.

 

Caricati i file viene considerato "chiuso" un pacchetto. Questo pacchetto di file deve essere lavorato (spezzare il pdf in pagine, estrarre i testi ecc.) e alla fine viene generato un unico file zip.

 

La lavorazione è piuttosto onerosa e deve poter avvenire per N pacchetti in simultanea per N clienti.

 

Al momento web-app e applicazione che lavora i pacchetti si parlano tramite code JMS ma risiedono sulla stessa macchina quindi filesystem comune.

 

La volontà è di ennuplicare l'applicazione che genera questi pacchetti su più macchine separate dalla web-app per velocizzare il tutto.

 

Se la web-app che sta sul server A salva i pacchetti sul filesystem di A e manda un messaggio di lavorazione al primo "consumer" libero che magari sta sul server B, C, D ecc (non si può sapere a priori), come faccio a trasferire i file dal filesystem di A sul filesystem di B oppure C oppure D ecc. in modo sicuro e rapido?

 

I file del pacchetto da lavorare dovrebbero essere spostati così da essere lavorati e, mentre mia madre succhia cazzi, infine il pacchetto zip magari rimandato inditro al filesystem di A (front-end) che rimane come repository unico dei file sorgenti e dei pacchetti finiti mentre appunto i "semilavorati" vengono smandruppati di volta in volta sugli altri vari nodi.

 

Tnx.


We are what we repeatedly do. Excellence, then, is not an act, but a habit. (Aristotele)


#2 ally

ally

    Banned

  • Bannati
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 11.498 Messaggi:

Inviato 16 marzo 2013 - 12:58

...dovresti specificare la dimensione di ogni songolo pacchetto per determinare la strada piu' rapida...per grosse dimensioni potresti montare le directory del primo server sui secondari o condividerle via ftp/ssh...per piccoli pacchetti potresti spostarle tramie socket java...ma lo spostamento dei file è il problema minore...penserei piuttosto al sistema di semafori per bilanciare il carico...io creerei una lista di ip di server in grado di svolgere il lavoro...un socket server interroghrebbe a turno i client che essi espongono e di volta in volta gli attribuirebbe un lavoro da svolgere...a lavoro ultimato si riprenderebbe i dati elaborati e assegnerebbe un nuovo lavoro se liberi...


... ...le rose son rosse...le viole son blu...io sono schizofrenico...e lo sono anche io...

 

as-shape.gifAthlon Xp 2000+ - MSI K7T266 Pro Raid - 512Mb DDR cas2 - 2xIBM 60Gb - Kyro2 64Mb - FireWire PCI - ATI-TV Wonder - Alice 256 
as-shape.gifPentium 233MMX - 128 MB SDR - 1xMaxtor 40GbGb - 3D Rage - SB16 as-crash.gif Sitolo  hideing_behind_computer_1_.gifCercoScheda Video - V.M.18 :D


#3 Sgurbat

Sgurbat

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStelletta
  • 9.772 Messaggi:

Inviato 16 marzo 2013 - 13:06

Allora i pacchetti da lavorare possono andare da pochi mega a centinaia di mega.

 

La gestione del carico credo verrebbe gestita da un "Monitor" esterno, ne ho parlato velocemente col capo quindi va approfondita la cosa.

 

Potrebbero addirittura esiste "code prioritarie" a seconda del cliente es: silver, gold, platinum ecc. per dare precedenza a quello che sgancia più money.

 

Esiste qualcosa di più pratico e veloce di FTP in questi casi? Il mio capo ha accennato alla possibilità di vedere "cartelle condivise" tramite cui trasferire i file con la 100Mbit.

 

Però non saprei, non ho molta esperienza su questo.

 

Grazie ancora.


We are what we repeatedly do. Excellence, then, is not an act, but a habit. (Aristotele)


#4 ally

ally

    Banned

  • Bannati
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 11.498 Messaggi:

Inviato 16 marzo 2013 - 13:10

...ovviamente parliamo di linux...puoi montare cartelle remote in zerodue con nfs...e risolvi il problema...chiaro che ogni client deve "scaricare" cmq in locale il file per non appesantire il server centrale che condivide la risorsa...


... ...le rose son rosse...le viole son blu...io sono schizofrenico...e lo sono anche io...

 

as-shape.gifAthlon Xp 2000+ - MSI K7T266 Pro Raid - 512Mb DDR cas2 - 2xIBM 60Gb - Kyro2 64Mb - FireWire PCI - ATI-TV Wonder - Alice 256 
as-shape.gifPentium 233MMX - 128 MB SDR - 1xMaxtor 40GbGb - 3D Rage - SB16 as-crash.gif Sitolo  hideing_behind_computer_1_.gifCercoScheda Video - V.M.18 :D


#5 Sgurbat

Sgurbat

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStelletta
  • 9.772 Messaggi:

Inviato 16 marzo 2013 - 13:11

Tanto per precisare allo stato attuale l'applicazione (unica) che lavora i pacchetti scoda tutti i messaggi che arrivano nella queue e apre N thread per smandruppare i pacchetti.

 

Di fatto è un errore perchè se mandassi mille pacchetti in lavorazione il software tenterebbe di aprire 1000 thread simultanei ... non ricordo se ho messo un limite al numero di thread (maxActive).

 

Si pensava invece di rendere il software single thread ovvero lavorare un pacchetto alla volta e non scodare il messaggio successivo (che incapsula le info del pacchetto seguente) sino al termine di quello attuale.

 

La lavorazione simultanea di più pacchetti avverrebbe grazie alla replicazione dell'applicazione su più server.


We are what we repeatedly do. Excellence, then, is not an act, but a habit. (Aristotele)


#6 Sgurbat

Sgurbat

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStelletta
  • 9.772 Messaggi:

Inviato 16 marzo 2013 - 13:12

...ovviamente parliamo di linux...puoi montare cartelle remote in zerodue con nfs...e risolvi il problema...chiaro che ogni client deve "scaricare" cmq in locale il file per non appesantire il server centrale che condivide la risorsa...

 

Mi sa che siamo vincolati a Windows come server.


We are what we repeatedly do. Excellence, then, is not an act, but a habit. (Aristotele)


#7 Killer application

Killer application

    Schiavo

  • GRULLINO
  • 11.918 Messaggi:

Inviato 16 marzo 2013 - 13:41

parliamo di server in lan?

Socket su lan non dovrebbe avere le stesse prestazioni di un ftp/ssh?

 

Per di piu io non farei il primo server di ricezione monothread per questioni di perfomance, ma anzi metterei un numero di 3d pari al cap bandwidth della macchina diviso il numero di processi da gestire contemporaneamente.

 

tipo la macchina è su una 100Mb/s farei 9 3d con 9 socket da 10Mb/s l'uno e lascio 10Mb/s per la gestione.


Immagine inserita

#8 toyo

toyo

    sono triste

  • Donatori di sperma
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 44.062 Messaggi:

Inviato 16 marzo 2013 - 15:25

2013: Amazon


FIRMA FOTTUTAMENTE EDITATA. IL FOTTUTO STAFF.
 

Mai più giorni felici


#9 Killer application

Killer application

    Schiavo

  • GRULLINO
  • 11.918 Messaggi:

Inviato 16 marzo 2013 - 15:39

a livello teorico so come funziona amazon, ma che linguaggio usa?

 

poi immagino che sti server ormai li abbiano, non è che li possono buttare per andare sulla nuvola.


Messaggio modificato da Killer application il 16 marzo 2013 - 15:40

Immagine inserita

#10 toyo

toyo

    sono triste

  • Donatori di sperma
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 44.062 Messaggi:

Inviato 16 marzo 2013 - 15:44

ti fai l'immagine dei server e li butti sulla nuvola, li tiri si quando servono, dove servono, se servono, le versioni che ti servono, [*] che ti servono

 

 

per le app java hai già tutto pronto: http://aws.amazon.com/eclipse/


FIRMA FOTTUTAMENTE EDITATA. IL FOTTUTO STAFF.
 

Mai più giorni felici


#11 toyo

toyo

    sono triste

  • Donatori di sperma
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 44.062 Messaggi:

Inviato 16 marzo 2013 - 15:45

i server ormai servono solo a far mangiare ore ai vari ally :trollface:


FIRMA FOTTUTAMENTE EDITATA. IL FOTTUTO STAFF.
 

Mai più giorni felici


#12 toyo

toyo

    sono triste

  • Donatori di sperma
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 44.062 Messaggi:

Inviato 16 marzo 2013 - 15:46

che poi java per le webapp è so 2006


FIRMA FOTTUTAMENTE EDITATA. IL FOTTUTO STAFF.
 

Mai più giorni felici


#13 toyo

toyo

    sono triste

  • Donatori di sperma
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 44.062 Messaggi:

Inviato 16 marzo 2013 - 15:49

btw, sdk disponibili:
 



un mio amico in un'azienda aveva fatto tutto scriptato in ant, ma non mi ricordo di preciso


FIRMA FOTTUTAMENTE EDITATA. IL FOTTUTO STAFF.
 

Mai più giorni felici


#14 Killer application

Killer application

    Schiavo

  • GRULLINO
  • 11.918 Messaggi:

Inviato 16 marzo 2013 - 15:50

che poi java per le webapp è so 2006

java è old W ROR ?


Immagine inserita

#15 TigerShark

TigerShark

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 16.685 Messaggi:

Inviato 16 marzo 2013 - 15:51

un processo single thread e' un fail in questo caso dato che mentre il software elabora puo' benissimo scaricare gli altri pacchetti prendendoli dalla coda per mascherare la latenza di rete che e' decisamente elevata.

Processi single threaded vanno bene solo in determinati casi, come quello in cui un'azienda di queste parti aveva ottimizzato tutta la sua pipeline di calcolo per scodare ed elaborare messaggi a ritmo elevatissimo (milioni al secondo) mantenendo il tutto entro la cache di secondo livello.

Visto il tuo caso specifico e le dimensioni in gioco non e' pensabile.

comunque io alla fine se fosse possibile sapere in anticipo il tempo di elaborazione di ogni singolo pacchetto farei un prefetching intelligente in base al numero di pacchetti da elaborare divisi per i vari server, ovviamente va pero' pensato un meccanismo di coordinazione tra i vari server per monitorare eventuali rallentamenti/errori.

Inoltre visto che praticamente ogni server al giorno d'oggi e' multi-core elaborare un pacchetto per ogni core e' quello che ti da lo speedup maggiore se sei cpu bound.


I must not fear. Fear is the mind-killer. Fear is the little-death that brings total obliteration. I will face my fear. I will permit it to pass over me and through me. And when it has gone past I will turn the inner eye to see its path. Where the fear has gone there will be nothing. Only I will remain.

#16 toyo

toyo

    sono triste

  • Donatori di sperma
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 44.062 Messaggi:

Inviato 16 marzo 2013 - 15:52

non ror per forza, non sono un religioso

 

 

ora su un progetto sono su asp.net mvc per dire

 

java per le webapp mi sta in culo per lo stack elefantiaco che ti costringe a portarti dietro


FIRMA FOTTUTAMENTE EDITATA. IL FOTTUTO STAFF.
 

Mai più giorni felici


#17 TigerShark

TigerShark

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 16.685 Messaggi:

Inviato 16 marzo 2013 - 15:55

2013: Amazon

se ricordo bene come funziona amazon stai trascurando le latenze di rete che per file cosi' grossi (anche centinaia di mega) non sono assolutamente banali e ne diminuiscono di molto i benefici visto che i file devono prima transitare sui tuoi server e poi essere inviati per l'elaborazione in cloud.


I must not fear. Fear is the mind-killer. Fear is the little-death that brings total obliteration. I will face my fear. I will permit it to pass over me and through me. And when it has gone past I will turn the inner eye to see its path. Where the fear has gone there will be nothing. Only I will remain.

#18 Killer application

Killer application

    Schiavo

  • GRULLINO
  • 11.918 Messaggi:

Inviato 16 marzo 2013 - 15:55

ti volevo sentire sbandierare i misteri di RoR secondo toyo :trollface:


Immagine inserita

#19 Killer application

Killer application

    Schiavo

  • GRULLINO
  • 11.918 Messaggi:

Inviato 16 marzo 2013 - 15:56

se ricordo bene come funziona amazon stai trascurando le latenze di rete che per file cosi' grossi (anche centinaia di mega) non sono assolutamente banali e ne diminuiscono di molto i benefici visto che i file devono prima transitare sui tuoi server e poi essere inviati per l'elaborazione in cloud.

può tirare su anche il main server su amazon a sto punto.


Immagine inserita

#20 toyo

toyo

    sono triste

  • Donatori di sperma
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 44.062 Messaggi:

Inviato 16 marzo 2013 - 15:57

se ricordo bene come funziona amazon stai trascurando le latenze di rete che per file cosi' grossi (anche centinaia di mega) non sono assolutamente banali e ne diminuiscono di molto i benefici visto che i file devono prima transitare sui tuoi server e poi essere inviati per l'elaborazione in cloud.

 

questo se usi amazon solo per l'elaborazione, ma se l'upload lo fai direttamente nel cloud?


FIRMA FOTTUTAMENTE EDITATA. IL FOTTUTO STAFF.
 

Mai più giorni felici