İçindekiler[Saklamak][Göstermek]
WhatsApp, kullanıcıların birbirleriyle mesaj alışverişi yapmalarını sağlayan bir sosyal mesajlaşma programıdır.
WhatsApp'ın nasıl çalıştığını hiç düşündünüz mü?
Yaratılışını ve işleyişini destekleyen kavramlar nelerdir?
Bu makale WhatsApp'ın temellerini gözden geçirecek Sistem tasarımı.
Ayrıca WhatsApp'ın her türlü sohbet yazılımını oluşturmak için kullanılabilecek genel mimarisini de inceleyeceğiz.
Neyse lafı fazla uzatmadan WhatsApp'ın sistem tasarımına bir göz atalım!
1. Temel Gereksinimler
WhatsApp, tüm dünyada birçok insan tarafından kullanılan, oldukça ölçeklenebilir bir teknolojidir. Sonuç olarak, neredeyse her zaman güvenilir ve çalışır durumda olacak şekilde iyi tasarlanmış olmalıdır.
Sonuç olarak, sistemin kritik ihtiyaçlarının belirlenmesi kritik öneme sahiptir.
WhatsApp messenger için minimum gereksinimler şunlardır:
- Bire bir etkileşimleri kolaylaştırabilir.
- Mesaj onayı ve son görülme her ikisi de mümkündür (Gönderildi, Teslim Edildi ve Okundu).
- Uçtan uca şifrelemeye ve medya desteğine (resimler/videolar) izin verin.
Gerekli hizmetimizin ne kadar kapasite gerektirdiğini öğrenelim.
2. Tahmini Kapasite
Amacımız, büyük miktarda trafiği idare edebilecek bir platform oluşturmaktır. Günde 10 milyar SMS gönderildiğini varsayalım. Elimizde:
- Her gün bir milyar insan tarafından 10 milyar SMS gönderiliyor.
- En yoğun trafikte (saniyede), 700,000 kişi etkindi (ortalama 6 kat)
- Pik kullanım sırasında saniyede 40 milyon mesaj iletilir.
- Bir mesajın ortalama uzunluğu 160 karakterdir: Her gün 10B * 160 = 1.6TB veri üretilir.
- Örnek olarak on yıllık hizmeti alın: 10 * 1.6B * 365 PB
- Uygulamanın tamamı, her biri özel bir görev yürütecek olan mikro hizmetlerden oluşacaktır. Mesaj göndermenin 20 milisaniye sürdüğünü ve sunucu başına 100 eşzamanlı bağlantı olduğunu varsayın. Sonuç olarak, gereken tahmini sohbet sunucusu sayısı = (saniyede sohbet mesajı Gecikme)/ sunucu başına eşzamanlı bağlantı = 40M * 20ms / 100 = 8000 sunucu.
3. Üst düzey mimari
Bu sistem iki temel hizmet üzerine inşa edilmiştir. Örneğin sohbet servisi ve geçici servis. Sohbet hizmeti, kullanıcıların çevrimiçi mesajları tarafından oluşturulan tüm trafiği yönetir. Eşzamanlı olarak, geçici hizmet, kullanıcı çevrimdışı olduğunda trafiği yönetir.
Kullanıcı çevrimiçiyse, mesajların iletilmesinden sohbet servisi sorumludur.
Mesajın alıcısının çevrimiçi olup olmadığını doğrulayacaktır; alıcı çevrimiçiyse, bu hizmet mesajı hemen teslim edecektir; alıcı çevrimiçi değilse, geçici hizmet, çevrimiçi olduklarında mesajı onlara gönderir.
Geçici hizmet, çevrimdışı kullanıcı yeniden bağlanana kadar geçici olarak erişilebilir verileri tutmak için ayrı bir depolama alanı tutar.
Üst Düzey API'ler Tasarlama
Bu hizmet, mesaj göndermek ve okumak için iki üst düzey işlevsel API'ye sahiptir. Sistem, REST mimarisi kullanılarak uygulanabilir.
Mesaj gönderme parametreleri
Bu API, iki kullanıcı arasında mesaj iletmek için kullanılacaktır.
konuşma parametreleri
Bu API, ileti dizili sohbetleri görüntülemek için kullanılır. WhatsApp'ı açtığınızda ilk gördüğünüz şey bunu düşünün. Tek bir API sorgusunda yalnızca bir kullanıcı için birkaç mesaj almak isteriz. Bunu halletmek için ofset ve mesaj sayısı parametrelerine ihtiyaç vardır.
Son görülme, tek tıklama, çift tıklama gibi özelliklerin işlevleri nelerdir?
Bu hizmetlerin dağıtımındaki önemli rol, alındı hizmetidir. Bu özellikler, bu hizmet alındı yanıtları oluşturmaya ve doğrulamaya devam ettiği için geliştirilmiştir.
- Tek kene: Kullanıcı A'dan bir mesaj Kullanıcı B'ye ulaştığında, sunucu mesajın iletildiğini bildiren tek bir onay işareti gönderir.
- çift tik: Sunucunun mesajı, uygun bağlantı yoluyla Kullanıcı B'ye gönderildikten sonra, Kullanıcı B, mesajın sunucuya alındığını bildirecektir. Sunucu daha sonra Kullanıcı A'ya başka bir onay verecektir. Sonuç olarak, yinelenen bir onay işareti görünecektir.
- mavi kene: Kullanıcı B, mesajı kontrol ettikten sonra sunucuya başka bir onay gönderecektir. Sunucu daha sonra Kullanıcı A'ya ek bir onay mesajı gönderir. Bundan sonra Kullanıcı A'nın ekranında mavi bir onay işareti görünecektir.
- Son görülme: Son görülen özellikten tamamen kalp atışı mekanizması sorumludur. Her 5 saniyede bir, sunucuya bir kalp atışı iletilir ve bu, herhangi bir kullanıcının kolayca erişebileceği bir tabloda her kullanıcının son görülme durumunu takip eder.
4. Temel özellikleri tasarlama
Kişiselleştirilmiş etkileşim
Bu, Sohbet hizmetinin gerekli bir parçasıdır. Bir kullanıcı, bu hizmeti kullanarak başka bir kullanıcıya mesaj gönderebilir. Bunun nasıl çalıştığına bir göz atalım:
Jay'in Aayush ile iletişim kurmak istediğini varsayın. Jay, mesajı aldığı bir sohbet sunucusuna bağlı. Jay, sohbet sunucusundan mesajın gönderildiğine dair onay alır. Sohbet sunucusu şimdi veri deposundan Aayush'un bağlı olduğu sohbet sunucusu hakkında bilgi istiyor. Jay'in sohbet sunucusu şimdi mesajı Aayush'un sohbet sunucusuna iletir ve Aayush mesajı bir itme mekanizması aracılığıyla alır. Aayush şimdi Jay'in sohbet sunucusuna mesajın teslim edildiğini bildiren bir onay gönderir. Aayush mesajı tekrar okursa, Jay'e mesajın okunduğuna dair yeni bir onay gönderilir.
Kullanıcı Etkinliğinin Durumu
Bir kişinin en son ne zaman aktif olduğu, anlık mesajlaşma programlarının düzenli bir özelliğidir.
İstemci ve sunucu arasındaki bağlantıyı sürdürmek için bir sistem bu şemada gösterilmektedir. Sunucu ve istemci arasında çift yönlü bir bağlantı kurmak için web soketleri kullanıldı. Bu bağlantılar, kullanıcının aktivite durumunu izlemek için kullanılan sinyaller gönderir.
Uçtan Uca Gizlilik
Uçtan uca şifreleme, yalnızca sohbet eden kullanıcıların iletişimleri okuyabilmesini sağlayan önemli bir özelliktir. Bir ortak anahtar, iletişime dahil olan tüm kullanıcılar arasında paylaşılır ve Uçtan Uca şifrelemenin sürdürülmesi için kritik öneme sahiptir. Kanalda birbiriyle iletişim kuran Jay ve Aayush adlı iki kullanıcı olduğunu varsayalım.
Jay, Aayush'ın genel anahtarına sahiptir ve Aayush, Jay'in ortak anahtarının yanı sıra onların paylaşılmayan özel anahtarına da sahiptir. Sonuç olarak, Jay mesajı ilettiğinde, mesajı Aayush'un sadece Aayush'un özel anahtarıyla çözülebilen genel anahtarıyla şifreler.
Benzer şekilde, Jay sadece Aayush'un iletişimini çözebilecek. Sonuç olarak, yalnızca Jay ve Aaysuh birbirlerinin iletişimini görebilecek ve sunucu tüm süreçte sadece bir ağ geçidi olarak işlev görecek.
5. Darboğazlar
Her sistem arızalanmaya eğilimlidir. Bu kadar büyük bir trafiği yönetmek için, darboğazlardan kaçınmak için hizmet her zaman çalışır durumda ve hataya dayanıklı kalmalıdır. Hizmetimiz tamamen Chat ve Transient sunucularına bağlı olduğundan, onların çalışmasından kaynaklanan tüm sorunları çözmeliyiz.
Sohbet Sunucusunun Arızası: Bu, sistemimizin kalbidir. Kullanıcılar çevrimiçi olduğunda, mesajları yönetmekten ve iletmekten sorumludur. Sonuç olarak, bu sistem kullanıcıları ile bağlantılarını sürdürür.
Sonuç olarak, bu hizmet başarısız olursa, tüm mimari zarar görür. Sohbet sunucusunun arızasını yönetmek için iki yaklaşım vardır. Bir yöntem, TCP bağlantılarını başka bir sunucuya kaydırmak, bir diğeri ise, bağlantı kaybı durumunda kullanıcıların otomatik olarak bağlantıları başlatmasına izin vermektir.
Geçici Depolama Arızası: Sonunda hizmetin tamamına zarar verebilecek arızaya açık başka bir bileşen de geçici depolamadır. Bu hizmet başarısız olursa, çevrimdışı kullanıcılara giden iletiler kaybolur.
Her kullanıcının geçici deposunu çoğaltarak ileti kaybını önleyebiliriz. Sonuç olarak, kullanıcı çevrimiçi olduğunda işlevleri işlemek için kopya kullanılabilir. Orijinal sunucu erişilebilir hale gelirse, kullanıcının geçici depolama alanının hem orijinal hem de çoğaltma örnekleri tek bir depoda birleştirilir.
6. Optimizasyon teknikleri
Gecikme: Sorunsuz ve iyileştirilmiş bir müşteri deneyimi sunmak için mesajlaşma hizmetinin gerçek zamanlı olması gerekir. Sonuç olarak, sık erişilen verilerin bir kısmını önbelleğe alarak gecikmenin azaltılması gerekir. Redis gibi dağıtılmış bir önbellek kullanarak kullanıcı etkinlik durumunu ve son konuşmaları bellekte önbelleğe alabiliriz.
Uygunluk: Hizmetimizin çoğu zaman ulaşılabilir olmasına ihtiyacımız var. Sistemimiz hataya dayanıklı olmalıdır, bu nedenle, kaybolan herhangi bir mesajın kopyalarından hızla kurtarılabilmesi için geçici mesajların birkaç kopyasını tutabiliriz. Sonuç olarak, sistemin kullanılabilirliği tehlikeye atılamaz.
Sonuç
Sistemimiz artık yalnızca birkaç özelliği destekliyor, ancak mesajları birkaç kişiye dağıtmak için grup sohbetleri eklemek için kolayca genişletebiliriz. Ayrıca video ve telefon görüşmesi özellikleri de sağlayabilirsiniz. Bu sistem aynı zamanda kullanıcıların durum güncellemeleri veya anlatılar yayınlayabilecekleri ve birbirlerini okuyabilecekleri şekilde de geliştirilebilir.
WhatsApp sistem tasarımına üst düzey bir genel bakış sağlamak için çok çalıştım. Umarım beğenmişsinizdir ve iyi günlerde kullanırsınız.
Yorum bırak