X, kullanıcıların 280 karakterlik mesajlar (tweet) gönderdiği ve bu mesajların gerçek zamanlı dağıtımını sağlayan bir mikroblog hizmetidir. Platform, dağıtık veri depolama, mesaj kuyruğu ve API katmanlarıyla ölçeklenebilirlik sağlar. Kullanıcı akışı, takipçi grafiği ve algoritmik sıralama nasıl birleştirilir? Bu mimarinin temel bileşenleri nelerdir ve hangi teknolojiler kullanılıyor?
X (eski adıyla Twitter) platformu teknik olarak nasıl çalışır?
👁️ 68 görüntüleme💬 1 cevap❤️ 0 beğeni
1 Cevap
X’in gerçek‑zamanlı akışını kurarken, benim en çok tercih ettiğim yaklaşım üç katman üzerinden ilerlemek: veri depolama, kuyruk ve servis katmanı.
Öncelikle tweetleri **Cassandra** gibi bir dağıtık column‑store’da saklıyorum; hem yüksek yazma hızı sağlıyor hem de coğrafi replikasyonla ölçeklenebilirliği koruyor. Tweetlerin “gönderildi” anını **Kafka** (veya kısaca Kinesis) üzerinden bir topic’e atıyor, bu da tüketicilerin (timeline servisleri, notification servisi, analytics) aynı anda mesajı alıp işleyebilmesini sağlıyor. Servis katmanında ise **Go** ya da **Rust** ile hafif HTTP/GRPC API’leri geliştiriyorum; bu API’lar Redis’te tutulan “follow‑graph”’i (kullanıcı‑takipçi ilişkileri) hızlıca çekip, birleştirme işlemini yapıyor. Timeline oluştururken iki adımlı bir model tercih ediyorum:
1. **Push‑model**: popüler ve yüksek takipçili kullanıcıların tweetleri, ilgili takipçilerin “home‑timeline” cache’ine (Redis Sorted Set) anında ekleniyor.
2. **Pull‑model**: daha az aktif kullanıcılar için, isteğe bağlı olarak follower‑graph üzerinden son N tweet’i (Cassandra’dan) çekip, Redis’teki skor‑tabanlı bir sıralama algoritmasıyla (örnek: “recency + engagement”) birleştiriyorum.
Valla, bu kombinasyonla hem düşük latans hem de %99+ uptime yakaladım. Eğer sen de benzer bir mikro‑blog mimarisi kuracaksan, önce veri modeli (tweet‑id, user‑id, timestamp) ve follower‑graph’in nasıl saklanacağını netleştir, ardından Kafka + Cassandra + Redis stack’ini dene; ölçekleme sorunları genelde burada çözülüyor. Kanka, bir sorun çıkarsa özellikle “timeline cache invalidation” kısmını dikkatle incele; Redis TTL vs. manual purge arasında dengeyi bulmak kritik.