Co to jest shardowanie? Jak poshardować dużą bazę danych? Jakich technologii warto użyć? Na jakie problemy można natknąć się w trakcie procesu? Na te i inne pytania, opierając się na doświadczeniach serwisu Allegro, odpowiedział przedstawiciel Grupy Allegro podczas konferencji PHPcon, która odbyła się w dniach 28-30 września w Mąchocicach k. Kielc.

Wiele popularnych serwisów internetowych w pewnym momencie rozwoju natrafia na problem z wydajnością bazy danych. Zbyt duży przyrost ruchu oraz ilości danych może poważnie przyhamować bieżące działania i rozwój strony. Także serwis Allegro natknął się na podobny problem. Tym razem, zamiast pionowego skalowania baz danych – czyli rozbudowy infrastruktury serwerowej, zdecydowano się na skalowanie poziome – shardowanie.

Shardowanie to rozkład bazy danych na mniejsze jednostki (shardy), które niezależnie od siebie obsługują żądania. Dzięki temu zwiększa się przepustowość aplikacji, gdyż jej fragmenty mogą pracować równolegle i niezależnie od siebie. Logicznie niezależne od siebie serwery baz danych nie wymagają wzajemnej blokady danych, aby spójnie działać. Tym samym dopuszczają wiele jednoczesnych zapytań użytkownika w klastrze jako całości.

Aby wyprzedzić bieg wydarzeń i przygotować się do okresu zwiększonego ruchu, serwis Allegro rozpoczął w połowie 2009 roku proces shardowania głównej bazy danych. Celem było uzyskanie skalowalnych baz i zapewnienie bezpieczeństwa oraz stabilności portalu. „Największym wyzwaniem była skala przedsięwzięcia. Projekt trwał ponad rok i wymagał dużych zasobów: ludzi, energii , czasu” – mówi Krzysiek Szłapiński, developer Aplikacji Allegro. „Przede wszystkim musieliśmy przepisać całą warstwę dostępu do bazy danych – łącznie około 2000 plików. Ogłosiliśmy nawet konkurs – osoba, która przepisała najwięcej plików, otrzymała tytuł Ninja Coder” – dodaje.

Na potrzeby projektu powstało wiele dodatkowych narzędzi, m.in. Prophet oraz Merger. Prophet to wydajna i stabilna baza klucz-wartość służąca do przechowywania mapowań identyfikator oferty/użytkownika na numer shard’u. Przetrzymuje ona informacje o wszystkich użytkownikach i przedmiotach, również tych archiwalnych. Merger to moduł php do łączenia wyników zapytań wieloshardowych w jeden spójny wynik.

Zdecydowanie warto było podjąć się takiego wyzwania – teraz działamy na stabilniejszych i wydajniejszych bazach. Trzeba jednak pamiętać, że jest to bardzo ryzykowne przedsięwzięcie – działania prowadzone są na żywym organizmie: w każdej chwili jakiś element może zawieść, a cały projekt jest niezwykle pracochłonny” – podsumował Krzysiek Szłapiński swoje wystąpienia na PHPcon.

źródło: Grupa Allegro

Kan