Arka plan işleri geliştirme önerileri

Bu Azure İyi Tasarlanmış Çerçeve Güvenilirliği denetim listesi önerisi için geçerlidir:

RE:07 Kendi kendini koruma ve kendini iyileştirici önlemler uygulayarak iş yükünüzün dayanıklılığını ve kurtarılabilirliğini güçlendirin. Bileşen hatalarını ve geçici hataları işlemek için altyapı tabanlı güvenilirlik desenlerini ve yazılım tabanlı tasarım desenlerini kullanarak çözüme yönelik özellikler oluşturun. Çözüm bileşeni hatalarını algılamak ve iş yükü tam veya azaltılmış işlevsellikte çalışmaya devam ederken düzeltme eylemini otomatik olarak başlatmak için sistemde özellikler oluşturun.

İlgili kılavuzlar: Geçici hatalar | Kendi kendini koruma

Bu kılavuzda arka plan işleri geliştirmeye yönelik öneriler açıklanmaktadır. Arka plan işleri, kullanıcı etkileşimi gerekmeden otomatik olarak çalıştırılır. Birçok uygulama, kullanıcı arabiriminden bağımsız olarak çalışan arka plan işleri gerektirir.

Arka plan işlerine örnek olarak toplu işler, yoğun işleme görevleri ve iş akışları gibi uzun süre çalışan işlemler verilebilir. Uygulama işi başlatır ve kullanıcılardan gelen etkileşimli istekleri işler. Örneğin, bir uygulamanın kullanıcıların karşıya yüklediği görüntülerin küçük resimlerini oluşturması gerekiyorsa, küçük resim oluşturmak ve depolama alanına kaydetmek için bir arka plan işi gerçekleştirilebilir. Kullanıcının işlemin tamamlanmasını beklemesi gerekmez. Başka bir örnek olarak, müşteri siparişi işleyen bir arka plan iş akışı başlatan bir sipariş verir. Arka plan işi çalışırken müşteri web uygulamasına göz atmaya devam eder. Arka plan işi tamamlandıktan sonra depolanan sipariş verilerini güncelleştirir ve siparişi onaylamak için müşteriye bir e-posta gönderir.

Arka plan işleri, uygulama kullanıcı arabirimindeki yükü en aza indirmeye yardımcı olur ve bu da kullanılabilirliği artırır ve etkileşimli yanıt süresini azaltır.

Temel tasarım stratejileri

Arka plan işi olarak hangi görevin atandığını seçmek için, görevin kullanıcı etkileşimi olmadan çalışıp çalışmadığını ve kullanıcı arabiriminin görevin tamamlanmasını beklemesi gerekip gerekmediğini göz önünde bulundurun. Kullanıcının veya kullanıcı arabiriminin çalışırken beklemesini gerektiren görevler genellikle uygun arka plan işleri değildir.

Arka plan işleri gereksinimini değerlendirme

Arka plan işlerine bazı örnekler şunlardır:

  • Matematik hesaplamaları veya yapısal model analizi gibi CPU yoğunluklu işler.

  • Bir dizi depolama işlemi çalıştırma veya dosyaları dizine alma gibi G/Ç yoğunluklu işler.

  • Gecelik veri güncelleştirmeleri veya zamanlanmış işlemeler gibi toplu işler.

  • Sipariş karşılama veya sağlama hizmetleri ve sistemleri gibi uzun süre çalışan iş akışları.

  • Görevi işlenmek üzere daha güvenli bir konuma aktaran hassas veri işleme. Örneğin, bir web uygulamasındaki hassas verileri işlemek istemeyebilirsiniz. Bunun yerine, verileri korumalı depolamaya erişimi olan yalıtılmış bir arka plan işlemine aktarmak için Ağ Geçidi Denetleyicisi deseni gibi bir desen kullanabilirsiniz.

Doğru tetikleyicileri seçme

Arka plan işlerini şu şekilde başlatın:

  • Olay temelli tetikleyiciler: Genellikle bir kullanıcı eylemi veya iş akışındaki bir adım olan bir olay görevi tetikler.

  • Zamanlama temelli tetikleyiciler: Zamanlayıcıyı temel alan bir zamanlama görevi çağırır. İş, yinelenen olarak veya tek bir çalıştırma için zamanlanabilir.

Olay temelli tetikleyiciler

Eylem, arka plan görevini başlatan olay temelli bir çağrı tetikler. Olay temelli tetikleyicilere örnek olarak şunlar verilebilir:

  • Kullanıcı arabirimi veya farklı bir iş, Web-Queue-Worker mimari stilinde açıklandığı gibi bir iletiyi kuyruğa yerleştirir. İleti, sipariş veren bir müşteri gibi daha önce gerçekleştirilen bir eylem hakkındaki verileri içerir. Arka plan işi bu kuyruğu izler ve yeni bir iletinin gelişini algılar. İletiyi okur ve arka plan işinin girişi olarak iletinin verilerini kullanır. Bu desene zaman uyumsuz ileti tabanlı iletişim adı verilir.

  • Kullanıcı arabirimi veya farklı bir iş, depolama alanında bulunan bir değeri kaydeder veya güncelleştirir. Arka plan işi depolamayı izler ve değişiklikleri algılar. Verileri okur ve arka plan işinin girişi olarak kullanır.

  • Kullanıcı arabirimi veya farklı bir iş, HTTPS URI'si veya web hizmeti olarak kullanıma sunulan BIR API gibi bir uç noktaya istekte bulunur. İsteğin bir parçası olarak, kullanıcı arabirimi veya iş arka plan görevinin gerektirdiği verileri aktarır. Uç nokta veya web hizmeti, girdisi olarak verileri kullanan arka plan görevini çağırır.

Olay odaklı çağırmaya uygun diğer görevlere örnek olarak görüntü işleme, iş akışları, uzak hizmetlere bilgi gönderme, e-posta iletileri gönderme ve çok kiracılı uygulamalarda yeni kullanıcılar sağlama verilebilir.

Zamanlama temelli tetikleyiciler

Zamanlayıcı, arka plan görevini başlatan zamanlama temelli bir çağrı tetikler. Zamanlama temelli tetikleyicilere örnek olarak şunlar verilebilir:

  • Uygulama içinde veya uygulamanın işletim sisteminin bir parçası olarak yerel olarak çalışan bir zamanlayıcı düzenli olarak bir arka plan görevi çağırır.

  • Azure Logic Apps gibi farklı bir uygulamada çalışan zamanlayıcı düzenli olarak bir API'ye veya web hizmetine istek gönderir. API veya web hizmeti, arka plan görevini çağırır.

  • Ayrı bir işlem veya uygulama, bir gecikmeden sonra veya belirli bir zamanda arka plan görevini çağıran bir zamanlayıcı başlatır.

Zamanlama temelli çağırmaya uygun diğer görevlere örnek olarak toplu işlem yordamları (müşterilerin son davranışlarına göre ilgili ürün listelerini güncelleştirme gibi), rutin veri işleme görevleri (dizinleri güncelleştirme veya birikmiş sonuçlar oluşturma gibi), günlük raporlar için veri analizi, veri saklama temizleme ve veri tutarlılığı denetimleri verilebilir.

Tek örnek olarak çalışması gereken zamanlama temelli bir görev kullanıyorsanız, aşağıdaki noktaları gözden geçirin:

  • Windows zamanlanmış görevlerini kullanan bir sanal makine (VM) gibi zamanlayıcıyı çalıştıran işlem örneği ölçeklendirilirse, zamanlayıcının birden çok örneğini çalıştırmış olursunuz. Zamanlayıcının birden çok örneği, görevin birden çok örneğini başlatabilir. Daha fazla bilgi için bkz . Yazılım sistemlerinde idempotent ne anlama gelir?

  • Görevler zamanlayıcı olayları arasındaki süreden daha uzun çalışıyorsa, zamanlayıcı önceki görev çalışırken görevin başka bir örneğini başlatabilir.

verileri iş yüküne döndürme

Arka plan işleri, kullanıcı arabiriminden veya arka plan işini çağıran işlemden ayrı bir işlemde veya hatta ayrı bir konumda zaman uyumsuz olarak çalışır. İdeal olarak, arka plan işleri yangın ve unutma işlemleridir. Çalışma zamanı ilerleme durumunun kullanıcı arabirimi veya arama işlemi üzerinde bir etkisi yoktur; bu da çağırma işleminin görevlerin tamamlanmasını beklemediği anlamına gelir. Kullanıcı arabirimi ve arama işlemi görevin ne zaman bittiğini algılayamaz.

İlerleme veya tamamlanma durumunu belirtmek için arama göreviyle iletişim kurmak için bir arka plan görevine ihtiyacınız varsa, bir mekanizma uygulamanız gerekir. Bazı örnekler şunlardır:

  • Kullanıcı arabirimi veya çağıran görevi tarafından erişilebilen depolama alanına bu değeri izleyebilen veya denetleyebilen bir durum göstergesi değeri yazın. Arka plan görevinin çağırana döndürdüğü diğer veriler aynı depolama alanına yerleştirilebilir.

  • Kullanıcı arabiriminin veya çağıranın izlediği bir yanıt kuyruğu oluşturun. Arka plan görevi kuyruğa durumu belirten iletiler gönderebilir. Arka plan görevinin çağırana döndürdüğü veriler iletilere yerleştirilebilir. Azure Service Bus için ve CorrelationId özelliklerini kullanarak ReplyTo bu özelliği uygulayın.

  • Durum bilgilerini almak için, kullanıcı arabirimi veya çağıranın erişebildiği arka plan görevinden bir API veya uç noktayı kullanıma sunun. Yanıt, arka plan görevinin çağırana döndürdüğü verileri içerebilir.

  • Önceden tanımlanmış noktalarda veya tamamlandığında durumu belirtmek için bir API aracılığıyla kullanıcı arabirimine veya çağıranı geri çağırmak için arka plan görevini yapılandırın. Yerel olarak tetiklenen olayları veya yayımlama ve abone olma mekanizmasını kullanabilirsiniz. İstek veya olay yükü, arka plan görevinin çağırana döndürdüğü verileri içerebilir.

Arka plan işlerini bölümleme

Var olan bir işlem örneğine arka plan işleri eklerseniz, bu değişikliklerin işlem örneğinin kalite özniteliklerini ve arka plan işini nasıl etkilediğini göz önünde bulundurun. Görevleri mevcut işlem örneğiyle birlikte mi yoksa farklı bir işlem örneğine mi ayıracaklarına karar vermek için şu faktörleri göz önünde bulundurun:

  • Kullanılabilirlik: Arka plan görevleri, özellikle kullanıcı arabirimi ve doğrudan kullanıcı etkileşimi içeren bölümler gibi uygulamanın diğer bölümleriyle aynı kullanılabilirlik düzeyine ihtiyaç duymayabilir. İşlemler kuyruğa alınabildiğinden arka plan görevleri gecikme süresine, yeniden denenen bağlantı hatalarına ve kullanılabilirliği etkileyen diğer faktörlere karşı daha yüksek toleransa sahip olabilir. Ancak, kuyrukları engelleyebilecek ve uygulamanın tamamını etkileyebilecek yedeklenen istekleri önlemek için yeterli kapasite olmalıdır.

  • Ölçeklenebilirlik: Arka plan görevlerinin büyük olasılıkla kullanıcı arabirimine ve uygulamanın etkileşimli bölümlerine kıyasla farklı ölçeklenebilirlik gereksinimleri vardır. Talep artışlarını karşılamak için kullanıcı arabirimini ölçeklendirmeniz gerekebilir. Bekleyen arka plan görevleri daha az meşgul zamanlarda ve daha az işlem örneğiyle çalıştırılabilir.

  • Dayanıklılık: Yalnızca arka plan görevlerini barındıran bir işlem örneği başarısız olursa, uygulamanın tamamını önemli ölçüde etkilemeyebilir. Bu görevler için istekler kuyruğa alınabilir veya görev kullanılabilir olana kadar ertelenebilir. İşlem örneği veya görevleri uygun bir aralık içinde yeniden başlatılabiliyorsa, uygulama kullanıcılarını etkilemeyebilir.

  • Güvenlik: Arka plan görevlerinin kullanıcı arabirimine veya uygulamanın diğer bölümlerine göre farklı güvenlik gereksinimleri veya kısıtlamaları olabilir. Görevler için farklı bir güvenlik ortamı belirtmek için ayrı bir işlem örneği kullanın. Güvenlik ve ayırmayı en üst düzeye çıkarmak için, arka plan işlem örneklerini kullanıcı arabiriminden yalıtmak için Gatekeeper gibi desenleri de kullanabilirsiniz.

  • Performans: Görevin performans gereksinimleriyle özel olarak eşleşen arka plan görevleri için işlem örneği türünü seçin. Görevler kullanıcı arabirimiyle aynı işleme özelliklerine ihtiyaç duymazsa daha düşük maliyetli bir işlem seçeneği kullanabilirsiniz. Görevler daha fazla kapasite ve kaynak gerektiriyorsa daha büyük bir örnek de kullanabilirsiniz.

  • Yönetilebilirlik: Arka plan görevleri, ana uygulama koduna veya kullanıcı arabirimine kıyasla farklı bir geliştirme ve dağıtım ritmine sahip olabilir. Güncelleştirmeleri ve sürüm oluşturmayı basitleştirmek için arka plan görevlerini ayrı bir işlem örneğine dağıtın.

  • Maliyet: Arka plan görevlerini çalıştırmak için işlem örnekleri eklerseniz barındırma maliyetleri artar. Daha fazla kapasite ve ek maliyetler arasındaki dengeyi dikkatlice göz önünde bulundurun.

Daha fazla bilgi için bkz . Lider Seçimi düzeni ve Rakip Tüketiciler düzeni.

Kaynak çakışmasını önleme

Arka plan işinin birden çok örneğiniz varsa, bunlar veritabanları ve depolama gibi kaynaklara ve hizmetlere erişim için rekabet edebilir. Bu eşzamanlı erişim kaynak çekişmesiyle sonuçlanabilir ve bu da hizmet kullanılabilirliği çakışmasına neden olabilir ve depolama alanındaki verilerin bütünlüğüne zarar verebilir. Kötümser kilitleme yaklaşımını kullanarak kaynak çekişmesi sorununu çözün. Bu yaklaşım, bir görevin rakip örneklerinin bir hizmete eşzamanlı olarak erişmesini veya verileri bozmasını engeller.

Çakışmaları çözmek için bir diğer yaklaşım da arka plan görevlerini tekil olarak tanımlamaktır; böylece yalnızca bir örnek çalışır. Ancak bu yaklaşım, birden çok örnekli yapılandırmanın sağladığı güvenilirlik ve performans avantajlarını ortadan kaldırır. Bu dezavantaj özellikle kullanıcı arabirimi birden fazla arka plan görevini meşgul tutmak için yeterli çalışma sağladığında geçerlidir.

Arka plan görevinin otomatik olarak yeniden başlatabileceğinden ve talepteki zirveleri işlemek için yeterli kapasiteye sahip olduğundan emin olun. Yeterli kaynak içeren bir işlem örneği ayırın, talep azaldığında çalıştırılacak istekleri depolayan bir kuyruğa alma mekanizması uygulayın veya bu tekniklerin bir bileşimini kullanın.

Birden çok görevi düzenleme

Arka plan görevleri karmaşık olabilir ve birden çok görev çalıştırılmasını gerektirebilir. Bu senaryolarda, görevi birden çok tüketicinin çalıştırabileceği daha küçük ayrı adımlara veya alt görevlere bölmek yaygın bir durumdur. Çok adımlı işler daha verimli ve daha esnek olur çünkü tek tek adımlar genellikle birden çok işte yeniden kullanılabilir. Adımların sırasını eklemek, kaldırmak veya değiştirmek de kolaydır.

Birden çok görev ve adımı koordine etmek zor olabilir, ancak çözümünüzde yol gösterecek üç yaygın desen vardır:

  • Görevi birden çok yeniden kullanılabilir adıma ayrıştırma. Bir uygulamanın işlediği bilgiler üzerinde farklı karmaşıklıkta çeşitli görevleri gerçekleştirmesi gerekebilir. Böyle bir uygulamayı uygulamaya yönelik basit ama esnek olmayan bir yaklaşım, bu işlemeyi monolitik bir modül olarak gerçekleştirmektir. Ancak bu yaklaşım büyük olasılıkla kodu yeniden düzenleme, iyileştirme veya uygulama başka bir yerde aynı işlemenin parçalarını gerektiriyorsa yeniden kullanma fırsatlarını azaltır. Daha fazla bilgi için Kanallar ve Filtreler düzenine bakın.

  • Görevin adımlarını düzenlemeyi yönetin. Bir uygulama, bazıları uzak hizmetleri çağırabilecek veya uzak kaynaklara erişebilen birçok adımdan oluşan görevler gerçekleştirebilir. Bazen tek tek adımlar birbirinden bağımsızdır, ancak görevi uygulayan uygulama mantığı tarafından düzenlenir. Daha fazla bilgi için bkz . Zamanlayıcı Aracısı Gözetmen düzeni.

  • Başarısız olan görev adımları için kurtarmayı yönetin. Adımlardan biri veya daha fazlası başarısız olursa, bir uygulamanın bir dizi adımın gerçekleştirdiği ve sonunda tutarlı bir işlemi tanımlayan çalışmasını geri almaları gerekebilir. Daha fazla bilgi için bkz . Telafi İşlemi düzeni.

İşleri dayanıklı hale getirme

Uygulama için güvenilir hizmetler sağlamak için dayanıklı arka plan görevleri oluşturun. Arka plan görevlerini planlayıp tasarlarken aşağıdaki noktaları göz önünde bulundurun:

  • Arka plan görevlerinin verileri bozmadan veya uygulamaya tutarsızlık getirmeden yeniden başlatmaları düzgün bir şekilde işlemesi gerekir. Uzun süre çalışan veya çok adımlı görevler için denetim noktalarını kullanmayı göz önünde bulundurun. İşlerin durumunu kalıcı depolama alanına veya kuyruktaki iletiler olarak kaydetmek için denetim noktalarını kullanın. Örneğin, durum bilgilerini kuyruktaki bir iletide depolayabilir ve bu durum bilgilerini görev ilerleme durumuyla artımlı olarak güncelleştirebilirsiniz. Görev, baştan yeniden başlatmak yerine bilinen son denetim noktasından işlenebilir.

    Service Bus kuyrukları için bu amaçla ileti oturumlarını kullanın. İleti oturumları ile SetState ve GetState yöntemlerini kullanarak uygulama işleme durumunu kaydedin ve alın. Güvenilir çok adımlı işlemler ve iş akışları tasarlama hakkında daha fazla bilgi için bkz . Scheduler Aracı Gözetmen düzeni.

  • Arka plan görevleriyle iletişim kurmak üzere kuyrukları kullandığınızda kuyruklar, uygulamalar normalden yüksek bir yük altındayken görevlere gönderilen istekleri depolayan bir arabellek olarak görev yapabilir. Görevler daha az meşgul dönemlerde kullanıcı arabirimine yetişebilir ve yeniden başlatmalar kullanıcı arabirimini engellemez. Daha fazla bilgi için bkz . Kuyruk Tabanlı Yük Dengeleme düzeni. Bazı görevler diğerlerinden daha önemliyse, önce bu görevlerin çalıştığından emin olmak için Öncelik Sırası düzenini uygulamayı göz önünde bulundurun.

İletiler

sıra dışı gelen iletiler, sürekli hataya neden olan iletiler (zehirli iletiler) ve birden çok kez teslim edilen iletiler gibi tutarsızlıkları işlemek için iletiler tarafından başlatılan veya iletileri işleyen arka plan görevlerini yapılandırın. Aşağıdaki önerileri gözden geçirin:

  • Bazen iletilerin belirli bir sırada işlenmesi gerekir. Örneğin, mevcut veri değerine göre verileri değiştiren iletiler (örneğin, var olan bir değere değer ekleme). İletiler her zaman gönderildikleri sırayla gelmez. Ayrıca, bir arka plan görevinin farklı örnekleri, her örnekteki değişen yükler nedeniyle iletileri farklı bir sırada işleyebilecektir.

    Belirli bir sırada işlenmesi gereken iletiler için, arka plan görevlerinin iletileri doğru sırada işlemek için kullanabileceği bir sıra numarası, anahtar veya başka bir gösterge ekleyin. Service Bus için, doğru teslim sırasını garanti etmek için ileti oturumlarını kullanın. İleti sırasının önemli olmayacak şekilde tasarlanması daha verimlidir. Daha fazla bilgi için bkz . ileti sıralama ve zaman damgaları.

  • Genellikle arka plan görevi kuyruktaki iletilere göz atar ve bu da iletileri diğer ileti tüketicilerinden geçici olarak gizler. Görev iletiyi başarıyla işledikten sonra iletiyi siler. Bir arka plan görevi bir iletiyi işlerken başarısız olursa, göz atma zaman aşımı sona erdikten sonra bu ileti kuyrukta yeniden görünür. Görevin farklı bir örneği iletiyi işler veya özgün örneğin sonraki işlem döngüsü iletiyi işler.

    İleti sürekli olarak tüketicide bir hataya neden oluyorsa, kuyruk dolduğunda görevi, kuyruğu ve sonunda uygulamanın kendisini engeller. Zehirli iletileri algılamak ve kuyruktan kaldırmak çok önemlidir. Service Bus kullanıyorsanız, zehirli iletileri ilişkili bir teslim edilemeyen ileti kuyruğuna otomatik olarak veya el ile taşıyın.

  • Kuyruklar en az bir kez teslim mekanizmasıdır, ancak aynı iletiyi birden çok kez teslim edebilir. Bir arka plan görevi bir iletiyi işledikten sonra ancak kuyruktan silmeden önce başarısız olursa, ileti yeniden işlenmek üzere kullanılabilir.

    Arka plan görevleri bir kez etkili olmalıdır; başka bir deyişle görev aynı iletiyi birden çok kez işlediğinde uygulamanın verilerinde hataya veya tutarsızlığa neden olmaz. Bazı işlemler doğal olarak bir kez etkili olur; örneğin, depolanan bir değer belirli bir yeni değere ayarlanırsa. Ancak bazı işlemler tutarsızlıklara neden olur. Örneğin, depolanan değerin iletinin ilk gönderildiği zaman ile aynı olduğunu doğrulamadan mevcut bir depolanmış değere bir değer eklenirse. Yinelenen iletileri otomatik olarak kaldırmak için Service Bus kuyruklarını yapılandırın. Daha fazla bilgi için bkz . Etkili ileti işleme.

  • Azure Depolama kuyrukları ve Service Bus kuyrukları gibi bazı mesajlaşma sistemleri, kuyruktaki bir iletinin kaç kez okunduğunu gösteren bir dequeue count özelliğini destekler. Bu veriler, yinelenen iletileri ve zehirli iletileri işlemek için kullanışlıdır. Daha fazla bilgi için bkz . Zaman uyumsuz mesajlaşma primer ve Idempotency desenleri.

İşleri ölçeklenebilir hale getirme

Arka plan görevleri, sistem yük altındayken uygulamayı engellememeleri veya işlemi geciktirmemeleri için yeterli performans sunmalıdır. Genellikle arka plan görevlerini barındıran işlem örneklerini ölçeklendirdiğinizde performans artar. Arka plan görevlerini planlayıp tasarlarken, ölçeklenebilirlik ve performansla ilgili aşağıdaki noktaları göz önünde bulundurun:

  • Azure Sanal Makineler ve Azure Uygulaması Hizmeti'nin Web Apps özelliği dağıtımları barındırabilir. Hem ölçeği genişletme hem de daraltma için otomatik ölçeklendirmeyi destekler. Otomatik ölçeklendirme talebe ve yüke veya önceden tanımlanmış bir zamanlamaya göre belirlenir. Uygulamanın yeterli performans özelliklerine sahip olduğundan emin olmak ve çalışma zamanı maliyetlerini en aza indirmek için otomatik ölçeklendirmeyi kullanın.

  • Bazı arka plan görevleri, bir uygulamanın diğer bölümlerine kıyasla farklı bir performans özelliğine sahiptir, örneğin kullanıcı arabirimi veya veri erişim katmanı gibi bileşenler. Bu senaryoda, arka plan görevlerini ayrı bir işlem hizmetinde barındırarak kullanıcı arabirimi ve arka plan görevlerinin yükü yönetmek için bağımsız olarak ölçeklendirilmesini sağlayın. Birden çok arka plan görevinin önemli ölçüde farklı performans özellikleri varsa, bunları bölün ve her türü bağımsız olarak ölçeklendirin. Bu teknik çalışma zamanı maliyetlerini artırabilir.

  • Yük altında performans kaybını önlemek için, işlem zincirinin tek bir noktasının performans sorununa neden olmaması için depolama kuyruklarını ve diğer kaynakları ölçeklendirmeniz de gerekebilir. Depolamanın en yüksek aktarım hızı ve uygulamanın ve arka plan görevlerinin bağlı olduğu diğer hizmetler gibi diğer sınırlamaları göz önünde bulundurun.

  • Ölçeklendirme için arka plan görevleri tasarlama. Örneğin, arka plan görevleri iletileri izlemek veya uygun kuyruğa ileti göndermek için kullanılan depolama kuyruklarının sayısını dinamik olarak algılamalıdır.

  • Varsayılan olarak, bir Web İşi ilişkili Web Apps örneğiyle ölçeklendirilir. Ancak, bir Web İşinin yalnızca tek bir örnek olarak çalışmasını istiyorsanız, JSON verilerini { "is_singleton": true }içeren bir Settings.job dosyası oluşturabilirsiniz. Bu yöntem, ilişkili web uygulamasının birden çok örneği olsa bile Azure'ı Web İşinin yalnızca bir örneğini çalıştırmaya zorlar. Bu teknik, yalnızca tek bir örnek olarak çalışması gereken zamanlanmış işler için kullanışlıdır.

  • Arka plan işleri, özellikle arka plan görevleri birbirine veya diğer veri kaynaklarına bağlıysa veri eşitleme ve işlem koordinasyonu için zorluklar oluşturabilir. Örneğin, arka plan işleri veri tutarlılığı sorunlarını, yarış koşullarını, kilitlenmeleri veya zaman aşımlarını işleyebilir.

  • Arka plan görevlerinin sonuçları kullanıcıya sunulursa, arka plan işleri kullanıcı deneyimini etkileyebilir. Örneğin, arka plan işleri kullanıcının bildirim beklemesini, sayfayı yenilemesini veya görevin durumunu el ile denetlemesini gerektirebilir. Bu davranışlar, kullanıcı etkileşiminin karmaşıklığını artırabilir ve kullanıcı deneyimini olumsuz etkileyebilir.

Denge: Arka plan işleri sisteme daha fazla bileşen ve bağımlılık ekler ve bu da çözümün karmaşıklığını ve bakım maliyetlerini artırabilir. Örneğin, arka plan işleri ayrı bir kuyruk hizmeti, çalışan hizmeti, izleme hizmeti ve yeniden deneme mekanizması gerektirebilir.

Azure kolaylaştırma

Aşağıdaki bölümlerde arka plan işlerini barındırmak, çalıştırmak, yapılandırmak ve yönetmek için kullanabileceğiniz Azure hizmetleri açıklanmaktadır.

Konak ortamları

Arka plan görevlerini barındırabilen birkaç Azure platformu hizmeti vardır:

  • Web Apps ve Web İşleri: Bir web uygulamasında çalıştırabileceğiniz farklı betikleri veya programları temel alan özel işleri çalıştırmak için App Service'in Web İşleri özelliğini kullanın.

  • Azure İşlevleri: Uzun süre çalışmayan arka plan işleri için işlev uygulamalarını kullanın. İş yükünüzü az kullanılan bir App Service planında barındırdığınızda işlev uygulamalarını da kullanabilirsiniz.

  • Sanal Makineler: Windows hizmetiniz varsa veya Windows Görev Zamanlayıcı'yı kullanmak istiyorsanız, arka plan görevlerinizi ayrılmış bir VM'de barındırabilirsiniz.

  • Azure Batch: Batch, işlem yoğunluklu çalışmayı yönetilen bir VM koleksiyonunda çalışacak şekilde zamanlamak için kullanabileceğiniz bir platform hizmetidir. İşlem kaynaklarını otomatik olarak ölçeklendirebilir.

  • Azure Kubernetes Service (AKS): AKS, Azure'da Kubernetes için yönetilen bir barındırma ortamı sağlar.

  • Azure Container Apps: Container Apps ile kapsayıcıları temel alan sunucusuz mikro hizmetler oluşturabilirsiniz.

Aşağıdaki bölümlerde, sizin için en iyi seçeneği belirlemenize yardımcı olmak için bu seçeneklerin her biri için dikkat edilmesi gereken noktalar sağlanır.

Web Uygulamaları ve Web İşleri

Bir web uygulamasında özel işleri arka plan işleri olarak çalıştırmak için Web İşleri özelliğini kullanabilirsiniz. Web İşi, web uygulamanız bağlamında sürekli bir işlem olarak çalışır. Web İşi, Logic Apps'ten gelen bir tetikleyici olayına veya depolama bloblarındaki veya ileti kuyruklarındaki değişiklikler gibi dış faktörlere yanıt olarak da çalıştırılabilir. Web İşleri isteğe bağlı olarak başlatılabilir ve durdurulabilir ve düzgün bir şekilde kapatılabilir. Sürekli çalışan bir Web İşi başarısız olursa otomatik olarak yeniden başlatılır. Yeniden deneme ve hata eylemlerini yapılandırabilirsiniz.

Bir Web İşini yapılandırırken:

  • İşin olay temelli bir tetikleyiciye yanıt vermesini istiyorsanız, sürekli çalıştırılacak şekilde yapılandırın. Betik veya program, site/wwwroot/app_data/jobs/continuous adlı klasörde depolanır.

  • İşin zamanlama temelli bir tetikleyiciye yanıt vermesini istiyorsanız, zamanlamaya göre çalıştır olarak yapılandırın. Betik veya program, site/wwwroot/app_data/jobs/triggered adlı klasörde depolanır.

  • bir işi yapılandırırken İsteğe bağlı çalıştır seçeneğini belirlerseniz, işi başlattığınızda zamanlamada çalıştır seçeneğiyle aynı kodu çalıştırır.

Web İşi, web uygulamasının korumalı alanında çalışır. Ortam değişkenlerine erişimi vardır ve bağlantı dizesi gibi bilgileri web uygulamasıyla paylaşabilir. Web İşi, Web İşi'ni çalıştıran makinenin benzersiz tanımlayıcısına erişebilir. adlı AzureWebJobsStorage bağlantı dizesi, uygulama verileri için Depolama kuyruklarına, bloblara ve tablolara erişim sağlar. Ayrıca mesajlaşma ve iletişim için Service Bus'a erişim sağlar. adlı AzureWebJobsDashboard bağlantı dizesi, Web İşi eylem günlüğü dosyalarına erişim sağlar.

Web İşleri aşağıdaki özelliklere sahiptir:

  • Güvenlik: Web uygulamasının dağıtım kimlik bilgileri, Web İşleri için koruma sağlar.

  • Desteklenen dosya türleri: Komut betikleri (.cmd), toplu iş dosyaları (.bat), PowerShell betikleri (.ps1), Bash kabuk betikleri (.sh), PHP betikleri (.php), Python betikleri (.py), JavaScript kodu (.js) ve yürütülebilir programları (.exe ve .jar) kullanarak Web İşleri tanımlayın.

  • Dağıtım: Betikleri ve yürütülebilir dosyaları Azure portalı, Visual Studio veya Web İşleri SDK'sını kullanarak dağıtabilir veya doğrudan aşağıdaki konumlara kopyalayabilirsiniz:

    • Tetiklenen dağıtım için: site/wwwroot/app_data/jobs/triggered/<job name>

    • Sürekli dağıtım için: site/wwwroot/app_data/jobs/continuous/<job name>

  • Günlük dosyaları: Console.Out olarak INFOişlenir veya olarak işaretlenir. Console.Error olarak ERRORdeğerlendirilir. İzleme ve tanılama bilgilerine erişmek için portalı kullanın. Günlük dosyalarını doğrudan web sitesinden indirin. Günlük dosyaları aşağıdaki konumlara kaydedilir:

    • Tetiklenen dağıtım için: Vfs/data/jobs/triggered/<job name>

    • Sürekli dağıtım için: Vfs/data/jobs/continuous/<job name>

  • Yapılandırma: Portalı, REST API'yi ve PowerShell'i kullanarak Web İşleri'ni yapılandırın. Web İşi için yapılandırma bilgileri sağlamak için Web İşi betiğiyle aynı kök dizinde yer alan settings.job adlı bir yapılandırma dosyası kullanın. Örneğin:

    • { "stopping_wait_time": 60 }

    • { "is_singleton": true }

Web Apps ve Webjobs ile ilgili dikkat edilmesi gerekenler

  • Varsayılan olarak, Web İşleri web uygulaması ile ölçeklenir. Web İşleri'ni tek bir örnekte çalışacak şekilde yapılandırmak için yapılandırma özelliğini olarak trueayarlayınis_singleton. Tek örnekli Web İşleri, yeniden dizinleme veya veri analizi gibi birden çok örneği ölçeklendirmek veya aynı anda çalıştırmak istemediğiniz görevler için kullanışlıdır.

  • Web İşleri'nin web uygulamasının performansı üzerindeki etkisini en aza indirmek için, uzun süre çalışan veya yoğun kaynak kullanan Web İşleri barındırmak için yeni bir App Service planında boş bir web uygulaması örneği oluşturun.

Azure İşlevleri

Azure İşlevleri, Web İşleri'ne benzer. Azure İşlevleri sunucusuzdur ve en çok kısa bir süre boyunca çalışan olay temelli tetikleyiciler için uygundur. Bir işlevi belirtilen zamanlarda çalışacak şekilde yapılandırdığınızda zamanlayıcı tetikleyicileri aracılığıyla zamanlanmış işleri çalıştırmak için de Azure İşlevleri kullanabilirsiniz.

bir işlev beklenmeyen zaman aşımlarına neden olabileceği için büyük, uzun süre çalışan görevler için Azure İşlevleri önerilmez. Ancak barındırma planınıza bağlı olarak, zamanlama temelli tetikleyiciler için işlevleri kullanmayı göz önünde bulundurun.

Azure İşlevleri dikkat edilmesi gerekenler

Arka plan görevinin bir olaya yanıt olarak kısa bir süre boyunca çalışmasını bekliyorsanız, görevi tüketim planında çalıştırmayı göz önünde bulundurun. Çalışma zamanını en uzun süreye yapılandırabilirsiniz. Daha uzun maliyetler için çalışan bir işlev. Daha fazla bellek tüketen yoğun CPU kullanan işler daha pahalı olabilir. Göreviniz kapsamında hizmetler için ek tetikleyiciler kullanırsanız, bunlar ayrı olarak faturalandırılır.

Premium plan, kısa olan ancak sürekli çalışan birkaç göreviniz varsa uygundur. Daha fazla belleğe ve CPU'ya ihtiyaç duyduğundan bu plan daha pahalıdır. Bir avantaj olarak, sanal ağ tümleştirmesi gibi diğer özellikleri kullanabilirsiniz.

İş yükünüz ayrılmış planda zaten çalışıyorsa, ayrılmış plan arka plan işleri için uygundur. Az kullanılan VM'leriniz varsa, ayrılmış planı aynı VM'de çalıştırabilir ve işlem maliyetlerini paylaşabilirsiniz.

Daha fazla bilgi için bkz.

Sanal Makineler

Arka plan görevlerini web uygulamalarına dağıtılmamaları için uygulayabilirsiniz. Örneğin, Windows hizmetlerini, üçüncü taraf yardımcı programlarını veya yürütülebilir programları kullanarak görevleri uygulayabilirsiniz. Uygulamayı barındıran ortamdan farklı bir çalışma zamanı ortamı için yazılmış programları da kullanabilirsiniz. Örneğin, bir Windows veya .NET uygulamasından çalıştırmak istediğiniz bir Unix veya Linux programı kullanabilirsiniz. Azure VM için çeşitli işletim sistemleri arasından seçim yapın ve hizmetinizi veya yürütülebilir dosyanızı bu VM'de çalıştırın.

Daha fazla bilgi için bkz.

Arka plan görevini ayrı bir VM'de başlatmak için şunları yapabilirsiniz:

  • Görevi doğrudan uygulamanızdan isteğe bağlı olarak çalıştırmak için görevin kullanıma açık olduğu bir uç noktaya istek gönderin. İstek, görevin gerektirdiği verileri aktarır. Uç nokta görevi çağırır.

  • Görevi zamanlamaya göre çalışacak şekilde yapılandırmak için seçtiğiniz işletim sisteminden bir zamanlayıcı veya zamanlayıcı kullanın. Örneğin, Windows'da, betikleri ve görevleri çalıştırmak için Windows Görev Zamanlayıcı'yı kullanabilirsiniz. VM'de SQL Server yüklüyse, betikleri ve görevleri çalıştırmak için SQL Server Aracısı'nı kullanın.

  • Görevin izlediği kuyruğa ileti ekleyerek veya görevin kullanıma sunduğu bir API'ye istek göndererek görevi başlatmak için Logic Apps'i kullanın.

Arka plan görevlerini nasıl başlatabileceğiniz hakkında daha fazla bilgi için önceki Tetikleyiciler bölümüne bakın.

Sanal Makineler dikkat edilmesi gerekenler

Azure VM'de arka plan görevlerini dağıtırken aşağıdaki noktaları göz önünde bulundurun:

  • Başlatma, dağıtım, zamanlama ve kaynak ayırma üzerinde esneklik ve hassas denetim sağlamak için arka plan görevlerini ayrı bir Azure VM'sinde barındırabilirsiniz. Ancak vm'yi yalnızca arka plan görevleri için dağıtırsanız çalışma zamanı maliyetleri artar.

  • Portaldaki görevleri izleme olanağı ve başarısız görevler için otomatik yeniden başlatma özelliği yoktur. Ancak VM'nin durumunu izlemek ve yönetmek için Azure Resource Manager cmdlet'lerini kullanabilirsiniz. İşlem düğümlerinde işlemleri ve iş parçacıklarını denetleme olanağı yoktur. Genellikle, bir VM kullanıyorsanız, görevdeki izlemeden ve vm'deki işletim sisteminden veri toplayan bir mekanizma uygulamanız gerekir. Bu amaçla Azure için System Center Yönetim Paketi'ni kullanabilirsiniz.

  • HTTP uç noktaları aracılığıyla kullanıma sunulan izleme yoklamaları oluşturmayı göz önünde bulundurun. Sistem durumu denetimleri gerçekleştirmek ve işlem bilgileri ile istatistikler toplamak için bu yoklamaların kodunu yapılandırabilirsiniz. Ayrıca, hata bilgilerini harmanlayıp bir yönetim uygulamasına döndürmek için yoklamaları da kullanabilirsiniz.

Daha fazla bilgi için bkz.

Batch

Onlarca, yüzlerce veya binlerce VM'de büyük, paralel yüksek performanslı bilgi işlem (HPC) iş yükleri çalıştırmanız gerekiyorsa Batch'i göz önünde bulundurun.

VM'leri hazırlamak, VM'lere görev atamak, görevleri çalıştırmak, ilerleme durumunu izlemek ve iş yüküne yanıt olarak VM'lerin ölçeğini otomatik olarak genişletmek için Batch'i kullanın. Batch ayrıca iş zamanlaması sağlar ve Linux ve Windows VM'lerini destekler.

Toplu iş konuları

Batch, içsel olarak paralel iş yükleri için uygundur. Batch'i kullanarak sonunda bir azaltma adımıyla paralel hesaplamalar yapabilir veya düğümler arasında ileti geçirme gerektiren paralel görevler için İleti Geçirme Arabirimi (MPI) uygulamalarını çalıştırabilirsiniz.

Batch işi bir düğüm havuzunda veya VM'lerde çalışır. Bir havuzu yalnızca gerektiğinde ayırabilir ve iş bittikten sonra silebilirsiniz. Düğümler boşta olmadığından bu yaklaşım kullanımı en üst düzeye çıkarır, ancak işin düğümleri ayırmanızı beklemesi gerekir. Alternatif olarak, önceden bir havuz oluşturabilirsiniz. Bu yaklaşım, bir işin başlatılması için gereken süreyi en aza indirir, ancak boşta duran düğümlere neden olabilir.

Daha fazla bilgi için bkz.

Azure Kubernetes Service

Kapsayıcılı uygulamaları kolayca dağıtabilmeniz ve yönetebilmeniz için, barındırılan Kubernetes ortamınızı yönetmek için AKS kullanın.

Kapsayıcılar arka plan işlerini çalıştırmak için kullanışlıdır. Bazı avantajları şunlardır:

  • Kapsayıcılar yüksek yoğunluklu barındırmayı destekler. Bir kapsayıcıda bir arka plan görevini yalıtabilir, diğer yandan her VM’ye birden fazla kapsayıcı yerleştirebilirsiniz.

  • İç yük dengeleme gerçekleştirmek, iç ağı yapılandırmak ve diğer yapılandırma görevlerini gerçekleştirmek için kapsayıcı düzenleyicisini kullanın.

  • Kapsayıcıları gerektiği gibi başlatabilir ve durdurabilirsiniz.

  • Azure Container Registry ile, güvenlik, gizlilik ve yakınlık avantajları sağlamak için kapsayıcılarınızı Azure sınırları içine kaydedebilirsiniz.

AKS ile ilgili dikkat edilmesi gerekenler

AKS, kapsayıcı düzenleyicinin nasıl kullanılacağının anlaşılmasını gerektirir.

Daha fazla bilgi için bkz.

Container Apps

Container Apps ile kapsayıcıları temel alan sunucusuz mikro hizmetler oluşturabilirsiniz. Container Apps:

Container Apps ile ilgili dikkat edilmesi gerekenler

Container Apps, temel alınan Kubernetes API'lerine doğrudan erişim sağlamaz. Kubernetes API'lerine ve kontrol düzlemine erişmeniz gerekiyorsa AKS kullanın. Kubernetes stili uygulamalar oluşturmak istiyorsanız ve yerel Kubernetes API'lerine ve küme yönetimine doğrudan erişim gerekmiyorsa, tam olarak yönetilen bir deneyim için Container Apps'i kullanın. Container Apps, kapsayıcı mikro hizmetleri oluşturmak için en uygun yöntemdir.

Daha fazla bilgi için bkz.

Güvenilirlik denetim listesi

Öneriler kümesinin tamamına bakın.