Uygulamalarda Çevrimdışı Modun Mekanikleri
Uygulamalar, verilerin kopyalarını doğrudan cihaz hafızasında (yerel önbellek veya veritabanı) saklayarak ve gecikmeli senkronizasyon için kuyruklar kullanarak internetsiz çalışır. Ağ erişilemediğinde, arayüz yerel depolama alanına başvurur ve kullanıcının tüm eylemleri (beğeniler, yorumlar, profil değişiklikleri) özel bir kuyruğa kaydedilir. Bağlantı yeniden kurulduğunda, uygulama biriken değişiklikleri otomatik olarak sunucuya gönderir ve olası sürüm çakışmalarını çözer.
Offline-first (Önce Çevrimdışı) olarak bilinen bu yaklaşım, ağ eksikliğini kritik bir hatadan ziyade rutin bir duruma dönüştürerek arayüzün anında tepki vermesini ve kullanıcı verilerinin korunmasını sağlar.
İçindekiler
Neden çevrimdışı moda ihtiyaç var?
Çevrimdışı mod, bağlantı kaybı durumunda sadece bir "geçici çözüm" değil, üç temel sorunu çözen bir mimari desendir:
- Güvenilirlik. Uygulama, sinyalin dengesiz olduğu metroda, uçakta veya şehir dışında çalışmaya devam eder.
- Performans. Cihaz diskinden veri okumak, ağ üzerinden istek yapmaktan yüzlerce kat daha hızlıdır. Bu durum "takılmaları" ve yükleme simgelerini ortadan kaldırır.
- Trafik tasarrufu. Zaten önbellekte bulunan aynı resimleri veya metinleri tekrar tekrar yüklemeye gerek yoktur.
İki kavramı ayırt etmek önemlidir:
- Önbellekleme (Cache): Erişimi hızlandırmak için sık kullanılan kaynakların (resimler, stiller, son haberler) geçici olarak saklanması.
- Çevrimdışı Veriler (Offline Data): Kullanıcının etkileşime girebileceği (okuyabileceği, düzenleyebileceği, yeni kayıtlar oluşturabileceği) veritabanının tam bir yerel kopyası.
Veriler ağ olmadan nerede saklanır?
Depolama seçimi, veri türüne ve platforma (iOS, Android veya Web) bağlıdır.
Yerel veritabanları
Yapılandırılmış veriler (görev listeleri, kişiler, mesajlar) için cihaz üzerinde çalışan tam teşekküllü VTYS'ler kullanılır:
- SQLite: Mobil platformlar için fiili standarttır. Güvenilirdir ve karmaşık SQL sorgularını destekler.
- Room (Android) / Core Data (iOS): SQLite ve Apple'ın kendi teknolojileri üzerine inşa edilen, verilerle çalışmayı kolaylaştıran katmanlardır.
- Realm: Hızı ve basit senkronizasyonu nedeniyle sıklıkla tercih edilen nesne tabanlı bir veritabanıdır.
Önbellek ve dosya sistemi
Medya dosyaları ve statik içerikler için:
- Dosya Sistemi: Resimlerin, videoların ve belgelerin uygulama klasörlerine doğrudan kaydedilmesi.
- IndexedDB / LocalStorage: Web uygulamaları ve PWA'lar (Progressive Web Apps) için ana depolama alanlarıdır. IndexedDB, büyük miktarda yapılandırılmış verinin doğrudan tarayıcıda saklanmasına olanak tanır.
Service Workers (Web için)
Web geliştirmede, sayfadan bağımsız olarak arka planda çalışan komut dosyaları olan servis worker'lar kilit rol oynar. Bunlar ağ isteklerini yakalar ve internet tamamen kesilmiş olsa bile önbellekten sayfaların kaydedilmiş versiyonlarını sunabilir.
Senkronizasyon nasıl gerçekleşir?
Çevrimdışı mimarinin en zor kısmı, bağlantının yeniden kurulduğu andır. Cihazdaki ve sunucudaki veriler birbirinden bağımsız olarak değişmiş olabilir. Senkronizasyon süreci genellikle aşağıdaki şemaya göre yapılır:
- Değişikliklerin yerel kaydı. Kullanıcının tüm eylemleri "pending" (gönderilmeyi bekliyor) bayrağıyla işaretlenir ve yerel veritabanına kaydedilir.
- Görev kuyruğu (Queue). Uygulama işlem kuyruğu oluşturur (örneğin,
CREATE_POST,UPDATE_PROFILE). - Arka plan ağ kontrolü. Özel bir modül bağlantı durumunu izler.
- Paketlerin gönderilmesi. Ağ mevcut olduğunda, uygulama kuyruktaki istekleri tek tek veya paketler halinde göndermeye başlar.
- Onay (Ack). Sunucu başarılı kaydetmeyi onaylar ve uygulama yerel kayıttaki "pending" bayrağını kaldırır.
Tekrarlanan gönderme denemelerinde üstel geri çekilme (exponential backoff) kullanın. İlk senkronizasyon denemesi başarısız olursa, ikincisini 2 saniye sonra, ardından 4, 8 saniye vb. şeklinde yaparak sunucuyu aşırı yüklemekten kaçının ve pil tasarrufu sağlayın.
Veri çakışmalarının çözümü
Kullanıcı internetsiz olarak telefonundaki bir notu düzenlerken, aynı zamanda meslektaşı web sürümü üzerinden aynı notu değiştirirse ne olur? Sürüm çakışması ortaya çıkar.
Çakışmaları çözmek için birkaç strateji vardır:
| Strateji | Çalışma Prensibi | Nerelerde Uygulanır |
|---|---|---|
| Last Write Wins (LWW) | Daha geç zaman damgasına sahip olan değişiklik kazanır. | Basit uygulamalar, sohbetler, sosyal ağlar. |
| Client Wins | Kullanıcı cihazındaki veriler her zaman sunucudakilerin üzerine yazar. | Taslak editörleri, kişisel ayarlar. |
| Server Wins | Yerel değişiklikler sunucu sürümü lehine reddedilir. | Finansal işlemler, kritik veriler. |
| Birleştirme (Merge) | Sistem, alanlara göre değişiklikleri birleştirmeye çalışır (örneğin, farklı metin paragrafları). | Ortak belge editörleri (Google Docs). |
| CRDT | Çakışma olmadan sonuçların yakınsamasını matematiksel olarak garanti eden özel veri yapılarının kullanılması. | Karmaşık işbirlikçi araçlar. |
Çoğu mobil uygulama için karmaşıklık ve güvenilirlik arasındaki optimal denge, ciddi tutarsızlıklar durumunda kullanıcının manuel müdahalesiyle desteklenen LWW stratejisidir.
Çevrimdışı modu uygularken yapılan hatalar
Deneyimli geliştiriciler bile çevrimdışı mantığı tasarlarken tipik hatalar yapar:
- Durum göstergesinin olmaması. Kullanıcı, notunun kaydedilip kaydedilmediğini veya kuyrukta bekleyip beklemediğini anlamaz. Her zaman "senkronize ediliyor..." veya "çevrimdışı" simgesini gösterin.
- "Kör" senkronizasyon. Ağ geldiğinde tüm verileri hemen göndermeye çalışmak zaman aşımına ve pilin tükenmesine neden olabilir. Sadece öncelikli verileri senkronize edin.
- Eski verilerin göz ardı edilmesi. Önbellek gigabaytlara kadar büyüyebilir. Temizleme politikaları (TTL - time to live) veya depolama alanı limitleri uygulanmalıdır.
- Sunucu hatalarının işlenmemesi. Senkronizasyon sırasında sunucu 400 (Bad Request) hatası döndürürse, kayıt sonsuza kadar kuyrukta beklememelidir. Hatalı olarak işaretlenmeli ve kullanıcı bilgilendirilmelidir.
Sıkça Sorulan Sorular (SSS)
Her uygulama internetsiz çalışabilir mi? Hayır. Sunucuda anlık veri işlemesi gerektiren uygulamalar (çevrimiçi oyunlar, görüntülü görüşmeler, borsa işlemleri) tam çevrimdışı modda çalışamaz. Ancak arayüzü ve önceki durumları önbelleğe alabilirler.
Verileri yerel olarak saklamak güvenli midir?
Yerel veritabanları şifrelenmelidir (örneğin, SQLCipher veya iOS/Android Keychain'in yerleşik araçları kullanılarak). Yetkilendirme token'larını ve kişisel verileri LocalStorage veya basit dosyalarda açık şekilde saklamak kabul edilemez.
Neden web siteleri yerel uygulamalara göre çevrimdışı daha kötü çalışır? Web tarayıcıları, bir site için ayrılan disk alanı miktarı konusunda katı sınırlamalara sahiptir ve cihazda yer kalmadığında önbelleği keyfi olarak temizleyebilir. Yerel uygulamalar dosya sistemine daha öngörülebilir bir erişime sahiptir.
PWA nedir ve bunun çevrimdışı ile ilgisi nedir? PWA (Progressive Web App), bir uygulama gibi davranan bir web sitesidir. Service Workers teknolojisi sayesinde PWA'lar, site kabuğunu ve içeriği önceden önbelleğe alarak kullanıcının ağ bağlantısı olmasa bile siteyi açmasına ve materyalleri okumasına olanak tanır.