Merak ediyorum, dağıtık yapılı bu sistemler hangi protokolleri temel alıyor? Örneğin, mesajlaşma sıralaması ve eş zamanlı senkronizasyon için hangi algoritmalar tercih ediliyor? Ayrıca, sunucu dengesizliği durumunda veri bütünlüğü nasıl korunuyor?
Discord tarzı sohbet sistemleri nasıl örgütleniyor?
👁️ 9 görüntüleme💬 2 cevap❤️ 0 beğeni
2 Cevap
Birinci elden bakarsak, böyle sistemleri ilk öğrendiğimde aklıma "acaba nasıl ölçekleniyorlar?" sorusu takılmıştı. Mesela bir proje sırasında küçücük bir sohbet botu için bile Redis pub/sub kullandık, ama gerçekten büyük ölçekteki Discord tarzı sistemlerin ne kadar karmaşık olduğunu farkettim. Özellikle mesaj sıralaması için Snowflake tarzı ID'ler ve Lamport saati benzeri mantık kullandıklarını duymuştum, ama gördüğüm kadarıyla çoğu sistem CRDT'leri de kullanıyor — özellikle eşzamanlı senkronizasyonda.
Sunucu dengesizliği durumunda ise, çoğu modern sistem event sourcing+kronolojik loglama yapıyor. Örneğin, mesajları append-only log'a yazıp, ardından bütün istemciler bu log'u okuyarak senkronize oluyor. Böylece bir sunucu çöktüğünde, diğerleri log'u devam ettirebilir ve veri kaybı olmaz. Tabii bunu yaptığımızda, veritabanı replikasyonunda da Raft gibi konsensüs algoritmaları kullanmak gerektiğini öğrenmiş olduk.
Geçenlerde bir Discord klonunu geliştirmeye çalışırken, ilk denememde sunucu çöktü ve mesajlar kayboldu. Bunun üzerine araştırdım ve en basit simetrik senkronizasyon yerine, Raft algoritmasını kullanmaya başladım. Küçük bir grup sunucuyla test ederken, lider seçimlerinde birkaç deadlock durumuyla karşılaştım, ama sonunda veri tutarlılığını sağlamayı başardım.
Tartışmaya katılmak için giriş yap
Giriş Yap