Virtuelle Realität

Rails-Anwendungen skalieren: Erfolgreiches Sharding mit PgDog am Beispiel von Mastodon

Virtuelle Realität
Sharding a Real Rails App

Eine detaillierte Anleitung zur Skalierung von Rails-Anwendungen durch Datenbank-Sharding mit dem Postgres-Proxy PgDog, illustriert anhand des populären Projekts Mastodon. Erfahren Sie, wie Sie Sharding-Schlüssel identifizieren, dry run nutzen und omnisharded Tabellen einbinden, um Ihre Datenbank effizient horizontal zu skalieren.

Viele Entwickler stehen vor der Herausforderung, ihre Rails-Anwendungen performant und skalierbar zu gestalten. Ein verbreiteter Mythos im Internet ist, dass Rails-Anwendungen nicht skalieren. Tatsächlich lässt sich jedoch durch den Einsatz intelligenter Datenbankstrategien wie Sharding eine hohe Skalierbarkeit erreichen. Docker-Container alleine sorgen für horizontale Skalierung auf der Applikationsebene, doch bei Datenbanken ist die Herausforderung eine andere: Wie teilt man die Datenbank effizient auf, um den Datenverkehr auf mehrere Server zu verteilen? Genau an dieser Stelle kommt PgDog ins Spiel. PgDog ist ein Postgres-Proxy, der SQL-Anfragen analysiert und dank automatischer Erkennung der Sharding-Schlüssel entscheidet, an welchen Datenbank-Shard die jeweilige Anfrage weitergeleitet wird.

Die Technologie wurde an einem echten, stark genutzten Beispiel getestet: der Open-Source-Software Mastodon, die Millionen Nutzer bedient und ebenfalls PostgreSQL als Datenbank nutzt. Hierdurch wird nachvollziehbar, wie Sharding in einer praxisnahen Rails-Anwendung funktioniert. Die erste Herausforderung beim Sharding ist die Wahl des sogenannten Sharding-Schlüssels, also einer Spalte in einer Tabelle, anhand derer man die Daten relativ gleichmäßig auf mehrere Datenbanken verteilen kann. Der optimale Sharding-Schlüssel sollte eine zentrale Rolle im Datenmodell spielen, da viele andere Tabellen auf ihn referenzieren müssen, damit die Sharding-Logik effizient umgesetzt werden kann. Im Fall von Mastodon fiel die Wahl auf die Tabelle „accounts“, da diese von ungefähr 75 weiteren Tabellen referenziert wird, was etwa 36 % der Gesamttabellen entspricht.

Betrachtet man auch transitive Fremdschlüsselbeziehungen, so erhöht sich dieser Anteil sogar auf etwa 60 %, was für eine solide Sharding-Grundlage spricht. Eine wichtige Erkenntnis bei der Analyse war, dass nicht alle Tabellen sich für ein Sharding eignen. Einige sogenannte Metadaten-Tabellen, wie „settings“ oder „terms_of_service“, haben keinen Bezug zum Sharding-Schlüssel, werden aber häufig abgefragt. Um diese effizient zu behandeln, hat PgDog das Konzept der „omnisharded“ Tabellen eingeführt. Dabei handelt es sich um Tabellen, die auf allen Shards mit identischer Datenbasis vorliegen.

Anfragen an diese Tabellen werden mittels Round-Robin-Verfahren auf alle Shards verteilt, sodass sich die Last gleichmäßig verteilt, ohne die eigentliche Sharding-Logik zu stören. Bevor das Sharding produktiv eingeführt wird, erleichtert die sogenannte Dry-Run-Funktion von PgDog das Überprüfen der Routing-Entscheidungen. Dabei werden alle Anfragen analysiert und mit einer Hypothese versehen, welchem Shard die Anfrage zugeordnet würde, ohne die Anfragen tatsächlich umzuleiten. Dies ermöglicht es, die Verteilung der Anfragen zu prüfen und potenzielle Engpässe oder Probleme bei der Auswahl des Sharding-Schlüssels zu erkennen. Die aus den Queries generierten Metriken können mittels Prometheus exportiert und mit Tools wie Datadog visualisiert werden, sodass die Erfolgsmessung und -optimierung datenbasiert erfolgen kann.

Ein kritisches Problem beim Sharding mit User-bezogenen Daten ist die richtige Behandlung von Transaktionen, bei denen nicht sofort alle nötigen Sharding-Informationen in der ersten Query enthalten sind. In Mastodon etwa startete eine Transaktion das Einfügen einer Unterhaltung, ohne direkt den Sharding-Schlüssel preiszugeben. Um solche Fälle abzudecken, wurde ein Mechanismus für manuelles Routing eingeführt, bei dem die Sharding-Information explizit per SQL-Befehl SET im Sitzungskontext gespeichert wird. Auf diese Weise kann PgDog wissen, welcher Shard von nachfolgenden Queries innerhalb der Transaktion verwendet werden soll. Für Rails-Anwendungen wurde dieser Mechanismus elegant mit einer Ruby-Gem namens pgdog umgesetzt.

Statt wie üblich ActiveRecord-Transaktionen zu starten, nimmt PgDog durch einen Wrapper die Steuerung über und fügt automatisch den notwendigen SET-Befehl ein. Das vereinfacht die Integration erheblich und minimiert die Gefahr von Fehlkonfigurationen oder fehlenden Sharding-Schlüsseln in Transaktionen. Das Sharding mit PgDog an einem komplexen Projekt wie Mastodon zeigt, wie sich Datenbank-Skalierbarkeit ohne tiefgreifende Änderungen am Anwendungscode ermöglichen lässt. Die sorgfältige Analyse des Schemas und die Nutzung von PostgreSQL-Fremdschlüsseln als Entscheidungsgrundlage für den Sharding-Schlüssel sind dabei essenziell. Metadaten-Tabellen können durch die omnisharded-Strategie effizient eingebunden werden, um Performance-Einbußen zu minimieren.

Während die ersten Resultate einer Live-Simulation noch keinen 100-prozentigen Erfolg brachten, konnten durch die Anpassung und Einbindung omnisharded Tabellen bereits über 50% der Queries horizontal skaliert werden. Ziel ist es, eine sehr hohe Erfolgsrate von etwa 95% zu erreichen, was einer optimalen Verteilung der Datenbanklast entspricht. Mit zusätzlichen Werkzeugen und kommenden Features, wie z. B. einer serverseitigen Lösung zur Primärschlüsselgenerierung und Triggern zum Schutz vor Cross-Shard-Schreiboperationen, ist die vollständige Skalierung sichtbar am Horizont.

Sharding ist eine komplexe, aber sehr lohnende Technik, um Rails-Anwendungen auch bei wachsender Nutzerzahl performant zu halten. Die Arbeit mit PgDog demonstriert, wie ein solcher Umbau praktikabel realisiert werden kann, ohne den gesamten Anwendungscode umschreiben zu müssen. Unternehmen und Entwickler sollten das Potential erkennen und frühzeitig in entsprechende Infrastruktur investieren, um langfristige Skalierbarkeit zu gewährleisten. Noch ist nicht alle Komplexität gelöst: Zwei-Phasen-Commit für garantierte Datenkonsistenz über mehrere Shards hinweg, Automatisierung der notwendigen Codeanpassungen oder die genaue Überwachung der Query-Kosten sind Themen, die in künftigen Erweiterungen behandelt werden. Doch das Grundgerüst steht bereits und zeigt eindrucksvoll, dass Rails-Apps sehr wohl in großen Produktionsumgebungen und bei Millionen Nutzern funktionieren – bei entsprechender Architektur und intelligentem Sharding.

Automatischer Handel mit Krypto-Geldbörsen Kaufen Sie Ihre Kryptowährung zum besten Preis

Als Nächstes
Foaas
Samstag, 24. Mai 2025. FOAAS: Die ultimative RESTful-Lösung für direkte und moderne Kommunikation

FOAAS (Fuck Off As A Service) bietet eine innovative, RESTful-basierte API, die es ermöglicht, auf humorvolle und zugleich zielgerichtete Weise Menschen klar und effektiv die Meinung zu sagen. Entdecken Sie, wie FOAAS funktioniert, für wen es geeignet ist und welche Vorteile es im digitalen Zeitalter bringt.

Study finds that budget cuts to public R&D would significantly hurt the economy
Samstag, 24. Mai 2025. Warum Kürzungen bei öffentlichen Forschungs- und Entwicklungsprogrammen der Wirtschaft schwer schaden würden

Die Auswirkungen von Budgetkürzungen im Bereich öffentlicher Forschungs- und Entwicklungsausgaben auf das Wirtschaftswachstum, Investitionen und staatliche Einnahmen werden analysiert, wobei die langfristigen Folgen für den Wohlstand der Gesellschaft im Mittelpunkt stehen.

Grayscale Launches Bitcoin Adopters ETF $BCOR for Corporations Holding Bitcoin as Treasury Asset
Samstag, 24. Mai 2025. Grayscale startet Bitcoin Adopters ETF $BCOR: Investieren in Unternehmen mit Bitcoin als Treasury Asset

Grayscale hat den Bitcoin Adopters ETF $BCOR eingeführt, der Anlegern die Möglichkeit bietet, in Unternehmen zu investieren, die Bitcoin als Teil ihrer Treasury-Reserven halten. Diese Investmentmöglichkeit richtet sich an diejenigen, die vom wachsenden Einfluss von Bitcoin in der Unternehmenswelt profitieren möchten.

Visa Earnings: Business as Usual
Samstag, 24. Mai 2025. Visa Quartalszahlen 2025: Stabiles Wachstum trotz makroökonomischer Herausforderungen

Visa präsentiert im zweiten Quartal 2025 erneut starke Zahlen mit Umsatzsteigerungen und robustem Transaktionsvolumen, was die Widerstandsfähigkeit des Unternehmens und die Stabilität der Verbraucherausgaben unterstreicht.

Chopped Leaf rolls out Oracle Simphony Cloud POS system
Samstag, 24. Mai 2025. Chopped Leaf modernisiert Gastronomie mit Oracle Simphony Cloud POS System

Chopped Leaf setzt auf das Oracle Simphony Cloud POS System, um seine Betriebsabläufe zu digitalisieren, die Effizienz zu steigern und das Kundenerlebnis zu verbessern. Die Integration moderner Technologien markiert einen wichtigen Schritt in der Expansion des Unternehmens auf dem nordamerikanischen Markt.

Biopharma venture financing declines 20.2% YOY in Q1 2025 amid persistent investor caution
Samstag, 24. Mai 2025. Rückgang der Biopharma-Finanzierung um 20,2 % im ersten Quartal 2025 – Anleger bleiben vorsichtig

Die Biopharma-Branche erlebt im ersten Quartal 2025 einen deutlichen Rückgang bei den Risikokapitalfinanzierungen, da Investoren weiterhin vorsichtig agieren und sich verstärkt auf spätere Entwicklungsphasen fokussieren. Faktoren wie geopolitische Unsicherheiten, Inflation und hohe Zinsen prägen das herausfordernde Finanzierungsumfeld.

Starbucks CEO on stock slide and turnaround: Fixing what's broken will take time
Samstag, 24. Mai 2025. Starbucks CEO Brian Niccol über den Kursrutsch und die nötige Zeit für die Unternehmenswende

Starbucks steht vor großen Herausforderungen, doch CEO Brian Niccol betont, dass die komplette Wende Zeit benötigt. Erfahren Sie mehr über die aktuellen Probleme, Strategien und Zukunftsaussichten des beliebten Kaffee-Giganten aus Sicht des Managements und der Finanzmärkte.