2009-04-24 16 views
24

Ho un'app Web con LAMP. Recentemente abbiamo aumentato il carico e ora stiamo esaminando soluzioni su scala. Scalare l'apache è piuttosto facile, stiamo per avere più macchine multiple che lo ospitano e round robin il traffico in entrata.Come scalare MySQL con più macchine?

Tuttavia, ogni istanza di apache parlerà con MySQL e alla fine MySQL sarà sovraccaricato. Come scalare MySQL su più macchine in questa configurazione? Ho già visto this ma in particolare abbiamo bisogno degli aggiornamenti dal DB disponibili immediatamente, quindi non penso che la replica sia una buona strategia qui? Speriamo anche che questo possa essere fatto con un minimo cambiamento di codice.

PS. Abbiamo un rapporto lettura/scrittura 1: 1.

risposta

21

Esistono solo due strategie: replica e condivisione. La replica viene spesso in essere quando si ha meno traffico in scrittura e molto letto, quindi è possibile reindirizzare le letture a molti slave, con il trabocchetto di un sacco di traffico di replica con il tempo e una probabilità di inconsistenza.

Con il sharding si suddividono le tabelle del database su più macchine (chiamate sharding funzionali), il che rende molto più difficili i join. Se questo non si adatta più devi dividere le tue righe su più macchine, ma non è divertente e dipende da un livello di sharding implementato tra l'applicazione e il database.

I database orientati ai documenti o gli archivi di colonne funzionano correttamente, ma sono attualmente ottimizzati per OLAP non per OLTP.

5

Potresti non pensare che la replica non sia la strategia ottimale, ma dai un'occhiata a questo link che fornisce un consiglio abbastanza semplice e diretto per l'utilizzo della replica per bilanciare il carico su più macchine.

+0

Il collegamento è interrotto. – sunnyrjuneja

+0

Aggiorna il link –

+1

link non funzionante .. – tesmojones

0

A seconda del back-end dell'applicazione (vale a dire come vengono gestiti i PK, le transazioni e gli ID degli inserimenti), è possibile considerare la replica MASTER-MASTER con diverse impostazioni auto_increment. Questo può essere complicato e deve essere testato a fondo, ma può funzionare.

Inoltre, nel nuovo MySQL 5.6 è presente un GTID (Global Transaction Identifier) ​​che generalmente aiuta molto a mantenere la replica sincronizzata, specialmente in questo scenario.

0

Bene ... buona fortuna scalare tutte quelle scritture su una scala reale. Il motore di database diventa il collo di bottiglia, troppe serrature e buffer mgmt e roba ...

L'unico modo in cui ho trovato che funziona davvero è ridimensionare, sharding, purtroppo sharding non è fornito per MySQL "out of the box" (come in alcuni NoSQL come Mongo). ScaleBase (dichiarazione di non responsabilità: io lavoro lì) è un produttore di una soluzione di scale-out completa e una "macchina di sharding automatica", se lo desideri. ScaleBae analizza i dati e il flusso SQL, divide i dati tra i nodi DB, instrada i comandi e aggrega i risultati in runtime, quindi non dovrai farlo!

Problemi correlati