Fattori per la scelta tra l'utilizzo di una libreria wrapper o l'emissione di un processo da riga di comando dalla mia applicazione Web

4

Ho un'applicazione web Java che fa uso di alcune librerie, ad esempio: Ghost Script per convertire PDF in TIFF e Tesseract per OCR. Ci sono wrapper java per entrambi: Ghost4J e Tess4J.

Quali sono alcune cose a cui dovrei pensare quando decido se utilizzare le librerie o emettere un processo da riga di comando dalla mia applicazione web?

Off the bat ciò che sto notando è che le operazioni da riga di comando sono leggermente più veloci e non pagano il pedaggio sulla mia applicazione. Ad esempio, 100 utenti che inviano PDF che devono essere convertiti in TIFF utilizzando Ghost4j, rendono Java eseguito a più del 100% della CPU, rendendo l'intera applicazione Web non rispondente.

    
posta Anthony 28.09.2014 - 02:45
fonte

2 risposte

1

I seguenti fattori dovrebbero essere considerati:

  • portabilità
    • l'interfaccia della riga di comando sarà diversa per ambiente,
    • e anche la configurazione
  • prestazioni
  • riutilizzabilità
  • manutenibilità
  • scalabilità

Se possibile, considera la possibilità di creare il componente di conversione come servizio separato in esecuzione nella propria JVM (possibilmente di più) e di inoltrare richieste di conversione a questo servizio (riusabilità).

Questo ti permette di usare le librerie wrapper (permettendo al codice di essere portabile) + (manutenibilità).

Consente inoltre di ridimensionare il numero di processi del componente di conversione per gestire il ridimensionamento del sistema (scalabilità) e consente anche di ospitare potenzialmente su hardware diverso quando le risorse hardware esistenti sono al limite. (Performance)

Una semplice interfaccia web-service o equivalente è semplice da implementare tra due componenti per fornire questa funzionalità, che consente quindi di separare il comportamento dell'interfaccia Web dal lavoro da grugnito di eseguire la conversione dei documenti.

    
risposta data 21.01.2015 - 04:18
fonte
0

Accetto tutti i commenti e la risposta di cui sopra sui requisiti Non funzionali che influenzeranno se andare con la soluzione A o B.

Ulteriori informazioni sull'opportunità o meno che le conversioni vengano eseguite offline o in tempo reale (ad esempio, l'utente invia PDF e recupera Tiff non appena fatto) potrebbe essere utile.

Indipendentemente, assumiamo che a questo punto sei vincolato dalle risorse di sistema disponibili (conversione che consuma tutta la CPU disponibile) e dall'esperienza personale posso dire che gli strumenti da riga di comando saranno molto efficienti qui. Raccomando di usarlo su java puro.

Posso nominare un numero di sistemi java noti che usano imagemagick per fare una conversione simile (creare, ridimensionare, convertire PDF). inoltre viene fornito con una bella API Java con cui lavorare. Riferimento: link

Inoltre, se le prestazioni dell'app principale stanno riscuotendo un enorme successo a causa della conversione, ti consigliamo anche di spostare l'intera conversione su nodo / i dedicato / i.

    
risposta data 22.01.2015 - 02:25
fonte