01Sorun ve çözüm
Gerçek zamanlı uygulama geliştirmede sunucu, bir olay olduğu anda bunu ilgili kullanıcılara kendisi iletir. Burada asıl iş bağlantıyı açmak değil, bağlantının koptuğu anı yönetmektir: tünelden geçen bir kuryenin telefonu ya da uyku moduna giren bir tablet yeniden bağlandığında kaçırdığı olayları doğru sırayla almalıdır. Mimarimizi bu senaryodan başlayarak kuruyoruz.
02Kimler için
Gerçek zamanlı uygulama kimler için gerekli
Bilginin birkaç saniye gecikmesi bile karar ya da para kaybına yol açıyorsa gerçek zamanlı mimari değerlendirilmelidir.
- Siparişlerin mutfak, kasa ve kurye ekranlarına anında düşmesi gereken restoran zincirleri ve bulut mutfaklar
- Araç, kurye ya da saha ekibinin konumunu ve görev durumunu canlı izleyen lojistik ve servis firmaları
- Canlı açık artırma, teklif toplama ya da anlık stok gösterimi yapan ticaret platformları
- Müşteriyle uygulama içinden yazışan ya da temsilciler arasında anlık görev dağıtan destek ekipleri
- Birden fazla kullanıcının aynı belge, plan ya da tablo üzerinde eşzamanlı çalıştığı iş uygulamaları
03İhtiyaçlar
Anlık veri akışında karşılaşılan teknik sorunlar
Gerçek zamanlı özelliklerin çoğu demoda sorunsuz çalışır; zorluk gerçek ağ koşullarında başlar.
- 01
Kopan ve yeniden kurulan bağlantılar
Mobil cihazlar sürekli ağ değiştirir. İstemcinin hangi olaya kadar aldığını bildirip eksikleri istemesi, sunucunun da bu olayları kısa bir süre saklaması gerekir; aksi hâlde bağlantı geri geldiğinde ekran eksik kalır.
- 02
Olay sırasının korunması
Bir siparişin önce “hazırlanıyor” sonra “iptal edildi” olarak görünmesi ile tersi aynı şey değildir. Olaylara sıra numarası verilir, istemci sırası bozuk gelen mesajı bekletir ya da yeniden ister.
- 03
Eşzamanlı düzenlemede çakışma
İki kullanıcı aynı alanı aynı anda değiştirdiğinde son yazanın kazanması her senaryoya uymaz. Ortak düzenleme gerektiren ekranlarda CRDT gibi çakışmasız birleştirme yöntemleri, diğerlerinde ise alan düzeyinde kilit kullanılır.
- 04
Yetkinin her mesajda korunması
Bir şubenin siparişleri yalnızca o şubenin ekranına gitmelidir. Kullanıcının hangi kanala abone olabileceği bağlantı açılırken ve yetkisi değiştiğinde sunucuda yeniden denetlenir.
04Özellikler
Gerçek zamanlı uygulamalarda geliştirdiğimiz yapılar
Her proje farklı bir karışım ister; en sık kurduğumuz parçalar şunlardır.
- 01
Canlı durum panoları
Sipariş, görev ya da cihaz durumları değiştikçe panoda yer değiştirir; gecikme eşiği aşıldığında kart renklenir ve sorumluya uyarı gider.
- 02
Uygulama içi mesajlaşma
Okundu bilgisi, yazıyor göstergesi, dosya paylaşımı ve mesaj geçmişi; kullanıcı uygulamada değilse mesaj anlık bildirim olarak iletilir.
- 03
Çevrimiçi kullanıcı ve varlık bilgisi
Kimin aynı kaydı incelediği ya da hangi temsilcinin müsait olduğu canlı gösterilir; bağlantısı kopan kullanıcı kısa bir bekleme süresinden sonra çevrimdışı işaretlenir.
- 04
Canlı harita takibi
Araç ve personel konumları haritada akıcı biçimde güncellenir; sık gelen konum verisi sunucuda seyreltilerek hem pil hem bant genişliği korunur.
05Entegrasyonlar
Gerçek zamanlı uygulama projelerinde kullanılan bağlantılar
Anlık akış çoğu zaman başka sistemlerden gelen olaylarla beslenir.
- 01
Yemek siparişi platformları
Yemeksepeti, Getir ya da Trendyol Yemek gibi platformlardan gelen siparişler, platformların sunduğu entegrasyon yöntemleriyle alınıp mutfak ekranına aynı akışla düşürülür.
- 02
Anlık bildirim servisleri
Uygulama kapalıyken kullanıcıya ulaşmak için Android'de Firebase Cloud Messaging, iOS'ta Apple'ın bildirim servisi kullanılır.
- 03
Cihaz ve sensör verisi
Araç takip cihazları ya da sahadaki sensörler MQTT gibi hafif protokollerle veri gönderir; bu veri işlenip panolara aktarılır.
- 04
Sesli ve görüntülü görüşme
Destek ya da danışmanlık akışlarında tarayıcı ve mobil uygulama içinde WebRTC tabanlı görüşme eklenir; sinyal iletimi aynı gerçek zamanlı altyapı üzerinden yapılır.
06Süreç
Gerçek zamanlı uygulama yaptırmak istiyorum: süreç nasıl işler?
Adım 01
Analiz
İş akışınızı, kullanıcılarınızı ve mevcut sistemlerinizi dinleriz; kapsamı, öncelikleri ve kabul ölçütlerini yazılı hâle getiririz.
Adım 02
Tasarım
Ekran akışlarını ve veri modelini çıkarırız. Arayüzü sizinle gözden geçirip onay almadan geliştirmeye geçmeyiz.
Adım 03
Geliştirme
Kısa döngülerle çalışırız; her döngü sonunda çalışan bir sürümü test ortamında görürsünüz.
Adım 04
Test
İşlevsel testler, entegrasyon testleri ve temel güvenlik kontrolleriyle hataları yayından önce yakalarız.
Adım 05
Yayın
Sunucu, alan adı, yedekleme ve izleme ayarlarını yaparak canlıya alırız; ekibinize kısa bir kullanım eğitimi veririz.
Adım 06
Bakım
İsterseniz bakım ve destek anlaşmasıyla güncellemeleri, izlemeyi ve yeni geliştirmeleri sürdürürüz.
07Teknoloji
WebSocket, SSE ve yatay ölçeklenme
Çift yönlü ve sık mesajlaşma gereken ekranlarda WebSocket, yalnızca sunucudan istemciye akış gereken panolarda daha sade olan Server-Sent Events tercih edilir. Birden fazla sunucu çalıştığında bir sunucuya bağlı kullanıcıya diğer sunucudaki olayı ulaştırmak için Redis yayın-abone yapısı, NATS ya da Kafka gibi bir mesaj aracısı kullanılır. Yönetilen gerçek zamanlı servisler de kendi sunucunuzu işletmek istemediğiniz durumlarda seçenek olarak değerlendirilir.
Devamını okuDaha az göster
Açık bağlantı sayısı, istek sayısından farklı bir yük türüdür; her bağlantı sunucuda bellek tutar. Bu yüzden yük testleri beklenen eşzamanlı kullanıcı sayısıyla, bağlantıların aynı anda kopup yeniden bağlandığı senaryo da dahil edilerek yapılır. Yavaş istemcilere mesaj yığılmasını önleyen sınırlar ve ağır yükte daha seyrek güncelleme gönderen bir yedek davranış tasarıma eklenir.
08Çalışma modelleri
Bu hizmette çalışma modelleri
- 01
Proje bazlı
Sabit kapsam, sabit fiyat ve belirli teslim tarihi
Kapsamı belli, teslim tarihi olan işler için.
- Yazılı kapsam ve kabul ölçütleri
- Sabit fiyat ve belirli teslim tarihi
- Teslim ve kabul adımları sözleşmede
- 02
Bakım ve destek
Aylık sözleşmeli, SLA'lı bakım, destek ve geliştirme saati
Yayındaki bir sistemin sürekliliği için.
- Aylık sözleşme ve SLA
- İzleme, güncelleme ve hata düzeltme
- Aylık geliştirme saati
09Sık sorulan sorular
Gerçek zamanlı uygulama hakkında sık sorulan sorular
WebSocket mi Server-Sent Events mi kullanmalıyız?
Kullanıcı da sık sık sunucuya veri gönderiyorsa, örneğin mesajlaşma ya da ortak düzenlemede, WebSocket uygundur. Yalnızca ekranın güncellenmesi gerekiyorsa SSE daha az altyapı gerektirir ve standart web sunucularıyla rahat çalışır.
Mevcut uygulamamıza sonradan gerçek zamanlı özellik eklenebilir mi?
Çoğu zaman evet. Mevcut sistemde bir kayıt değiştiğinde olay üreten küçük bir katman eklenir ve bu olaylar ayrı bir gerçek zamanlı servis üzerinden ekranlara iletilir. Mevcut veritabanı ve iş kuralları değişmeden kalabilir.
Gerçek zamanlı uygulama yaptırma fiyatları neye göre belirlenir?
Eşzamanlı kullanıcı sayısı, mesaj sıklığı, çevrim dışı ve yeniden bağlanma gereksinimleri, ortak düzenleme olup olmadığı, mobil uygulama ihtiyacı ve barındırma tercihi maliyeti belirler. Yönetilen servis kullanımı kurulum işini azaltırken kullanım bazlı bir işletme gideri getirir.
Bağlantı koptuğunda mesajlar kaybolur mu?
Doğru kurulmuş bir sistemde kaybolmaz. Kalıcı olması gereken her olay önce veritabanına yazılır, sonra yayınlanır; yeniden bağlanan istemci son aldığı sıra numarasını bildirerek eksik olayları ister.
Gerçek zamanlı uygulama için firma seçerken nelere dikkat etmeliyiz?
Bağlantı kopması, sunucu yeniden başlatılması ve yoğun anlarda ne olacağını somut olarak açıklayabilmesine bakın. Yük testinin hangi senaryolarla yapılacağını ve izleme panolarında neyin takip edileceğini sorun.
Uygulama arka plandayken kullanıcıya nasıl haber verilir?
Telefonlar arka plandaki uygulamaların açık bağlantı tutmasını kısıtlar. Bu durumda olay anlık bildirim olarak gönderilir, kullanıcı uygulamayı açtığında canlı bağlantı yeniden kurulur ve ekran güncel duruma getirilir.
10İlgili hizmetler