Discord benzeri uygulama yapmak için hangi yazılım dilini bilmem gerekı?

Ne kadar net doktun Discord'un tum gereksinimlerini ortaya. Realtime messaging applerle tecruben cok herhalde. MySQL onerdigine gore. (!)

Konu sahibi icin;
Discord benzeri open-Source bir proje var, revolt adi. Backend'de kullandiklari dil Rust agirlikli olarak; GitHub - revoltchat/backend: Monorepo for Revolt backend services. dB icin MongoDB kullaniyorlar.
Frontend icin ise React kullaniyor bu proje.

Discord'un kendisi, React ve React + electron frontend icin, backend icin ise; agirlikli Elixir ve Python kullaniyor ama bunlarin yani sira, C++, GO ve Rust'da kullaniyorlar. Discord gibi sacelability goz onunde bulundurularak gelistirilen sistemler monolithic yapiya sahip olamazlar isteselerde. Dolayisiyla moduler gelistirilirler, bir modulu gelistirmeye en uygun dil/arac kiti neyse o tercih edilir.

User data Storage icin genelde geleneksel rdbms cozumleri kullanirlar, mesajlar icinse nosql veri tabanlari daha uygun. Horizontal scaling mumkun hale geliyor ve islemleri sunucular arasinda ya da ulkeler arasindaki sunucular arasinda bile dagitabiliyorsun. (bolgesel sunucu sistemleri, mesela Discord'da sesli sohbetteyken gormussunuzdur sesli sohbete baglandiginiz sunucunun konumunu degistirebildiginizi.)

Yani hocam dediklerinizden çok anlamadım ama sanırım Python tek yetmeyecek. Öyle bir uygulama yapmak için neleri bilmem gerek ve Revolt'dan nasıl yapılıyor? Basitçe anlatır mısınız? Ve uygulamayı sadece aramızds kullancaz o yüzden tek sunucu yetmez mi?
 
Yani hocam dediklerinizden çok anlamadım ama sanırım Python tek yetmeyecek. Öyle bir uygulama yapmak için neleri bilmem gerek ve Revolt'dan nasıl yapılıyor? Basitçe anlatır mısınız? Ve uygulamayı sadece aramızds kullancaz o yüzden tek sunucu yetmez mi?
Tek sunuculu bir sey yapmak istiyorsan WebRTC ustune bir sey yapabilirsin. Tek Python yeter ama front end icin de biraz HTML/CSS/JS bilmen lazim.
 
Ne kadar net doktun Discord'un tum gereksinimlerini ortaya. Realtime messaging applerle tecruben cok heralde. MySQL onerdigine gore. (!)

Konu sahibi icin;
Discord benzeri open-source bir proje var, Revolt adi. Backend'de kullandiklari dil Rust agirlikli olarak; GitHub - revoltchat/backend: Monorepo for Revolt backend services. DB icin Mongodb kullaniyorlar.
Frontend icin ise React kullaniyor bu proje.

Discord'un kendisi, React ve React + Electron frontend icin, backend icin ise; agirlikli Elixir ve Python kullaniyor ama bunlarin yani sira, C++, Go ve Rust'da kullaniyorlar. Discord gibi sacelability goz onunde bulundurularak gelistirilen sistemler monolithic yapiya sahip olamazlar isteselerde. Dolayisiyla moduler gelistirilirler, bir modulu gelistirmeye en uygun dil/arac kiti neyse o tercih edilir.

User data storage icin genelde geleneksel RDBMS cozumleri kullanirlar, mesajlar icinse NoSQL veri tabanlari daha uygun. Horizontal scaling mumkun hale geliyor ve islemleri sunucular arasinda yada ulkeler arasindaki sunucular arasinda bile dagitabiliyorsun. (Bolgesel sunucu sistemleri, mesela Discord'da sesli sohbetteyken gormussunuzdur sesli sohbete baglandiginiz sunucunun konumunu degistirebildiginizi.)
Hocam mesajlasma servisi neden RDBMS ile islemez? NoSQL cok daha verimli mi oluyor. Sadece NoSQL kullanan DB'ler mesajlasma gecmisi gibi veriler midir. Yani bir DWH mı kurulur?

Tesekkür ederim.

Yani isin özü bu tarz projeler monolit yapıda veri saklamaz diyebilir miyiz?
 
Öncelikle herkese merhaba, arkadaşlarımla aramızda konuşabileceğimiz ve mesajlaşabileceğimiz bir uygulama yapmak istiyorum ama bu yazılım işlerine daha yeni başladım. Daha bir hafta önce https://www.youtube.com/playlist?list=PLY20HpFruiK17gQBHXjJN-YiFujiE1zVE şu playlistten pythona başladım. Ne yapmam gerek, öneriniz var mıdır?
Madem python başladın, python ile devam et. Klasik tcp/udp üzerinden socket programlama yap. iki farklı client sunucunla (socket-server) eşleşsin ve sunucu üzerinden mesajlaşabilsinler.
UI şimdilik gerek yok, server tarafını hallettikten sonra girersin UI kısmına. Bu sebeple yine python console üzerinden mesajlaşmasını sağlayabilirsin.

Mesajlaşma kısmını hallettikten sonra, mesajları bir yere kaydet. Nereye kaydettiğin, senin için önemli değil.

Sonra UI tarafını halledeceksin. Socket destekleyen bir programlama dili ile client tarafınıda halledersin. Sadece masaüstü bir proje istiyorsan, python tkinter veya qt ile yapılabilir. Yada WebSocket kullanacaksın, web üzerinden devam edeceksin.

İnternette zibilyon tane örnek var artık bu konu ile ilgili. Hatta birçok kütüphane bile var.

Ve uygulamayı sadece aramızds kullancaz o yüzden tek sunucu yetmez mi?
Discord alternatif uygulamalar var bunları neden kullanmıyorsun o halde? Team, Slack, Skype vs?
Bu tarz bir proje yapmak için hem zaman hemde maddi kaynak lazım.
 
Madem Python başladın, Python ile devam et. Klasik tcp/udp üzerinden socket programlama yap. İki farklı Client sunucunla (socket-server) eşleşsin ve sunucu üzerinden mesajlaşabilsinler.
UI şimdilik gerek yok, server tarafını hallettikten sonra girersin UI kısmına. Bu sebeple yine Python Console üzerinden mesajlaşmasını sağlayabilirsin.

Mesajlaşma kısmını hallettikten sonra, mesajları bir yere kaydet. Nereye kaydettiğin, senin için önemli değil.

Sonra UI tarafını halledeceksin. Socket destekleyen bir programlama dili ile Client tarafınıda halledersin. Sadece masaüstü bir proje istiyorsan, Python Tkinter veya qt ile yapılabilir. Ya da websocket kullanacaksın, web üzerinden devam edeceksin.

İnternette zibilyon tane örnek var artık bu konu ile ilgili. Hatta birçok kütüphane bile var.

Discord alternatif uygulamalar var bunları neden kullanmıyorsun o halde? Team, slack, Skype vs?
Bu tarz bir proje yapmak için hem zaman hem de maddi kaynak lazım.

Tamamdıe hocam. Zaten arkadaşlarımla şu an Microsoft Teams kullanıyoruz vize yetiyor sadece öyle bahane olsun diye yapmak istiyorum.

Madem Python başladın, Python ile devam et. Klasik tcp/udp üzerinden socket programlama yap. İki farklı Client sunucunla (socket-server) eşleşsin ve sunucu üzerinden mesajlaşabilsinler.
UI şimdilik gerek yok, server tarafını hallettikten sonra girersin UI kısmına. Bu sebeple yine Python Console üzerinden mesajlaşmasını sağlayabilirsin.

Mesajlaşma kısmını hallettikten sonra, mesajları bir yere kaydet. Nereye kaydettiğin, senin için önemli değil.

Sonra UI tarafını halledeceksin. Socket destekleyen bir programlama dili ile Client tarafınıda halledersin. Sadece masaüstü bir proje istiyorsan, Python Tkinter veya qt ile yapılabilir. Ya da websocket kullanacaksın, web üzerinden devam edeceksin.

İnternette zibilyon tane örnek var artık bu konu ile ilgili. Hatta birçok kütüphane bile var.

Discord alternatif uygulamalar var bunları neden kullanmıyorsun o halde? Team, slack, Skype vs?
Bu tarz bir proje yapmak için hem zaman hem de maddi kaynak lazım.

Peki hocam o dediğiniz UI, TCP HDP falan ne demek ben hiç anlamıyorumda.
 
Peki hocam o dediğiniz UI, TCP HDP falan ne demek ben hiç anlamıyorumda.
UI; user interface kelimelerin baş harfinden geliyor. Arayüz açıkçası.

Tcp/udp; bir internet protokolü. Mesajlaşmayı sağlar.
Tcp, güvenli bağlantı sağlar. Gönderilen paket (gönderilen data genelde packet olarak geçer) karşı tarafa ulaştığını garanti eder. Ayrıca paketleri sırayla gönderir. Dosya indirme, mesajlaşma gibi yapılar için uygun.
Udp de güvenlik önemli değil. Karşıya ulaştı mı ulaşmadı mı sırayla gitsin falan gibi dertleri yok. Sender gönderdi mi? Evet. Bitti. Receiver almadıysa yapacak bir şey yok der. Bu yüzden hızlıdır. Oyunlarda, canlı yayın gibi ıvır zıvırda tercih edilir. Mesajlaşmada kesinlikle tercih edilmemeli.

Hobi olsun diye yapabilirsin. Yukarıda bahsettiğim şekilde yap. Hem python bilgin gelişir hemde socket programlama nedir öğrenmiş olursun.
 
UI; user interface kelimelerin baş harfinden geliyor. Arayüz açıkçası.

Tcp/udp; bir internet protokolü. Mesajlaşmayı sağlar.
TCP, güvenli bağlantı sağlar. Gönderilen paket (gönderilen data genelde packet olarak geçer) karşı tarafa ulaştığını garanti eder. Ayrıca paketleri sırayla gönderir. Dosya indirme, mesajlaşma gibi yapılar için uygun.
UDP de güvenlik önemli değil. Karşıya ulaştı mı ulaşmadı mı sırayla gitsin falan gibi dertleri yok. Sender gönderdi mi? Evet. Bitti. Receiver almadıysa yapacak bir şey yok der. Bu yüzden hızlıdır. Oyunlarda, canlı yayın gibi ıvır zıvırda tercih edilir. Mesajlaşmada kesinlikle tercih edilmemeli.

Hobi olsun diye yapabilirsin. Yukarıda bahsettiğim şekilde yap. Hem Python bilgin gelişir hem de socket programlama nedir öğrenmiş olursun.

Teşekkürler hocam. Sağ olun.
 
Hocam mesajlasma servisi neden RDBMS ile islemez? NoSQL cok daha verimli mi oluyor. Sadece NoSQL kullanan DB'ler mesajlasma gecmisi gibi veriler midir. Yani bir DWH mı kurulur?
NoSQL databaseleri genelde daha yuksek I/O kapasitesine sahip ve daha dusuk gecikmeye sahipler (Constraintler yok, esnek yapi, dolayisiyla sadece indexing). Bunun arkasindaki sebep icin ACID ve BASE farklarini aratabilirsin. NoSQL veritabanlari genelde BASE modeli kullanirlar (ACID destekleyebilirler ancak tercih edilmelerinin sebebi BASE'in getirdigi esneklik).

Bir diger artilari yuksek olceklenebilirlik. RDBMS'leri olceklemek zor. Constraintlerinden birinin varligini tum databaselerde aratmasi gerekirse (farkli farkli sunucularda) latency git gide artacak. No constraint/no relation olarak kullanmayi deneyebilirsin ancak hala yatay olceklemeye uygun degiller genelde. En azindan geleneksel olanlari. NewSQL cozumleri yatay olceklemeyi destekleselerde NoSQL cozumlerini olceklemek daha kolay.

DWH kurmuyoruz ayrica. Yani tam olarak degil. Discord benzeri platformlar, dagitik sistemlerdir. Verilerinin nerede depolanacagi sistem yukune, veri egemenligi yasalarina, cografi dagilim, replikasyon gibi konulara bagli olarak degisir.

Senin siteye girisinden itibaren surec asagi yukari soyle isliyor;
Giris bilgilerini gonderdigin sunucu geneldi kisitli sayidadir ve sayisi COK nadiren degisir. HAProxy veya Nginx benzeri bir loadbalancer ile kisitli sayidaki sunuculardan birine yonlendirilir ve giris istegin o sunucu tarafindan yonetilir. Buraya kadar olan sunucularin kullandiklari veriler icin DWH'lar kurulmus olabilir. Fakat buradan sonrasi full decentralized. Sen giris yaptiktan sonra, sana en dusuk gecikmeli sunucu tespit edilir ve senin baglantin oraya aktarilir.

Bunu yapabilmesini saglayan sey buradan sonra baglantilarin standard HTTP baglantilar yerine websocket baglantilarina donusmesi. Senin isteklerin artik post/get requestler yerine websocket mesajlari haline gelir. (Bunu saglayan sey ise client side icin yazdiklari sistem. Butonlara URL linkleri koymak yerine websocket mesajlari gonderecek fonksiyonlar koyuyorlar. Websocket'te HTTP protokolu kullanir ama daha sonrasinda karsi sunucuyla handshake bittiginde upgrade isteyip duplex bi baglanti acik tutar.) Simdi bu websocket baglantilari ile kendine en yakin sunucuya gonderdigin her istek, sunucu tarafindan belirlenen en uygun bolgeye aktarilir. Dolayisiyla veriler daginik bir sekilde rastgele bolgelerde tutuluyor olurlar. (Tamamen rastgele degil tabii ki, yukarida bahsettigim sartlardan birine gore aktarilir.)
 

Technopat Haberler

Yeni konular

Geri
Yukarı