Migliora la velocità di un server Tomcat con MySQL

1

Sto sviluppando un'applicazione con 3 lati, desktop (JavaFX), server (Tomcat) e Android.

E un server di database MySQL.

L'app riceve email e le converte in attività. Le attività vengono inviate ai dispositivi Android dall'app desktop. L'utente del dispositivo Android fa tutto con l'attività e invia l'attività con nuove informazioni al server.

L'app desktop prende i dati dal database.

Ora funziona, ma procede troppo lentamente dal desktop, a causa del possibile potenziale carico del server.

Il server ha 3 attività:

  • Lettore e-mail JavaMail e scrivere nel database.
  • Invia messaggi PUSH ai dispositivi Android e ricevi alcune informazioni da loro e scrivi nel database.
  • Ricevi la posizione GPS dai dispositivi Android e scriverla nel database.

I miei dubbi sono:

A) Separa il lato server in 3 progetti.

  1. Lettore di posta
  2. Invia PUSH ai dispositivi Android.
  3. Recettore di posizione GPS

B) Separa il database in 2 database:

  1. Per la posizione GPS.
  2. Per le informazioni sulle attività.

Questa procedura renderà l'app più veloce?

Modifica per rispondere a Clinton Bosch:

Sto usando Hibernate per connettermi al database, ecco il mio file di configurazione di ibernazione:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>

        <property name="hibernate.c3p0.min_size">2</property>
        <property name="hibernate.c3p0.max_size">150</property>
        <property name="hibernate.c3p0.timeout">100</property>
        <property name="hibernate.c3p0.max_statements">0</property>


        <property name='connection.username'>root</property>

        <!-- Database connection settings -->
        <property name='connection.driver_class'>com.mysql.jdbc.Driver</property>

        <!-- JDBC connection pool (use the built-in) -->
        <property name='connection.pool_size'>10</property>

        <!-- SQL dialect -->
        <property name='dialect'>org.hibernate.dialect.MySQLDialect</property>

        <!-- Echo all executed SQL to stdout -->
        <property name='show_sql'>false</property>

        <!-- Mapping files -->
    </session-factory>
</hibernate-configuration>
    
posta vLopez 06.12.2014 - 14:20
fonte

2 risposte

1

Stai usando un pool di connessioni? molto spesso ho visto sviluppatori che utilizzano un server di applicazioni senza un pool di connessioni e la maggior parte del tempo è dedicato a stabilire connessioni DB che sono processi molto pesanti.

Oltre a usare un profilatore come jprofiler (per il quale è possibile ottenere una licenza di valutazione), sarebbe il miglior punto di riferimento per diagnosticare il problema.

I microservizi (server separati) sono un'architettura piuttosto popolare soprattutto nelle applicazioni su larga scala perché un errore in una singola parte non significa che tutto si ferma (una delle molte ragioni per usare questa architettura). Il negativo è che richiede più risorse (una delle molte ragioni per non usare questa architettura).

Detto questo, Tomcat è un server di applicazioni molto potente e lo sto eseguendo con applicazioni aziendali che servono migliaia di richieste al minuto senza problemi.

È difficile consigliare senza la dimensione dell'immagine completa, ecc., ma vorrei iniziare con il profiling.

    
risposta data 06.12.2014 - 17:49
fonte
0

Mantieni il db in scrittura asincrono, così quando l'utente invia gps o qualsiasi altra cosa, crea POJO thread-safe con tutti i dettagli, impostalo su una classe che implementa Runnable e mettilo in coda.

La domanda naturale è cosa succede se il server fallisce? La domanda da parte mia è: quanto è importante? Se alcuni 100 inserimenti falliscono, gli utenti perdono denaro? Smetti di usare l'app? se no, lascia che sia!

È quindi possibile inoltrare i lavori a una coda di thread gestiti java utilizzando un executor del pool di thread.

    
risposta data 08.12.2014 - 17:57
fonte

Leggi altre domande sui tag