Jak Reddit migroval svou funkcionalitu komentářů z Pythonu do Go
Publikováno: 12.12.2025
Reddit je jedna z největších online platforem pro diskuse a komunitní obsah, kde každý den vznikají miliony příspěvků a komentářů. Správa tak obrovského množství dat je náročná a vyžaduje robustní infrastrukturu. Aby Reddit zlepšil výkon, škálovatelnost a udržitelnost svého backendu, rozhodl se migrovat klíčové části své služby, konkrétně modely komentářů, z Pythonu do Go. Tento krok nebyl jen o změně jazyka, šlo o přeměnu kritické části infrastruktury bez narušení zkušenosti milionů uživatelů.
Proč Go?
Python je skvělý pro rychlý vývoj a prototypování, ale při masivním provozu se ukazuje jako omezený. Reddit potřeboval jazyk, který lépe zvládá paralelní zpracování, efektivně využívá systémové zdroje a nabízí vyšší výkon při zápisu a čtení dat. Go se díky své jednoduchosti, vysokému výkonu a přirozené podpoře konkurence stal ideální volbou pro microservices architekturu, kterou Reddit chtěl implementovat.
Rozdělení migrace na čtení a zápis
Migrace byla rozdělena do dvou hlavních oblastí: čtení dat a zápis dat. Tato separace minimalizovala rizika výpadků.
Migrace čtení komentářů
Čtení bylo první fáze migrace, protože je méně riziková než zápis. Reddit nasadil novou Go službu paralelně s původní Pythonovou. Příchozí požadavky byly stále obsluhovány Pythonem, zatímco Go služba generovala vlastní odpovědi, které se automaticky porovnávaly s výsledky Pythonu. Tento přístup umožnil týmům:
- Detekovat nesrovnalosti v reálném čase.
- Validovat nové implementace bez ovlivnění koncových uživatelů.
- Optimalizovat Go službu postupně, na základě skutečného provozu.
Migrace zápisu komentářů
Zápis dat představoval výrazně větší výzvu. Komentáře se ukládají do několika vrstev současně – Postgres, Memcached a Redis – což zajišťuje rychlý přístup a vysokou dostupnost. Reddit proto zavedl koncept „sesterských databází“, kam Go služba zapisovala paralelně, zatímco produkční data zůstala nedotčena.
Dále Reddit využil CDC eventy (Change Data Capture) ke sledování změn a zajištění, že všechny služby, jak nové, tak stávající, zpracovávají data konzistentně. Tento mechanismus umožnil:
- Detekovat chyby v zápisu v reálném čase.
- Ověřit, že Go služba zapisuje přesně stejné informace jako Python.
- Umožnit postupné přesouvání provozu z Pythonu na Go.

Technické výzvy a řešení
Migrace odhalila několik jazykových a architektonických problémů:
- Serializace dat – Python a Go používají odlišné formáty a knihovny pro serializaci, což mohlo vést k nesrovnalostem při porovnávání výsledků.
- Race conditions – paralelní zápisy a čtení komentářů mohly způsobovat falešné chyby při porovnávání dat, které tým musel řešit sofistikovanou logikou synchronizace.
- Výkon databázových dotazů – dotazy optimalizované pro Python ORM nemusely být efektivní v Go, takže bylo nutné upravit logiku a indexy.
- Monitoring a observabilita – sledování výkonu nové služby a porovnávání s Pythonem vyžadovalo robustní metriky a testovací nástroje.
Klíčové lekce
Redditova migrace komentářů ukazuje, že přechod kritických systémů mezi jazyky a architekturami není jen otázkou přepsání kódu. Klíčovými poznatky jsou:
- Postupná migrace s paralelním provozem – minimalizuje riziko výpadků a umožňuje testování na živých datech.
- Izolace a kontrola dat – sesterské databáze a CDC eventy zajišťují konzistenci a detekci chyb.
- Robustní testování a monitoring – porovnávání výsledků nové a staré služby odhaluje reálné problémy, které by v izolovaném testu nevypluly na povrch.
- Porozumění jazykovým odlišnostem – Go a Python mají odlišné chování v oblasti serializace, konkurence a správy paměti.
- Flexibilní řešení problémů – od race conditions po optimalizaci databázových dotazů, migrace vyžaduje přizpůsobivý přístup.
Závěr
Zkušenost Redditu je ukázkou, jak složité je modernizovat kritickou infrastrukturu velké platformy. Díky postupnému nasazení, paralelnímu provozu a pečlivému testování dokázal tým migrovat jednu z nejzátěžovějších funkcionalit (komentáře) do Go, aniž by ohrozil miliony uživatelů. Tento případ je inspirací pro všechny firmy, které plánují přechod mezi jazyky nebo architekturami: pečlivé plánování, validace a kontrola dat jsou klíčem k úspěchu.
Pokud vás zajímá více: https://www.reddit.com/r/RedditEng/comments/1mbqto6/modernizing_reddits_comment_backend_infrastructure/