Ik ben bezig met het ontwerpen van een applicatie dat het single point of failure van MySQL weg gaat halen uit een mysql replication setup.
Nou zullen jullie misschien denken: Maar er is toch mysql cluster? Ja daar heb je helemaal gelijk in, maar mysql cluster heeft een groot nadeel, waardoor het ongeschikt is voor de case die ik heb opgesteld. MySQL cluster heeft namelijk als verplichting dat alle databases en indexes in het geheugen geladen moeten worden. Dat gaat via de volgende formule:
(Size of database * NumberofReplicas * 1.1) / Number of storage nodes
Dat is nog niet zo'n groot probleem wanneer je één database van één gigabyte hebt. Wanneer je echter meer dan 300 databases van in het totaal 50 gigabyte hebt, heb je een groot probleem: De hardware kan nog niet zoveel geheugen aan en het kost klauwen met geld.
Het idee is om een Query Director te maken: een loadbalancer voor mysql. De huidige setup van MySQL is altijd een tier 2 setup: applicatie -> database. Ik ben van plan om hier een tier 3 setup van te maken, namelijk: applicatie -> query director -> database. Dit heeft een aantal voordelen:
- Je kan ' mysql clustering ' toepassen zonder je applicatie aan te passen. (belangerijk voor webhosting)
- De query balancer zorgt voor High Availability.
Het is dus de bedoeling dat de klant naar de query director connect in plaats van naar de database. De query director splitst dan de SELECT-queries van de write-queries (UPDATE, INSERT, DELETE). De select queries worden naar de MySQL replication slaves gestuurd en de write queries naar de master. Alle results worden dan via de query director weer terug naar de klant gebracht. Op deze manier kan je mysql replication toepassen zonder dat de gebruiker er ook maar iets van merkt, of zijn applicatie hoeft aan te passen.
Ik heb een document uitgewerkt waar in detail het probleem word beschreven. Dat kan je vinden op: http://funzoneq.livejournal.com/19503.html. Hier staan ook plaatjes bij om de situaties te verduidelijken.
Ik zou graag van jullie feedback ontvangen over de technische aspecten van zo'n applicatie. Mis ik iets? Zien jullie iets in z'n applicatie? Hoe kan je dit het beste aanpakken?
(ps. Dit topic past ook heel goed in professional networking & servers en programming, dus ik was niet helemaal zeker waar ik het moest plaatsen.)
Nou zullen jullie misschien denken: Maar er is toch mysql cluster? Ja daar heb je helemaal gelijk in, maar mysql cluster heeft een groot nadeel, waardoor het ongeschikt is voor de case die ik heb opgesteld. MySQL cluster heeft namelijk als verplichting dat alle databases en indexes in het geheugen geladen moeten worden. Dat gaat via de volgende formule:
(Size of database * NumberofReplicas * 1.1) / Number of storage nodes
Dat is nog niet zo'n groot probleem wanneer je één database van één gigabyte hebt. Wanneer je echter meer dan 300 databases van in het totaal 50 gigabyte hebt, heb je een groot probleem: De hardware kan nog niet zoveel geheugen aan en het kost klauwen met geld.
Het idee is om een Query Director te maken: een loadbalancer voor mysql. De huidige setup van MySQL is altijd een tier 2 setup: applicatie -> database. Ik ben van plan om hier een tier 3 setup van te maken, namelijk: applicatie -> query director -> database. Dit heeft een aantal voordelen:
- Je kan ' mysql clustering ' toepassen zonder je applicatie aan te passen. (belangerijk voor webhosting)
- De query balancer zorgt voor High Availability.
Het is dus de bedoeling dat de klant naar de query director connect in plaats van naar de database. De query director splitst dan de SELECT-queries van de write-queries (UPDATE, INSERT, DELETE). De select queries worden naar de MySQL replication slaves gestuurd en de write queries naar de master. Alle results worden dan via de query director weer terug naar de klant gebracht. Op deze manier kan je mysql replication toepassen zonder dat de gebruiker er ook maar iets van merkt, of zijn applicatie hoeft aan te passen.
Ik heb een document uitgewerkt waar in detail het probleem word beschreven. Dat kan je vinden op: http://funzoneq.livejournal.com/19503.html. Hier staan ook plaatjes bij om de situaties te verduidelijken.
Ik zou graag van jullie feedback ontvangen over de technische aspecten van zo'n applicatie. Mis ik iets? Zien jullie iets in z'n applicatie? Hoe kan je dit het beste aanpakken?
(ps. Dit topic past ook heel goed in professional networking & servers en programming, dus ik was niet helemaal zeker waar ik het moest plaatsen.)
Bla