Sesli sohbeti kendin yazma. Ama neden yazmadığını bil.
Xaron'da ses ve video için hazır bir medya sunucusu kullanıyoruz. Bu, mühendislik açısından tembellik değil — kendimiz yazsaydık harcayacağımız süreyi nereye harcadığımızla ilgili bir karar.
Xaron baştan sona Rust. Şifrelemeyi standart bir protokolle kendimiz kurduk, taşıma katmanını kendimiz seçtik, iki veritabanını kendimiz işletiyoruz. Ama ses ve video için hazır bir medya sunucusu kullanıyoruz.
Bu tutarsız görünüyor. Değil — ve gerekçesi, hangi işin ürünü ayırt ettiğiyle ilgili.
Sesli sohbetin görünmeyen kısmı
Bir sesli kanalın çalışması için gereken şeylerin listesi, ilk bakışta göründüğünden uzun.
İki kişi arasında ses akıtmak nispeten kolay. Zorluk kişi sayısı arttığında başlıyor: her katılımcının herkese ayrı akış göndermesi kısa sürede çöküyor, o yüzden ortada bir sunucu duruyor ve akışları yönlendiriyor. Kimin sesi kime gidiyor, kim susuyor, kimin bant genişliği düştü — hepsi anlık kararlar.
Sonra ağın gerçekliği geliyor. Paket kayboluyor, gecikme dalgalanıyor, kullanıcı Wi-Fi'dan mobil veriye geçiyor. Bunların her biri için ayrı bir mekanizma var: kaybı gizleme, tampon ayarlama, bant genişliğine göre kalite düşürme, bağlantıyı yeniden kurma.
Bu işlerin hiçbiri "yazılır mı" sorusuna hayır demiyor. Hepsi yazılır. Ama hepsi, yıllardır bu problemle uğraşan projelerin çözdüğü problemler.
Ne ayırt ediyor, ne etmiyor
Karar verirken sorduğum soru şu oldu: kullanıcı Xaron'u neden seçiyor?
Uçtan uca şifreli mesajlaşma için seçiyor. Reklamsız olduğu için, verisi satılmadığı için, kazancının yüzde birini aldığımız için seçiyor.
Kimse "ses kodeği yönetimini kendileri yazmış" diye bir ürün seçmiyor. Ses kalitesi iyi olmalı — bu bir eşik, bir ayırt edici değil. Eşiği hazır bir bileşenle geçebiliyorsan, geçiyorsun.
Kendi yazacağın şey, kullanıcının seni onun için seçtiği şey olmalı. Gerisi altyapı.
Bunun bedeli de var
Hazır bileşen almak bedava değil ve bunu küçümsemek istemiyorum.
Bir bağımlılık ekliyorsun. O projenin yol haritası, sürüm politikası ve hata düzeltme hızı artık senin kısıtın. Kritik bir hatada bekliyorsun.
Operasyon yükü duruyor. Medya sunucusunu çalıştırmak, ölçeklendirmek, izlemek yine senin işin. "Hazır" olan yazılım, işletilmiş olan değil.
Sınırlara çarpıyorsun. Standart dışı bir şey istediğinde — bizim durumumuzda şifreleme ve kimlik modelimizle bütünleşme — o bileşenin kendi varsayımlarıyla uğraşıyorsun. Bazen sarmalıyorsun, bazen katkı yapıyorsun.
Sınırı nereye çektik
Pratikte ayrım şöyle oldu: medya taşıma hazır, kimlik ve yetki bizim.
Bir kullanıcının sesli odaya girme hakkı olup olmadığına biz karar veriyoruz. Odaya giriş jetonu bizim tarafımızda üretiliyor, kısa ömürlü ve o kullanıcıya özel. Medya sunucusu kimin kim olduğunu bilmiyor — sadece geçerli bir jetonu olan birinin geldiğini biliyor.
Bu ayrım önemli, çünkü yetki kararını dışarı verirsen ürünün güvenlik modelini de dışarı vermiş oluyorsun. Taşımayı dışarı vermek başka bir şey.
Aynı soruyu her bileşene sor
Bu kararın kendisinden çok, verilme biçimi genellenebilir.
Arama motorunu da hazır kullanıyoruz, önbelleği de. Ama şifrelemeyi kullanmadık — çünkü orası ürünün vaadi. Taşıma katmanını da kendimiz seçtik, çünkü gizlilik modeliyle doğrudan bağlantılı.
Her bileşende aynı soru: bu, kullanıcının bizi seçme sebebi mi, yoksa o sebebin çalışması için gereken altyapı mı? İkincisiyse, en iyi hazır çözümü al ve zamanını birincisine harca.