• User Newbie

    Server per applicazione scalabile

    Salve a tutti,
    ho sempre lavoricchiato con i server rps, vps e dedicati ma non ho mai affrontato il seguente problema: mi si propone di aiutare un gruppo di amici sulla trentina a mettere su un server per una applicazione che potrà avere, secondo una stima di mercato, anche un milione di iscritti e fino a 10k di persone connesse simultaneamente.
    Ovviamente l'inizio è tutta una cosa diversa ma passare da 100 iscritti a 10.000 iscritti potrebbe essere questione di giorni e passare da 10k iscritti a 100k iscritti di settimane, con le relative conseguenze sul numero di persone simultaneamente online. Ovviamente questo pone un limite all'umanità della cosa: montare tutto su un vps attendendo l'arrivo degli utenti potrebbe risultare fatale perchè potrebbbero non esserci le forze di migrare il tutto in server più potenti senza perdere preziosi utenti insoddisfatti del servizio.

    Il prezzo diciamo che non è un problema ma, per praticità e soprattutto all'inizio, diciamo che potremmo attestarci sui 50-100? mensili di spesa, a salire a seconda del numero di utenti iscritti e simultanei.

    Dato che per far girare l'applicazione sarà necessario istanziare 4 macchine (virtuali per noi), non sarà un problema domani spostare tali macchine virtuali su altrettante macchine fisiche, naturalmente al costo di raddoppiare prima e quadruplicare poi i costi di gestione.

    Per ora il traffico è un incognita, ma su un conto di massima con queste cifre (50-100?/mese) non dovrebbe essere un problema rientrare nei limiti di traffico normalmente previsti per queste cifre.

    Quello che vorrei cercare di capire insieme a voi, o quantomeno avere qualche consiglio da voi per riuscire a decidere meglio, solo le seguenti cose:

    • Dato che l'applicazione prevede di essere tradotta in molte lingue, fra le quali il cinese, il server di cui abbiamo bisogno deve essere raggiungibile con tempi di latenza accettabili da qualsiasi parte del mondo. Esiste un provider capace di fornire servizi simili o conviene iniziare a pensare alla replicazione geografica?
    • L'idea di scalabilità "a server" usando le macchine virtuali è praticabile oppure si portano solo via risorse dalle macchine utilizzate?
    • Qualcuno di voi ha esperienza nel domimio Google App Engine? Mi è sembrato che abbiano proposte interessanti ma non riesco a capire se siano o meno confacenti alle esigenze di un progetto dai numeri tendenti all'alto come questi.
    • Una macchina con quattro core, 8 gb di ram, usando MySQL (probabilmente cluster) quante query simultanee è in grado di reggere secondo la vostra esperienza?
    • Se doveste scegliere voi un provider per questo tipo di applicazione, cosa scegliereste ? (in caso di replicazione geografica, anche più di uno ovviamente)
    • Secondo voi quanto potrebbe essere una stima di massima, sia di spesa mensile che di necessità di hardware, per un'applicazione con 1M iscritti e da 1k a 10k di utenti connessi in simultanea durante la giornata?

    So che la problematica è grossa e ovviamente non pretendo risposte puntuali (non avrei preteso niente nemmeno se avessi fatto domande sulla somma o sulla moltiplicazione ovviamente). Mi piacerebbe ragionare con gli iscritti di questo forum su un'ipotesi del genere.

    Grazie a tutti, Ebolo.


  • Moderatore

    Eh certo che hai un bel problema 😄

    Comunque fino alla parte riguardante la Cina ti avrei suggerito senza ombra di dubbio il cloud di Amazon o Rackspace.

    MySql non prenderlo nemmeno in considerazione con quei numeri, ti ritroveresti ad avere il dbms crashato per tutta la giornata. Postgresql è una scelta decisamente più oculata.

    Riguardo la virtualizzazione è un buon modo di rendere flessibile un server ma ovviamente non è la soluzione ai problemi di carico eccessivo.

    Il tuo problema impone minimo l'uso di una cdn in modo da alleggerire il carico almeno per i contenuti statici, poi come backend puoi avere un certo numero di server col dbms installato sopra a formare un cluster.

    In questo modo puoi semplificarti la vita riguardo la Cina. Purtroppo la Cina è un problema non banale perchè le connessioni da e verso questo Paese sono di una lentezza disarmante. O prendi un server in Cina o nada. Potresti considerare Hong Kong ovviamente perchè lì la legge c'è 😄

    Google app engine è molto simile a EC2 di Amazon nè più nè meno e ovviamente in fatto di scalabilità loro ne sanno più di altri. In generale app engine è usato per grossi progetti.


  • User Newbie

    Ciao paolino e grazie per la risposta dettagliata.
    Tanto per ragionare:
    la virtualizzazione serve esattamente per flessibilizzare la cosa mi chiedevo solo se con grossi numeri non ci fosse un consumo di risorse eccessivo da parte del virtualizzatore (anche in rapporto 1 macchina virtuale 1 macchina fisica).
    Anche io avevo pensato ad una suddivisione del carico in base a layer di presentazione e layer applcativo in macchine diverse in modo da suddividere il carico e non gravare sul livello applicativo.
    Riguardo a Google mi sono spiegato male: sono sicuro che sia adatto e che loro sianlo leader nella scalabilità ma quello che mi preoccupa è l'aumento di prezzo all'aumentare del bisogno di risorse. Sarà adeguato?! O per un progetto così alla fine uno rischia di avere dei costi per utente insostenibili?

    Per quanto riguarda la Cina si è proprio quello il casino... non prenderei mai un server in Cina 🙂 Mi informerò su Hong Kong.

    Ebolo.


  • Moderatore

    La virtualizzazione ovviamente implica un overhead e francamente io ne starei lontano. La virtualizzazione vale la pena se hai N macchine e vuoi metterci tanti utenti ognuno con i suoi siti, ecc...

    Migliora la flessibilità ma di certo le performance scendono.

    Google non so che prezzi faccia ma penso che rispetto a prendere N server, mantenerli, ecc... sia comunque meno costoso.