URL Kısaltıcı Sistem Tasarımı: Bağlantı Kısaltıcıları Arka Planda Nasıl Çalışır
"Bir URL kısaltıcısı tasarla" en popüler sistem tasarımı mülakat sorularından biridir — ve haklı bir nedenle. Hashing, veritabanları, önbellekleme, yük dengeleme ve dağıtık sistemlere dokunur, hepsi aldatıcı şekilde basit bir üründe.
Bu kılavuzda, URL kısaltıcılarının gerçekten nasıl çalıştığını, temel tasarım kararlarını ve ölçekte ilgili değişimleri inceleyeceğiz.
Temel Akış
Bir URL kısaltıcısı iki şey yapar:
- 1Kısalt: Uzun bir URL alın ve kısa bir kod oluşturun
- 2Yönlendir: Birisi kısa URL'yi ziyaret ettiğinde, onları orijinale yönlendirin
İşte yüksek seviyeli akış:
Kullanıcı kısa bağlantı oluşturur:
Uzun URL → Kısa kod oluştur → Eşlemeyi depola → Kısa URL döndür
Kullanıcı kısa bağlantıyı tıklar:
Kısa URL → Kodu ara → Uzun URL bul → 301 Yönlendir
Kısa Kodlar Oluşturma
Temel zorluk, benzersiz, kısa kodlar oluşturmaktır. Birkaç yaklaşım vardır:
Yaklaşım 1: Base62 Kodlaması
Otomatik artan bir kimliği [a-zA-Z0-9] karakterlerini kullanarak Base62 dizesine dönüştürün:
- ID
1→1 - ID
62→10 - ID
238,328→ZZZ
7 karakterli bir Base62 kodu 62^7 = 3,5 trilyon benzersiz URL'yi destekler.
Avantajlar: Basit, öngörülebilir uzunluk, çarpışma yok Dezavantajlar: Sıralı kimlikler tahmin edilebilir (kullanıcılar diğer kısa URL'leri tahmin edebilir)
Yaklaşım 2: Hashing
Uzun URL'ye bir hash işlevi (MD5, SHA-256) uygulayın ve ilk N karakteri alın:
SHA256("https://example.com/very/long/url") → "a3f2b8c1..." Kısa kod: "a3f2b8c"
Avantajlar: Aynı giriş her zaman aynı çıktıyı üretir (tekilleştirme) Dezavantajlar: Hash çarpışmaları işlenmeyi gerektirir; sabit hash uzunluğu alan harcayabilir
Yaklaşım 3: Rastgele Oluşturma
Rastgele bir alfasayısal dize oluşturun ve benzersizliği kontrol edin:
Avantajlar: Basit, tahmin edilemeyen Dezavantajlar: Her oluşturmada çarpışma kontrolü gerektirir; veritabanı dolduğunca yavaşlar
Hangi Yaklaşımı Kullanmalı?
Çoğu üretim sistemi, dağıtılmış bir kimlik oluşturucuyla Base62 kodlaması kullanır. Basit, çarpışmasız ve performanslıdır. Linkly'de benzer bir yaklaşım kullanıyoruz — daha az teknik bir genel bakış için URL kısaltıcılarının nasıl çalıştığını okuyabilirsiniz.
Veritabanı Tasarımı
Temel tablo basittir:
urls ├── id (birincil anahtar, otomatik artan) ├── short_code (benzersiz dizin) ├── long_url (hedef) ├── created_at (zaman damgası) ├── user_id (onu kimler oluşturdu) └── click_count (denormalize sayaç)
SQL vs. NoSQL
SQL (PostgreSQL, MySQL): ACID uyumluluk, güçlü tutarlılık, orta ölçekte iyi. Çoğu URL kısaltıcısı burada başlar.
NoSQL (DynamoDB, Cassandra): Milyarlarca URL için daha iyi yatay ölçekleme. Sonuç tutarlılığı bu kullanım durumu için kabul edilebilir.
Hibrit: SQL URL eşlemeleri için (yönlendirmeler için güçlü tutarlılık gerekli), NoSQL veya zaman serisi veritabanı tıklama analitikleri için (yüksek yazma hacmi, sonuç tutarlılığı iyidir).
Yönlendirmeleri İşleme
Bir kullanıcı kısa bir bağlantıyı tıkladığında, sistem şunları yapmalıdır:
- 1URL'den kısa kodu ayrıştırın
- 2Karşılık gelen uzun URL'yi arayın
- 3HTTP yönlendirme yanıtı döndürün
301 vs. 302 Yönlendirmeler
- 301 (Kalıcı): Tarayıcı yönlendirmeyi önbelleğe alır. Daha az sunucu isteği, ancak tekrar tıklamalar hakkında görünürlük kaybedersiniz.
- 302 (Geçici): Tarayıcı her seferinde sunucuyla kontrol eder. Daha fazla istek, ancak daha iyi tıklama izleme.
Çoğu URL kısaltıcısı tıklama izleme doğruluğu için 302 yönlendirmelerini kullanır, ardından SEO kullanım durumları için 301'i seçenek olarak sunar. Bu ayrım hakkında daha fazla bilgi için 301 yönlendirmeler kılavuzumuza bakın.
Önbellekleme
Yönlendirmeler hızlı olması gerekir — gecikmenin her milisaniyesi kullanıcı deneyimini etkiler. Önbellekleme kritiktir:
Bellek İçi Önbellek (Redis/Memcached)
short_code → long_url eşlemesini bellekte önbelleğe alın:
GET /abc123 → "abc123" için Redis'i kontrol et → Önbellek isabet? Hemen yönlendir döndür → Önbellek kaçırma? Veritabanını sorgula, sonucu önbelleğe al, yönlendir döndür
Küçük bir Redis örneği milyonlarca URL eşlemesini önbelleğe alabilir. Çoğu trafik nispeten az sayıda popüler bağlantıya gittiğinden, %90'ın üzerinde önbellek isabet oranları yaygındır.
CDN Önbellekleme
301 yönlendirmeler için, CDN kenar düğümleri yönlendirme yanıtını önbelleğe alabilir, bunu kaynak sunucunuzu hiç ulaştırmadan kullanıcıya en yakın konumdan sunabilir.
Analitik ve Tıklama İzleme
Tıklama verilerini kaydetmek, yönlendirmeyi yavaşlatmaması gereken yazma ağır bir işlemdir:
Asenkron İşleme
- 1Kullanıcı kısa bağlantıyı tıklar
- 2Sistem hemen yönlendirmeyi döndürür
- 3Tıklama olayı bir ileti kuyruğuna gönderilir (Kafka, RabbitMQ, SQS)
- 4Arka plan işçi olayı işler: kullanıcı aracısını ayrıştırır, IP'yi coğrafi konumlandırır, analitikleri depolar
Bu, hızlı yönlendirme yolunu daha yavaş analitik boru hattından ayırır.
Yakalanacak Veriler
- Zaman damgası
- IP adresi (coğrafi konum için)
- Kullanıcı aracısı (cihaz/tarayıcı tespiti için)
- Yönlendirici başlığı
- Ülke, şehir (IP coğrafi konumlandırmadan)
Ölçekleme Değerlendirmeleri
Okuma Ağır İş Yükü
URL kısaltıcıları son derece okumalıdır. Tipik bir oran 100:1 okuma yazma olabilir. Bu şu anlama gelir:
- Yönlendirme yolunu her şeyden önce optimize edin
- Önbelleklemeyi agresif bir şekilde kullanın
- Veritabanı okuma kopyaları
Dağıtılmış Kimlik Oluşturma
Birden fazla sunucu üzerinde otomatik artan kimlikler kullanıyorsanız, çarpışmaları önlemeniz gerekir. Seçenekler:
- Snowflake Kimliği: Twitter'ın yaklaşımı — zaman damgası, makine kimliği ve sıra numarası gömün
- UUID: Evrensel olarak benzersiz ama daha uzun
- Kimlik aralıkları: Her sunucuya ayırmak için bir kimlik aralığı atayın
Coğrafi Dağıtım
Yönlendirme sunucularını birden fazla bölgede dağıtın. Tokyo'daki bir kullanıcı, Virginia'daki bir sunucuya yönlendirme için gidiş dönüş yapmamalıdır.
Güvenlik Değerlendirmeleri
URL kısaltıcıları kimlik avı ve kötü amaçlı yazılım dağıtımı için kötüye kullanılabilir. Üretim sistemleri şunları gerektirir:
- URL taraması — hedefleri kötü amaçlı yazılım ve kimlik avı veritabanlarına karşı kontrol edin
- Hız sınırlaması — kötü amaçlı kısa bağlantıların toplu oluşturulmasını önleyin
- İhlal bildirimi — kullanıcıların şüpheli bağlantıları bildirmesine izin verin
- Önizleme sayfaları — isteğe bağlı olarak kullanıcılara yönlendirmeden önce bir bağlantının nereye gittiğini gösterin
Bağlantı güvenliği ve tıklama dolandırıcılık koruması hakkında daha fazla bilgi edinin.
Ek Özellikler
Temel kısaltma ve yönlendirmenin ötesinde, üretim URL kısaltıcıları şunları ekler:
- Özel etki alanları — kendi etki alanınızı kullanarak markalı kısa bağlantılar
- Özel karmakarışık kodlar — rastgele karakterler yerine kendi kısa kodunuzu seçin
- Son kullanma tarihi — zaman sınırlı bağlantılar bir tarihten sonra çalışmayı durdurur
- Parola koruması — hedefe erişmek için parola gerekli kılın
- A/B testi — birden fazla hedef arasında döndür
- Coğrafi hedefleme — ülkeye göre yönlendir
- Cihaz hedefleme — mobil vs. masaüstü için farklı hedefler
- QR kodları — herhangi bir kısa bağlantı için taranabilir kodlar oluşturun
Sonuç
URL kısaltıcı sistem tasarımı harika bir alıştırmadır çünkü basit başlar ancak karmaşıklığın katmanlarını ortaya çıkarır: kod oluşturma, veritabanı tasarımı, önbellekleme, analitik boru hatları ve kötüye kullanımı önleme. Bu temelleri anlamak, mülakat hazırlığında olsanız da kendi araçlarınızı oluşturuyor olsanız da yardımcı olur.
Bir tane oluşturmadan üretim URL kısaltıcısı kullanmak ister misiniz? Linkly ile başlayın — yukarıda açıklanan tüm mimari, özel etki alanları, analitik ve gelişmiş özellikleri içeren ve kullanıma hazır.
100 kısa bağlantı edinin ve aylık 500 tıklamayı ücretsiz olarak takip edin.