De tool heet Online Schema Change voor MySQL, ofwel OSC. Het kan database indexen op live servers updaten. In het verleden had Facebook meer dan zes maanden nodig om de updates uit te rollen op de grote aantallen servers die het bedrijf heeft staan. Dat zegt Facebook’s MySQL-expert Mark Callaghan.

“Deze tool zorgt ervoor dat de veranderingen veel sneller uitgerold kunnen worden”, laat hij weten aan de Britse IT-site The Register. “Het voordeel is verder dat database queries ook veel sneller uitgevoerd kunnen worden.”

Prestatiekrikken

Facebook maakt primair gebruikt van MySQL voor gebruikersdata en InnoDB wordt gebruikt voor de opslag engine. “De workload van Facebook behelst een hoop kleine transacties”, legt Callaghan uit. “Voor die workload is MySQL in combinatie met InnoDB erg geschikt.“

Toch is het bedrijf altijd op zoek naar manieren om de prestaties te verbeteren. Dat doet het onder andere door het creëren of updaten van nieuwe indexen, waardoor de query responsetijd verbeterd wordt. Het uitrollen van dat soort updates is mogelijk door ze eerst op een testserver te zetten en als dat gebeurd is, kan de live workload naar die extra server verplaatst worden.

Het probleem is daarbij alleen dat Facebook een sociale netwerksite is die 500 miljoen gebruikers telt. “We hebben een gigantisch aantal servers staan,” zegt Callaghan. “En daarom hebben we het niet zo op extra servers.”

De tool van Noach

Het precieze aantal servers wil Callaghan niet vertellen, maar het getal is in elk geval zo groot dat Facebook een manier nodig had om indexen te wijzigen op live machines. Het bedrijf is daarom gaan kijken naar bestaande tools om dat te doen.

Men kwam een tool genaamd oak-online-alter-table tegen van ontwikkelaar Shlomi Noach en gebruikte het als de basis voor de ontwikkeling van een tool die meer bij Facebook paste. “We doen veel in PHP en dat werkt niet met de tool van Noach.”

Een factor 365 sneller

Facebook’s ontwikkelaar Vamsi Ponnekanti heeft daarop Open Schema Change geschreven. Die tool kan indexen updaten zonder downtime. “Voorheen konden we snel een paar machines updaten, maar het duurde zes maanden om alle machines zo ver te krijgen. En dat konden we alleen doen op tijdstippen met een relatief lage workload. Nu kunnen we het op zo ongeveer alle machines tegelijk doen en duurt het maar een halve dag.”

Gemiste wijzigingen

Het was vooral moeilijk om voor elkaar te krijgen dat de gemiste veranderingen toegepast werden als het kopiëren eenmaal gestart was. “Dat hebben we opgelost met database triggers”, aldus Callaghan.

“Wanneer het kopiëren bijna klaar is, herhalen we alle veranderingen die gelogd zijn door de triggers. Vervolgens blokkeren we gedurende een fractie van een seconde de toegang naar de tabel en vervangen we de originele tabel met de kopie, inclusief de wijzigingen.”

Open source code

De tool is nu ongeveer vier weken in bedrijf en wordt gebruikt om wijzigingen door te voeren die al een jaar in de planning staan. De OSC-tool is nu open source onder een BSD-licentie en de code is hier te vinden.