Dağıtımdan sonra etkin bir Cloudflare Durable Object, hazırda bekleme durumuna geçene veya belirlenen süre dolana kadar mevcut kod sürümünde çalışmayı sürdürebilir. Cloudflare, 30 Ekim’de ertelenmiş güncellemeyi varsayılan yaptı ve en fazla beş dakikalık bir gecikme belirledi. Geliştiriciler açısından bu, dağıtım sırasında çalışan nesnelerin davranışını değiştiriyor: güncellemenin onları hemen kesintiye uğratması gerekmiyor ve desteklenen WebSocket bağlantıları yeni sürüme geçerken korunabiliyor.

Dağıtım sırasında ne oluyor?
Durable Objects, kalıcı kimliğe ve duruma sahip, adreslenebilir nesnelerdir. Cloudflare bunları diğer kullanımların yanı sıra istemcileri koordine etmek, uzun süreli görevleri yürütmek ve WebSocket oturumlarını yönetmek için kullanır. Tek bir nesne için aynı anda yalnızca bir kod sürümü çalışır. Bu nedenle etkin bir örneği hemen değiştirmek, örneğin sıfırlanmasına ve işin ya da bağlantıların kesilmesine yol açabilir.
Artık varsayılan senaryo, geçişin ertelenmesidir. Dağıtımın ardından etkin nesne, eski sürümle istekleri karşılamayı sürdürür. Önce hazırda bekleme durumuna geçerse sonraki istekte yeni sürüm başlatılır. Beş dakika dolduğunda nesne hâlâ etkinse sıfırlanır ve yeni sürümü kullanmaya başlar. Worker dağıtımı ise ayrı olarak tamamlanır: gecikme, hâlihazırda etkin olan nesnenin yeni kodu çalıştırmaya başlayacağı anı etkiler.
Kimler için yararlı?
Bu değişiklik, tek bir nesnenin istekler arasında çalışmayı sürdürdüğü hizmetler için önemlidir: örneğin uzun süreli bir oturum, birden çok istemcinin koordinasyonu veya WebSocket bağlantısı. Ertelenmiş geçiş, nesnenin güncellenmeden önce mevcut etkinliğini doğal biçimde tamamlaması ya da uykuya geçmesi için bir zaman aralığı yaratır. WebSocket için Cloudflare ayrı bir koşul belirtiyor: Hibernation API kullanan bağlantılar, nesne hazırda beklemeden sonra yeni kodu devraldığında bağlı kalıyor.
Ekipler için pratik sonuç, hangi etkin nesnelerin birkaç dakikadan uzun süre meşgul kalabileceğini belirlemek ve hangi WebSocket API’sinin kullanıldığını kontrol etmektir. Uygulamanın yumuşak bir geçiş yapma şansı bulup bulamayacağı ya da zorunlu güncellemede bağlantının kesilip kesilmeyeceği buna bağlıdır.
Beş dakika bir fırsat aralığıdır, garanti değil
Cloudflare, ertelenmiş güncellemeyi en iyi çaba yaklaşımıyla sunduğunu belirtiyor: Örneğin çalışma zamanı güncellendiğinde nesne daha erken sıfırlanabilir. Nesne azami gecikme süresinin sonuna kadar hazırda beklemeye geçmezse platform, sıfırlama yoluyla yeni sürümü uygular. Bu nedenle önemli durum verileri kalıcı depolamada saklanmalı ve işlemler yeniden başlatılabilecek şekilde tasarlanmalıdır. Cloudflare belgeleri, dağıtımlardan sonra korunması gereken durumun saklanmasını öneriyor; etkin örneğin belleğine güvenilmemeli.
Ekipler, Durable Objects yapılandırmasında bu davranışı değiştirebilir: anında güncelleme modunu belirleyebilir veya ertelenmiş geçiş için başka bir süre seçebilir. Yeni sürümün hemen devreye girmesi gerektiğinde, örneğin acil bir düzeltmede, anında mod işe yarar. Daha uzun bir gecikme nesnelere ek süre tanıyabilir; ancak bazı örneklerin eski sürümle çalıştığı dönemi de uzatır.
Bir sonraki dağıtımdan önce neleri kontrol etmeli?
Worker ile Durable Object arasındaki isteklerin, farklı sürümlerde çalışabilecekleri süre boyunca uyumlu olduğundan emin olun. Kritik durumun yalnızca bellekte değil, depolamada tutulduğunu doğrulayın. WebSocket için uygulamanın Hibernation API kullanıp kullanmadığını belirleyin: güncelleme uygulandığında olağan bağlantılar kesilebilir. Dağıtımın hemen geçiş yapması gerekiyorsa yeni varsayılan ayara güvenmek yerine modun açıkça yapılandırıldığını kontrol edin.
Özetle Cloudflare, dağıtımlardaki varsayılan dengeyi değiştirdi: etkin nesnelere doğal bir geçiş için sınırlı süre tanınıyor, ekiplerse bir ayarla güncellemeyi hızlandırma seçeneğini koruyor. Geliştiriciler için en yararlı adım, bir sonraki dağıtımdan önce eski ve yeni sürümlerin uyumluluğunu, durum verilerinin korunmasını ve WebSocket türünü kontrol etmek.