E-Bülten’e kayıt olun

E-Posta:



PHP ve Celery ile Asenkron Görevler

PHP ve Celery ile Asenkron Görevler

Bir web sayfasının yüklenmesi için gerçekten beklemeniz gerektiği zamanları hatırlıyor musunuz? Yıllar öncesinden bahsediyorum elbette. Sayfanızın yavaş çalışıyor olması gerçeğinin, veri aktarım hızının yanında ihmal edilebildiği yıllardan… Şükür, o günler geride kaldı. Peki, bant genişliğinin ve veri aktarım hızlarının yüksek olduğu günümüzde yavaş çalışan sayfalarınız için ne yapabilirsiniz? Panik yapmayın, yalnız değilsiniz.

Web sayfaları, muhtemelen adreslerin başında dikkatinizi çekmiş olan HTTP olarak kısaltılan Hypertext Transfer Protocol’ü ile aktarılırlar. Sizin cihazınızın sayfadan (web sunucusundan) bir içerik istemesi ve sunucunun bu isteği işleyip yanıtlaması esasına dayanır.

Kulağa çok basit geliyor değil mi? Bunun sebebi protokolün gerçekten de bu kadar da basit olması. Zorlaştığı kısım, bu operasyonun başarımını arttırmak istediğinizde ortaya çıkıyor çünkü istemci, gönderdiği istek sunucu tarafından işlenip yanıt gönderilene dek beklemek zorunda. Bu “işlem”, herhangi bir şey olabilir. Hikâyenizde bir fotoğraf paylaşmak, e-posta göndermek, bankanızın internet şubesinde para transferi gerçekleştirmek veya bu transferin dekontunu PDF olarak indirmek gibi internet üzerinde sürekli yaptığımız işlemler… Verdiğim örneklerin ortak özelliği, yanıt verebilmek için sunucunun başka bir yazılım veya programı bekleyecek olması. Bu bekleme yüklediğiniz fotoğrafın içerik dağıtma ağı (CDN) üzerinde aktarılması da olabilir, alıcı e-posta sunucusuyla yapılan haberleşme de olabilir, kısa mesaj (SMS) göndermek için beklenen operatör de olabilir, transfer işlemine ait bilgilerle PDF belgesini oluşturan yazılım da olabilir…

Uzun süren işlemler için sunucunun cevap vermesini geciktirmemek için biz (web uygulama geliştirenler) ne yapıyoruz? İsteği alıp, uzun sürecek işi bir kuyruğa atıp, bitmesini beklemeden sayfanın görüntülenmesini sağlıyoruz, görünmez bir sıra numarasıyla birlikte. Daha sonra sayfa içerisinden tekrar minik istekler yaparak sıranın gelip gelmediğini, dolayısıyla uzun süren işlemin bitip bitmediğini soruyoruz. Böylece hesaplama gücü gerektiren veya başka servis sağlayıcılara bağımlı olan süreçlere takılmadan kullanıcılarımıza hızlı bir web deneyimi sunabiliyoruz.

Artistanbul’u tanıyanların, tanımasa bile blog‘umuzu yakından takip edenlerin bildiği üzere Python programlama dilini ve Django web uygulama çatısını çok seviyor, uygun olan tüm projelerimizde tercih ediyoruz. Python camiasında, bir kuyruktan asenkron olarak görev çalıştırmak dendiğinde herkesin aklına ilk gelecek olan araç Celery, bizim de vazgeçilmezlerimizin arasında yer alıyor. Farklı mesaj kuyruklarıyla, farklı projelerde defalarca kullanmış, rapor oluşturmaktan e-posta/SMS göndermeye kadar çeşitli işlerimizi emanet etmişizdir.

 

Peki ya PHP?

Yakın bir zamanda, Django projemizdeki asenkron işleri, farklı bir programlama dili (PHP) ile yazılmış projemizden kuyruğa eklememiz gerekti. “Böyle bir şey olabilir mi ya?” diye düşünüyorsanız, hemen söyleyeyim, bu konuda yardımcı olabilecek kütüphaneler internette mevcut. Fakat elbette, gidin o kütüphaneleri bulup kullanın demek için yazmıyorum bu yazıyı. Bu PHP kütüphaneleri Celery’nin 3.x sürümlerine göre hazırlanmışken biz 4.x sürümlerini kullanıyoruz. Bu kütüphanelerden bir tanesi, resmi olarak desteklenmese de Celery tarafından da öneriliyor ve 4.x sürümlerine olan uyumluluk üzerinde çalışmaya başlamışlar, ancak bu çalışmalar henüz sonuçlanmamış. Bu noktada, mevcut çalışmayı alıp kendi ihtiyaçlarımız doğrultusunda sadeleştirerek aşağıdaki sınıfı elde ettik. Eğer ihtiyacınız varsa siz de kullanabilir, yorum ve değişiklik taleplerinizi iletebilirsiniz.

Onur Güzel

Akın masasına otel resepsiyonlarındaki zillerden bir tane aldı, canı sıkıldığında zile basarak üç oda öteden Onur'u yanına çağırıyor. Başka bir ülkede olsa bize mobbing'den dava açardı. Onur galiba bir gün bize çok pis dalacak, ona hazırlanıyor...

1 Yorum

Yorum Yaz

Yorum
İsim
E-Posta
Website