0Pricing
System Design Basics for Backend Developers · Lektion

Einen URL-Shortener entwerfen

Gehen Sie den Systementwurf eines Dienstes zur URL-Verkürzung durch und berücksichtigen Sie dabei Skalierbarkeit, Speicherung und Verfügbarkeit.

Einen URL-Shortener entwerfen ist eine kostenlose System Design Basics for Backend Developers-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des System Design Basics for Backend Developers-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der System Design Basics for Backend Developers-Kurs umfasst insgesamt 4 Lektionen.

Intro to URL Shorteners

Willkommen! In dieser Lektion entwerfen wir einen URL-Verkürzer-Dienst, ähnlich wie Bitly oder TinyURL. Diese Dienste nehmen eine lange, komplexe URL und wandeln sie in eine viel kürzere, handlichere um.

URL-Verkürzer sind unglaublich nützlich, um Links in sozialen Medien, E-Mails oder überall dort zu teilen, wo der Platz begrenzt ist. Oft bieten sie auch Analysen an, um zu verfolgen, wie oft ein verkürzter Link angeklickt wird.

Core Functionality: Shorten & Redirect

Ein URL-Kürzer erfüllt in erster Linie zwei Hauptfunktionen:

  • Kürzen: Nimmt eine lange URL als Eingabe entgegen und generiert einen eindeutigen, kurzen Code. Dieser Code wird dann verwendet, um die kurze URL zu erstellen.
  • Weiterleiten: Wenn ein Benutzer auf eine kurze URL zugreift, sucht der Dienst nach der entsprechenden langen URL und leitet den Browser des Benutzers dorthin weiter.

Diese beiden Operationen bilden das Rückgrat des gesamten Systems.

Generating Unique Short Codes

Das Herzstück eines URL-Shorteners ist seine Fähigkeit, einzigartige, kurze und oft menschenlesbare Codes zu generieren. Gängige Ansätze sind:

  • Sequenzielle IDs + Base62-Codierung: Verwenden Sie eine automatisch inkrementierende Datenbank-ID und wandeln Sie diese in einen Base62-String um. Base62 verwendet 0-9, a-z, A-Z (62 Zeichen) und ermöglicht so kürzere Codes als Base10.
  • Hash-Funktionen: Wenden Sie eine Hash-Funktion (wie MD5 oder SHA256) auf die lange URL an. Nehmen Sie einen Teil des Hashes, um den kurzen Code zu bilden. Dies erfordert eine Kollisionsbehandlung.
  • Generierung zufälliger Zeichenfolgen: Generieren Sie eine zufällige Zeichenfolge mit fester Länge. Auch dies erfordert eine Überprüfung auf Eindeutigkeit, um Kollisionen zu vermeiden.

Base62 Encoding Example

Schauen wir uns ein einfaches Python-Beispiel für die Base62-Codierung an, die eine beliebige Methode zur Generierung kurzer Codes aus sequenziellen IDs ist. Dies trägt dazu bei, die Eindeutigkeit sicherzustellen und gleichzeitig die Codes kompakt zu halten.

BASE62_CHARS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"

def encode_base62(num):
    if num == 0:
        return BASE62_CHARS[0]
    
    result = []
    while num > 0:
        result.append(BASE62_CHARS[num % 62])
        num //= 62
    return "".join(reversed(result))

# Example usage:
if __name__ == "__main__":
    test_id = 12345
    short_code = encode_base62(test_id)
    print(f"ID: {test_id} -> Short Code: {short_code}")

    test_id_large = 9876543210
    short_code_large = encode_base62(test_id_large)
    print(f"ID: {test_id_large} -> Short Code: {short_code_large}")

Database Schema for URLs

Um unsere URL-Zuordnungen zu speichern, benötigen wir eine Datenbank. Ein einfaches Schema könnte wie folgt aussehen (unter Verwendung einer relationalen Datenbank wie PostgreSQL):

  • id: Primärschlüssel (automatisch inkrementierende Ganzzahl)
  • short_code: VARCHAR(10) – Die eindeutige kurze Zeichenkette
  • long_url: TEXT – Die ursprüngliche, lange URL
  • created_at: TIMESTAMP – Wann die kurze URL erstellt wurde
  • user_id: INT (optional) – Falls Benutzer Konten erstellen können
  • click_count: INT (optional) – Für einfache Analysen

Eine NoSQL-Datenbank würde ebenfalls funktionieren und bietet Flexibilität bei der Schema-Entwicklung.

The Redirection Service

Wenn ein Benutzer auf eine kurze URL klickt (z. B. https://tiny.url/abcde), übernimmt der Weiterleitungsdienst. Er führt die folgenden Schritte aus:

  1. Extrahiert den short_code (z. B. abcde) aus der URL.
  2. Fragt die Datenbank ab, um die entsprechende long_url zu finden.
  3. Sendet eine HTTP 301- (Permanent verschoben) oder 302-Weiterleitungsantwort (Gefunden) an den Browser des Benutzers, die auf die long_url verweist.

301 vs. 302: 301 ist für permanente Weiterleitungen und wird von Browsern zwischengespeichert, 302 ist temporär. Bei URL-Kürzern wird 301 nach der Erstellung oft wegen der Leistung bevorzugt.

Handling Collisions & Uniqueness

Es ist von entscheidender Bedeutung, sicherzustellen, dass jeder generierte Kurzcode einzigartig ist. Wenn wir Hash-Funktionen oder Zufallsstrings verwenden, sind Kollisionen (zwei verschiedene lange URLs erhalten denselben Kurzcode) möglich, wenn auch bei längeren Codes selten.

Strategien zum Umgang mit Kollisionen:

  • Datenbankprüfung: Versuchen Sie immer, die neue Zuordnung einzufügen, und fangen Sie eine Verletzung der Eindeutigkeitsbeschränkung (Unique Constraint) ab. Wenn eine Kollision auftritt, generieren Sie den Code neu und versuchen Sie es erneut.
  • Vorabprüfung: Fragen Sie vor dem Einfügen die Datenbank ab, um zu prüfen, ob der Code bereits existiert. Dies kann bei hoher Parallelität zu Race Conditions führen, weshalb Eindeutigkeitsbeschränkungen auf Datenbankebene bevorzugt werden.
  • Verteilte ID-Generierung: Verwenden Sie für sequentielle IDs einen verteilten ID-Generator (z. B. Snowflake ID), um global eindeutige IDs sicherzustellen, die dann Base62-kodiert werden können.

Scalability Considerations

Ein beliebter URL-Dienst muss Millionen von Anfragen verarbeiten. Wichtige Skalierbarkeitspunkte:

  • Datenbank: Die Datenbank wird ein Engpass sein. Erwägen Sie die Sharding-Technik für die Datenbank nach short_code oder die Verwendung eines verteilten Key-Value-Speichers. Lesereplikate sind für den Weiterleitungsdienst unerlässlich.
  • Caching: Zwischenspeicherung häufig abgerufener Zuordnungen von kurzen zu langen URLs (z. B. mit Redis oder Memcached), um die Datenbanklast zu reduzieren, insbesondere für den Weiterleitungspfad.
  • Asynchrone Verarbeitung: Anstatt einen Zähler synchron zu inkrementieren, senden Sie Klickereignisse für die Klickanalytik zur asynchronen Verarbeitung an eine Nachrichtenwarteschlange.
  • Load Balancer: Verteilen Sie eingehenden Datenverkehr auf mehrere Instanzen Ihrer Verkürzungs- und Weiterleitungsdienste.

Basic Click Analytics

Über das reine Kürzen hinaus bieten viele Dienste einfache Analysen an. Um Klicks zu verfolgen:

  • Wenn eine kurze URL aufgerufen wird, erhöhen Sie einen click_count in der Datenbank für diese spezifische Zuordnung.
  • Bei hohem Datenverkehr kann diese Zähleraktualisierung zu einem Engpass werden. Ein skalierbarerer Ansatz besteht darin, eine Nachricht an eine Warteschlange (z. B. Kafka, RabbitMQ) zu senden und einen separaten Worker-Prozess die Zählungen asynchronous aktualisieren oder detaillierte Klick-Protokolle speichern zu lassen.
  • Detaillierte Analysen können das Speichern von Referrer, User Agent, IP-Adresse usw. in einer separaten Analysedatenbank (z. B. einem Data Warehouse) beinhalten.

URL Shortener Challenge

Welcher ist der kritischste HTTP-Antwortcode, der bei der Gestaltung des Weiterleitungsdienstes für einen URL-Verkürzer an den Browser des Benutzers gesendet werden muss, und warum?

Recap: URL Shortener Design

Wir haben die Kernkomponenten beim Entwurf eines URL-Shorteners durchgegangen!

  • Wir haben die beiden Hauptfunktionen behandelt: das Kürzen und die Weiterleitung.
  • Methoden zum Generieren einzigartiger Kurzcodes, wie die Base62-Kodierung, wurden untersucht.
  • Wir haben das Datenbankschema zum Speichern von Zuordnungen und die Mechanik des Weiterleitungsdienstes besprochen.
  • Wichtige Aspekte wie Kollisionsbehandlung, Skalierbarkeit durch Caching und Sharding sowie grundlegende Klick-Analysen wurden angesprochen.

Diese Fallstudie veranschaulicht, wie verschiedene Systemdesign-Prinzipien zusammenkommen, um einen funktionalen und skalierbaren Dienst aufzubauen.

Häufig gestellte Fragen

Ist die Lektion „Einen URL-Shortener entwerfen“ kostenlos?

Ja — der vollständige Text von „Einen URL-Shortener entwerfen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des System Design Basics for Backend Developers-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der System Design Basics for Backend Developers-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Einen URL-Shortener entwerfen“?

Gehen Sie den Systementwurf eines Dienstes zur URL-Verkürzung durch und berücksichtigen Sie dabei Skalierbarkeit, Speicherung und Verfügbarkeit. Du übst System Design Basics for Backend Developers mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um System Design Basics for Backend Developers zu starten?

Keine Vorkenntnisse erforderlich. System Design Basics for Backend Developers auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „Einen URL-Shortener entwerfen“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser System Design Basics for Backend Developers-Lektion Code schreiben und ausführen?

Ja. Jede System Design Basics for Backend Developers-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Einen URL-Shortener entwerfen
  2. Einen Social-Media-Feed erstellen
  3. Eine E-Commerce-Plattform skalieren
  4. Ein Echtzeit-Chat-System entwerfen
← Zurück zu System Design Basics for Backend Developers