Discord’un büyüme hikayesi, sadece kullanıcı sayısındaki artışla değil, altyapısındaki sürekli iyileştirmelerle de şekillendi. Platformun kuruluşundan bu yana geçen yıllar boyunca geliştiriciler, ölçeklenebilirlik ve performans darboğazlarını aşmak için birçok bileşeni yeniden yazdı. Peki, bu değişikliklerin ardındaki gerçek motivasyonlar nelerdi? Ve hangi teknolojiler bu süreçte öne çıktı?
Başlangıçta Standart Bir Yığın: Hız İçin Tasarlanmış
Discord’un ilk yıllarında (2013 civarı), geliştiriciler hızlı bir şekilde ürün çıkarabilmek için standart startup yöntemlerini benimsedi. Gerçek zamanlı sohbet için Elixir, API’ler için Python, mikro hizmetler için Go, veri depolama için MongoDB ve masaüstü uygulaması için Electron tercih edildi. Bu kombinasyon, küçük bir ekibin hızlıca bir ürün oluşturmasına ve kullanıcı kazanmasına olanak tanıdı.
Ancak bu yaklaşımın uzun vadeli bir strateji olmadığı kısa sürede anlaşıldı. Platform büyüdükçe, başlangıçta tercih edilen teknolojilerin bazıları artık yetersiz kalmaya başladı. Discord’un yaklaşımıysa basitti: Mevcut sistemleri iyileştirmek yerine, gerektiğinde tamamen yeni çözümler üretmek.
MongoDB’den Cassandra’ya, Sonra ScyllaDB’ye: Veritabanı Değişikliklerinin Arkasındaki Neden
Discord’un kullanıcı sayısı 5 milyona ulaştığında, MongoDB’nin performansı ciddi şekilde düştü. Veritabanı, artan yükle başa çıkamaz hale geldi ve geliştiriciler alternatifler aramaya başladı. 2017 yılında Cassandra’ya geçiş yapıldı. Bu değişim, 12 düğümlük bir kümeyle başladı ve ilk etapta sorunsuz çalıştı.
Ancak yıllar içinde kullanıcı sayısı katlanarak artmaya devam etti. 2022 yılına gelindiğinde, 177 düğümlük bir kümeyle çalışan Cassandra bile yönetilmesi zor hale geldi. Bakım maliyetleri yükseldi, performans sorunları ortaya çıktı. Discord’un çözümüysa ScyllaDB oldu. Bu yeni veritabanı, Cassandra’nın sunduğu avantajları korurken, daha düşük gecikme süreleri ve daha iyi ölçeklenebilirlik sunuyordu.
Sonuç olarak, dokuz yıl içinde Discord üç farklı veritabanı değiştirdi. Ancak her değişikliğin arkasında net bir gerekçe vardı: Sistem artık ihtiyaçları karşılayamaz hale geliyordu.
Elixir’in Yerini Rust’a Bırakması: Performansın Sınırlarını Aşmak
Discord’un gerçek zamanlı sohbet altyapısı başlangıçta Elixir ile inşa edildi. BEAM sanal makinesi, milyonlarca eşzamanlı işlem ve anında yeniden başlatma özellikleriyle bu görev için ideal görünüyordu. Ancak zamanla, özellikle büyük veri kümelerinin sıralanması gerektiğinde performans sorunları ortaya çıktı. 170 milisaniyelik işlem süreleri, Discord’un ölçeğinde kabul edilemez hale geldi.
Geliştiriciler, bu sorunun üstesinden gelmek için Rust diline yöneldi. Rust’ın bellek güvenliği ve performansı, bu tür kritik görevler için mükemmel bir seçimdi. Sonuç olarak, işlem süreleri 1 milisaniyeye kadar düştü. Bu değişim, sadece performansı iyileştirmekle kalmadı, aynı zamanda gelecekteki büyüme için de sağlam bir temel oluşturdu.
Go’nun Çöp Toplayıcısının Yerini Rust’a Bırakması: Bellek Yönetimindeki Darboğaz
Discord’un Okuma Durumları hizmeti, kullanıcıların hangi mesajları okuduklarını takip eder. Uygulamayı her açtığınızda, bir mesaj gönderdiğinizde ya da okuduğunuzda bu hizmet devreye girer. Başlangıçta bu hizmet Go ile yazılmıştı. Ancak Go’nun çöp toplama sistemi, performans sorunlarına yol açmaya başladı.
Go’nun çöp toplayıcısı her iki dakikada bir çalışıyor ve bellekteki tüm verileri tarıyordu. Discord’un milyonlarca kullanıcıyı bellekte sakladığı bir ortamda, bu tarama işlemi ciddi gecikmelere neden oluyordu. Geliştiriciler, Go’yu farklı versiyonlarına yükselterek bu sorunu çözmeye çalıştı, ancak başarılı olamadılar.
Sonunda, bu hizmet Rust ile yeniden yazıldı. Rust’ın çöp toplayıcısı olmadığı için, bellek kullanımı anında serbest bırakılıyor ve gecikme süreleri milisaniyelerden mikro-saniyelere düştü. Bu değişiklik, 2020 yılında gerçekleştiğinde, pandemi nedeniyle kullanıcı sayısı 100 milyona ulaşmıştı. Bu yenileme, sadece tesadüf değildi; gerekliliğin sonucuydu.
Değiştirilmeyen Teknolojiler: Ne Zaman Değişiklik Yapılmamalı?
Discord’un altyapısındaki tüm bileşenler sürekli olarak güncellenmedi. Gerçek zamanlı mesajlaşma için Elixir hâlâ kullanılıyor. Bunun nedeni, BEAM sanal makinesinin milyonlarca eşzamanlı bağlantıyı yönetmek için optimize edilmiş olmasıdır. Aynı şekilde, Python API’ler için kullanılmaya devam ediyor ve Electron masaüstü uygulamalarını çalıştırıyor. Mobil uygulamalar içinse yıllar içinde React Native tercih edildi ve bu sayede iOS ve Android uygulamaları tek bir kod tabanında birleştirildi.
Bu teknolojilerin değiştirilmemesinin temel nedeni, mevcut durumda mükemmel şekilde çalışmalarıdır. Discord’un yaklaşımı, çalışan sistemlere dokunmamak üzerine kurulu. Ancak gerekli olduğunda, sistemler yeniden yazılabiliyor ve gelecekteki büyümeye hazır hale getirilebiliyor.
Discord’un Deneyiminden Çıkarılacak Dersler
Discord’un altyapısını yeniden yazmasının ardındaki asıl sebep, hype değil, gerçek ihtiyaçlar olmuştur. Her değişiklik, belirli bir eşiğin aşılması veya bir metriğin iyileştirilememesi nedeniyle yapılmıştır. Discord’un kurucuları, geleceği tahmin etmek yerine, bugünü iyileştirme ve yarını planlama felsefesini benimsemişti.
Bu yaklaşım, startup’lar ve büyük şirketler için önemli bir ders niteliğinde. Her teknolojinin bir ömrü vardır. Başlangıçta mükemmel çalışan bir sistem, büyümeyle birlikte yetersiz hale gelebilir. Ancak bu, sistemlerin baştan itibaren mükemmel olması gerektiği anlamına gelmez. Bugünün ihtiyaçlarına odaklanın, yarının sorunlarını bugünden çözmeye çalışın.
Discord’un hikayesi, sadece hangi teknolojilerin kullanıldığından değil, nasıl düşünüldüğünden ve ne zaman değişiklik yapılacağından bahsediyor. Gelecekteki projelerinizde bu ilkelere dikkat etmek, uzun vadeli başarının anahtarı olabilir.
Yapay zeka özeti
Discord’un altyapısını neden sürekli yeniden yazdığına dair performans darboğazları, veritabanı değişiklikleri ve programlama dillerinin değişimiyle ilgili detaylar.