Domanda

Ho più di 100 canali di flussi video da elaborare contemporaneamente. Devo catturare il video, generare miniature e servirle come servizio web. Per la generazione di miniature, posso usare JMF ecc. (Ho notato che c'è un altro post che parla di come generare e accedere: miniature di migliore qualità da file di immagini più grandi ). Ma la mia preoccupazione è: come ridimensionare? EEB Java EE o semplicemente thread Java SE? Quali sono i contro e i pro? Come scalare in orizzontale usando EJB?

Non ho familiarità con il problema della scalabilità e apprezzo molto i tuoi suggerimenti gentili.

Grazie.

È stato utile?

Soluzione

Accetto ... i thread dovrebbero aiutare a scalare su una singola macchina. Se vuoi ridimensionare su macchine diverse, usa Terracotta.

Altri suggerimenti

I thread Java SE possono aiutarti a scalare su una singola macchina, ma se hai bisogno di ridimensionare orizzontalmente su macchine diverse, EJB sarebbe un modo per farlo.

Se fossi in me, probabilmente lo farei passare a un livello di servizio Web separato che potrebbe funzionare su tutte le macchine necessarie, quindi caricare l'equilibrio tra quelle macchine.

Non vedo un motivo per usare EJB in questa situazione. Devi chiederti dov'è il collo di bottiglia. La mia scommessa sarà con l'elaborazione video. Profilerei la tua applicazione e vedrei quanti thread possono essere elaborati prima che trascorrano più tempo in attesa del timelice di quanti ne stiano elaborando. Dopo un certo punto l'aggiunta di più thread non aggiungerà più throughput. A quel punto sai cosa farà una macchina e di quante macchine avrai bisogno per sostenere un determinato rendimento. Come scalare la macchina è un'altra domanda.

Questi sono due problemi distinti.

Catturare / elaborare suona come un problema simile a una farm di rendering. Quelli sono ridimensionati banalmente in orizzontale. La maggior parte delle soluzioni prevede una coda di lavori, non è nemmeno necessario farlo in Java; basta trovare una soluzione semplice che ti piace. " render farm ffmpeg " o cose del genere dovrebbero produrre risultati in Google.

La tua parte "servire come servizio web" è in qualche modo indefinita. Se vuoi che questi video siano accessibili, potresti doverli semplicemente mettere su un server HTTP - questi possono essere facilmente bilanciati in base al carico e quindi scalabili in orizzontale - la velocità di archiviazione o la larghezza di banda della rete sarebbero probabilmente i tuoi primi colli di bottiglia lì.

Lascia lo stack J2EE formale dietro.

Piuttosto, una bella coda di messaggi che parla di JMS con il numero X di JVM che eseguono il numero Y di thread come consumatori.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top