Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Birçok uygulama türü, kullanıcı arabiriminden bağımsız olarak çalışan arka plan görevleri gerektirir. Örnek olarak toplu işler, yoğun işleme görevleri ve iş akışları gibi uzun süre çalışan işlemler verilebilir. Arka plan işleri kullanıcı etkileşimi olmadan çalıştırılır. Uygulama işi başlatır ve kullanıcılardan gelen etkileşimli istekleri işlemeye devam eder. Bu yaklaşım, uygulama kullanıcı arabirimi üzerindeki yükü en aza indirerek kullanılabilirliği artırır ve etkileşimli yanıt sürelerini azaltır.
Örneğin, bir uygulamanın kullanıcıların karşıya yüklediği görüntülerin küçük resimlerini oluşturması gerekiyorsa, bu işi arka plan işi olarak çalıştırabilir ve tamamlandığında küçük resmi depolama alanına kaydedebilir. Kullanıcının beklemesi gerekmez. Benzer şekilde, sipariş veren bir kullanıcı siparişi işleyen bir arka plan iş akışı başlatabilir, kullanıcı arabirimi ise kullanıcının web uygulamasına göz atmaya devam edebilmesini sağlar. Arka plan işi tamamlandığında, depolanan sipariş verilerini güncelleştirir ve siparişi onaylamak için kullanıcıya bir e-posta gönderir.
Bir görevin arka plan işi olarak uygulanıp uygulanmayacağını düşündüğünüzde, ana ölçüt, görevin kullanıcı etkileşimi olmadan ve kullanıcı arabiriminin tamamlanmasını beklemesine gerek kalmadan çalışıp çalışamayacağıdır. Kullanıcının veya kullanıcı arabiriminin tamamlarken beklemesini gerektiren görevler, arka plan işleri olarak uygun olmayabilir.
İpucu
Bu makale, Azure'da arka plan iş sistemleri tasarlamaya yönelik mimari rehberlik sağlar. Barındırma seçeneklerini, tasarım ilkelerini, güvenilirliği, güvenliği, gözlemlenebilirliği ve ölçeklendirmeyi kapsar. Arka plan işlerini kullanan mevcut bir iş yükünün güvenilirlik gözden geçirmesini gerçekleştirirseniz, bkz. Güvenilirlik gereksinimlerine odaklanmış bir denetim listesi sağlayan Azure Well-Architected Framework'te arka plan işleri geliştirme önerileri .
Arka plan işleri türleri
Arka plan işleri genellikle aşağıdaki iş türlerinden birini veya daha fazlasını içerir:
Matematiksel hesaplamalar veya yapısal model analizi gibi yoğun CPU kullanan işler.
Bir dizi depolama işlemi veya dosya dizini oluşturma gibi giriş ve çıkış (G/Ç) yoğunluklu işler.
Gecelik veri güncelleştirmeleri veya zamanlanmış işleme gibi toplu işler.
Sipariş karşılama veya hizmet ve sistemleri sağlama gibi uzun süre çalışan iş akışları.
Görevi işlenmek üzere daha güvenli bir konuma gönderdiğiniz hassas veri işleme. Örneğin, bir web uygulaması içinde hassas verileri işlemek istemeyebilirsiniz. Bunun yerine, verileri korumalı depolamaya erişebilen yalıtılmış bir arka plan işlemine aktarmak için Gatekeeper deseni gibi bir desen kullanabilirsiniz.
Tetikleyiciler
Arka plan işlerini çeşitli yollarla başlatabilirsiniz. Bunlar aşağıdaki kategorilerden birine ayrılır:
Olay temelli tetikleyiciler: Genellikle bir kullanıcı eylemi veya iş akışındaki bir adım olan bir olay görevi başlatır.
Zamanlama temelli tetikleyiciler: Zamanlayıcı, görevi yinelenen bir zamanlamaya göre veya belirli bir zamanda tek bir çağrı olarak çağırır.
Olay temelli tetikleyiciler
Olay temelli çağırma, arka plan görevini başlatmak için bir tetikleyici kullanır. Olay temelli tetikleyici örnekleri şunlardır:
Kullanıcı arabirimi veya başka bir iş kuyruğa bir ileti yerleştirir. İleti, kullanıcının sipariş vermesi gibi gerçekleşen bir eylemle ilgili veriler içerir. Arka plan görevi yeni iletiler için bu kuyrukta dinler. Bir iletiyi okur ve arka plan işinin girişi olarak verileri kullanır. Bu desen, zaman uyumsuz ileti tabanlı iletişim olarak bilinir. İstek birimi çok yüksekseQueue-Based Yük Dengeleme desenini kullanarak kuyruğun talebi arabelleğe alıp arka plan görev işlemlerinin denetimli bir hızda çalışmasını sağlayın.
Kullanıcı arabirimi veya başka bir iş, depolama alanındaki bir değeri kaydeder veya güncelleştirir. Arka plan görevi depolamayı izler ve değişiklikleri algılar. Verileri okur ve arka plan işinin girişi olarak kullanır.
Kullanıcı arabirimi veya başka bir iş, HTTPS tekdüzen kaynak tanımlayıcısı (URI) veya web hizmeti olarak kullanıma sunulan bir API gibi bir uç noktaya istekte bulunur. İsteğin bir parçası olarak arka plan görevini tamamlamak için gereken verileri geçirir. Uç nokta veya web hizmeti, verileri girişi olarak kullanan arka plan görevini çağırır.
Olay odaklı çağırmaya uygun görevlerin tipik örnekleri arasında 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 sayılabilir.
Zamanlama temelli tetikleyiciler
Zamanlama temelli çağırma, arka plan görevini başlatmak için bir zamanlayıcı kullanır. Zamanlama temelli tetikleyici örnekleri şunlardır:
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, belirtilen bir gecikmeden sonra veya belirli bir zamanda arka plan görevini bir kez başlatan bir zamanlayıcı başlatır.
Zamanlama temelli çağırmaya uygun tipik görevlere örnek olarak toplu işlem yordamları (son davranışlarına göre kullanıcılar için 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 bir örnek olarak çalışması gereken zamanlama temelli bir görev kullanıyorsanız, aşağıdaki noktalara dikkat edin:
Zamanlayıcıyı çalıştıran işlem örneğini, Windows zamanlanmış görevlerini kullanan bir sanal makine (VM) gibi ölçeklendirirseniz, birden çok zamanlayıcı örneği oluşturursunuz. Bu örnekler görevin birden çok kopyasını başlatabilir. Aynı görevi birden çok kez çalıştırmanın yinelenen sonuçlar veya tutarsızlıklar oluşturmaması için idempotent olacak şekilde zamanlanmış görevleri tasarlayın.
Görevler zamanlayıcı olayları arasındaki süreden daha uzun süre çalışıyorsa, zamanlayıcı önceki örnek çalışırken görevin başka bir örneğini başlatabilir.
Sonuçları döndürüyor
Arka plan görevleri, kullanıcı arabiriminden veya bunları çağıran işlemden ayrı bir işlemde, hatta ayrı bir konumda eşzamansız olarak çalışır. İdeal olarak, arka plan görevleri fire and forget işlemleridir ve bunların işleme ilerlemesinin kullanıcı arabirimi veya çağıran süreç üzerinde hiçbir etkisi yoktur. Çağıran işlem, görevin tamamlanmasını beklemez ve görevin ne zaman sona erdiği otomatik olarak algılayamaz.
İlerlemeyi veya tamamlanmayı belirtmek için arama göreviyle iletişim kurmak için bir arka plan görevine ihtiyacınız varsa, bu görev için bir mekanizma uygulamanız gerekir. Seçenekler şunlardır:
Çağırana bir durum uç noktası döndürür. Caller, işi gönderdiğinde bir URL (veya kaynak tanımlayıcı) alır ve durumunu öğrenmek için bu URL (uç nokta) üzerinden yoklama yapar. Zaman Uyumsuz Request-Reply düzeni bu yaklaşımı açıklar. Çağıranın uzun süre çalışan bir işlem başlattığı ve tamamlanıp tamamlanmadığını denetlemesi gereken HTTP tabanlı API'lere uygundur.
Yanıt kuyruğu kullanın. Arka plan görevi, çağıranın dinlemesi için bir kuyruğa ileti gönderir. İletiler durum ve tamamlanma durumunu gösterir. Azure Service Bus kullanıyorsanız, yanıtları isteklerle ilişkilendirmek için
ReplyToveCorrelationIdözelliklerini kullanabilirsiniz.Olaylar aracılığıyla anında iletme bildirimleri. Arka plan görevi tamamlandığında veya önemli kilometre taşlarında bir olay yayımlar. Arayan bu olaylara abonedir. Bu yaklaşım, bulutta yerel olay yönlendirme için Azure Event Grid'e veya Service Bus konuları gibi bir yayımlama ve abone olma mekanizmasına uygundur.
Bir webhook aracılığıyla arayana geri dönün. Çağrıcı, işi gönderirken bir geri arama URL'si sağlar. arka plan görevi, işleme tamamlandığında veya hatalar oluştuğunda bu URL'ye bir HTTP isteği gönderir. Çağıran bir dış sistem olduğunda bu yaklaşım yararlıdır.
Durumu paylaşılan depolamaya yaz. Arka plan görevi, ilerleme durumunu veya sonuçları çağıranın izlediği veritabanı veya blob gibi paylaşılan bir veri deposuna yazar. Bu yaklaşım basittir ancak çağıranın değişiklikleri yoklamasını gerektirir.
idempotentlik için tasarım
Arka plan işleri, özellikle aynı mantıksal iş öğesi için birden fazla kez çalıştırılmaya meyillidir. Kuyruklar iletileri en az bir kez teslim eder, bir iş zamanlayıcı periyodundan daha uzun süre çalışırsa zamanlayıcılar çakışabilir, ve altyapının yeniden başlatılması kısmen tamamlanmış işleri yeniden yürütebilir. Her arka plan işini, iş birden çok kez çalıştırıldığında aynı girişin aynı sonucu üretmesi için tasarlar. Daha fazla bilgi için bkz . Etkili ileti işleme.
Barındırma ortamı
Çeşitli Azure platform hizmetlerini kullanarak arka plan görevlerini barındırabilirsiniz:
Azure İşlevleri: Otomatik ölçeklendirme ile olay odaklı ve zamanlama temelli tetikleyicileri destekleyen sunucusuz işlem hizmeti. Uzun süre çalışan veya durum bilgisi olan iş akışları için Dayanıklı İşlevler'i kullanın.
Azure Container Apps: Hem uzun süre çalışan hizmetleri hem de ayrı işleri destekleyen sunucusuz kapsayıcı platformu. İşler tamamlanmaya kadar çalışır ve bunları el ile, zamanlamaya göre veya olaylara göre tetikleyebilirsiniz. Container Apps, olay temelli otomatik ölçeklendirme için keda kullanır ve ölçek sıfıra kadardır.
Azure Kubernetes Service (AKS): Kapsayıcı düzenlemesi üzerinde tam denetim sağlayan yönetilen bir Kubernetes ortamı. Kubernetes API'sine ve denetim düzlemine doğrudan erişmeniz gerektiğinde arka plan işleme için Kubernetes CronJobs ve İşler'i kullanın.
Azure Batch: İşlem yoğunluklu çalışmayı yönetilen bir VM koleksiyonunda çalışacak şekilde zamanlayan bir platform hizmeti. İşlem kaynaklarını onlarca, yüzlerce veya binlerce düğüm arasında otomatik olarak ölçeklendirebilir.
Azure Sanal Makineler: İşletim sistemi veya çalışma zamanı ortamı üzerinde tam denetim gerektiren, Windows hizmetleri, dış yürütülebilir dosyalar veya özelleşmiş çalışma zamanları gibi arka plan görevleri için altyapı olarak hizmet (IaaS) seçeneği.
Azure App Service Web İşleri: Web uygulamasıyla aynı bağlamda arka plan betiklerini veya programlarını çalıştıran bir App Service özelliğidir. Mevcut bir App Service uygulamasıyla aynı konumda yer alan arka plan işlemeye ihtiyacınız olduğunda WebJobs'u göz önünde bulundurun.
Aşağıdaki bölümlerde bu seçenekler daha ayrıntılı olarak açıklanmıştır ve uygun seçeneği belirlemenize yardımcı olacak önemli noktalar yer almaktadır.
Functions
İşlevler, olay temelli kod çalıştıran sunucusuz bir işlem hizmetidir. İşlevler kuyruk iletileri, blob depolama değişiklikleri, zamanlayıcı zamanlamaları, HTTP istekleri ve Event Grid olayları gibi çeşitli tetikleyici türlerini desteklediğinden arka plan işlerine uygundur.
İşlevler, kısa süreli arka plan görevleri için otomatik ölçeklendirme (sıfıra ölçeklendirme dahil) ve yürütme başına ücretlendirme sağlar. Uzun süre çalışan veya durum bilgisi olan iş akışları için, İşlevleri düzenleme özellikleriyle genişleten Dayanıklı İşlevler'i kullanın.
Dayanıklı İşlevler, arka plan işi koordinasyonu için doğrudan geçerli olan çeşitli düzenleme desenlerini destekler:
İşlev zincirleme: İşlevlerin bir dizisini belirli bir sırada çalıştırın ve bu, her adımın çıkışını bir sonrakine geçirir.
Fan çıkışı/fan girişi: Birden çok işlevi paralel olarak çalıştırın ve ardından sonuçları toplama.
Asenkron HTTP API'leri: Bir yoklama uç noktası veya webhook geri çağırma kullanarak uzun süreli işlemleri dış istemcilerle eşleştirerek koordine edin.
İnsan etkileşimi: İsteğe bağlı zaman aşımı tabanlı yükseltme ile bir dış olay (onay gibi) alana kadar düzenlemeyi duraklatma.
Monitör: Yapılandırılabilir aralıklar ve zaman aşımlarıyla bir koşulu yoklayan yinelenen bir işlem uygulayın.
İşlevlerle ilgili dikkat edilmesi gerekenler
İş yükü özelliklerinize göre bir barındırma planı seçin:
Esnek Tüketim planı: Hacmi aralıklı ya da tahmin edilemeyen arka plan işleri için en iyi seçenektir. Çalışma olmadığında ölçeği sıfıra ölçeklendirir ve yürütme başına faturalama ile yük altında ölçeği büyütür. Varsayılan işlev zaman aşımı, zorunlu maksimum değer olmadan 30 dakikadır, bu nedenle plan hem kısa görevleri hem de daha uzun işlemeyi işler. Soğuk başlatma gecikme süresini azaltmak için sanal ağ tümleştirmesini ve her zaman hazır örnekleri destekler.
Premium plan: Sürekli veya neredeyse sürekli çalışan yüksek aktarım hızına sahip iş yüklerine uygundur. Soğuk başlatmaları, sanal ağ tümleştirmesini ve daha uzun çalışma sürelerini önlemek için önceden hazır örnekler sağlar.
Ayrılmış (App Service) planı: Mevcut App Service altyapısında işlevleri çalıştırın. App Service kapasitesini az kullandığınızda ve işlem maliyetlerini paylaşmak istediğinizde bu seçenek uygundur.
Dayanıklı İşlevler, denetim noktası oluşturma aracılığıyla orkestrasyon durumunu otomatik olarak korur. Eğer bir işlev uygulaması yeniden başlatılırsa, orkestrasyon son denetim noktasından devam eder. Yeniden denemelerin yinelenen yan etkiler üretmemesi için etkinlik işlevlerini bir kez etkili olacak şekilde tasarlayın. İşlevleri dış olay kaynağı olmadan bir zamanlamaya göre çalıştırmak için zamanlayıcı tetikleyicilerini de kullanabilirsiniz.
Konteyner Uygulamaları
Container Apps, kapsayıcılı görevleri tamamlayıp durduran Container Apps işleri aracılığıyla arka plan işlemeyi destekler. İşler toplu işlemeye, zamanlanmış görevlere ve kısa süreli bir işlemin ayrı bir iş birimini işlediği olay temelli çalışmaya uygundur. Platforma genel bir genel bakış için bkz. Container Apps'e genel bakış.
Container Apps işleri üç tetikleyici türünü destekler:
El ile yapılan işler: Azure CLI, Azure portalı veya Azure Resource Manager API'sini kullanarak bu işleri isteğe bağlı olarak tetiklersiniz. Veri geçişleri veya bir uygulamanın başlattığı isteğe bağlı işleme gibi tek seferlik görevler için el ile işleri kullanın.
Zamanlanmış işler: CRON ifadesi bu işleri belirli zamanlarda tetikler. Gece raporları, düzenli veri temizleme veya yinelenen veri işleme için zamanlanmış işleri kullanın.
Olay temelli işler: Kuyruğa gelen ileti gibi olaylar bu işleri tetikler. Container Apps, olay kaynaklarını izlemek ve iş çalıştırmalarını yapılandırılmış kurallara göre ölçeklendirmek için KEDA kullanır. İşlenmek üzere olay olmadığında olay temelli işler sıfıra ölçeklendirilebilir. Daha fazla bilgi için bkz. Olay temelli iş dağıtma.
Kuyruktan gelen iletileri sürekli işleyen bir hizmet gibi sürekli çalışan arka plan görevleri için iş yerine kapsayıcı uygulaması dağıtın. Kapsayıcı uygulamaları hata durumunda otomatik olarak yeniden başlatılır ve kuyruk uzunluğuna veya diğer ölçümlere göre ölçeklendirme kurallarını destekler.
Container Apps ile ilgili dikkat edilmesi gerekenler
Container Apps işleri, kapsayıcı görüntüleri oluşturmanızı ve korumanızı gerektirir. Bu yaklaşım İşlevler'e kıyasla ek yük getirir, ancak işinizin ihtiyaç duyduğu çalışma zamanı, bağımlılıklar ve işletim sistemi düzeyindeki araçlar üzerinde tam denetim sağlar.
Olay temelli işler için bir KEDA ölçekleyicinin olay kaynağınızı desteklediğini doğrulayın. KEDA Service Bus, Azure Depolama Kuyrukları, Apache Kafka, RabbitMQ ve diğer kaynakları destekler.
Kubernetes API'lerine ve kontrol düzlemine doğrudan erişmeniz gerekiyorsa, bunun yerine AKS kullanın.
AKS
Arka plan işleriniz Kubernetes API'sine doğrudan erişim, özel zamanlama mantığı veya ekibinizin çalıştırdığı daha geniş bir Kubernetes tabanlı platformla tümleştirme gerektirdiğinde AKS kullanın.
Zamanlanmış arka plan görevleri için Kubernetes CronJobs'u ve bir kerelik çalıştırma-tamamlama çalışması için İşler'i kullanın. İş işlemcilerinin olay odaklı otomatik ölçeklendirmesi için AKS ile KEDA da kullanabilirsiniz.
AKS ile ilgili dikkat edilmesi gerekenler
AKS, küme yönetimi, yükseltmeler ve güvenlik yamalarının uygulanması için operasyonel yatırım gerektirir. Doğrudan Kubernetes API erişimine ihtiyacınız yoksa , Container Apps işleri daha az ek yük içeren yönetilen bir alternatif sağlar.
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.
Batch hizmeti VM'leri sağlar, VM'lere görevler atar, görevleri çalıştırır ve ilerleme durumunu izler. Batch, iş yüküne yanıt olarak VM'lerin ölçeğini otomatik olarak genişletebilir. Batch ayrıca iş zamanlaması da sağlar. Batch hem Linux hem de Windows VM'lerini destekler.
Parti İşleme Dikkat Edilecek Hususlar
Batch, içsel olarak paralel iş yükleriyle iyi çalışır. Ayrıca sonunda bir azaltma adımıyla paralel hesaplamalar yapabilir veya düğümler arasında ileti geçirme gerektiren paralel görevler için ileti geçirme arabirimi (MPI) uygulamaları çalıştırabilir.
Batch işi bir düğüm havuzunda (VM'ler) çalışır. Bir yaklaşım, bir havuzu yalnızca gerektiğinde ayırmak ve iş tamamlandıktan sonra silmektir. Düğümler boşta olmadığından bu yaklaşım kullanımı en üst düzeye çıkarır, ancak işin Batch'in düğümleri ayırmasını 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 düğümlerle sonuçlanabilir. Havuz ve işlem düğümü ömrü hakkında daha fazla bilgi için bkz. Daha kapsamlı HPC yönergeleri için bkz. Büyük ölçekli bilgi işlem iş yükleri için Batch ve HPC çözümleri.
Sanal Makineler
Arka plan görevleri, platform veya sunucusuz hizmetleri kullanmalarını engelleyen tam bir işletim sistemi ortamı veya belirli çalışma zamanı bağımlılıkları gerektirebilir. Tipik örnekler windows hizmetleri, yürütülebilir dosyalar ve özel çalışma zamanları için yazılmış programlardır. Bir Azure VM için çeşitli işletim sistemleri arasından seçim yapabilir ve hizmetinizi veya yürütülebilir dosyanızı bu VM'de çalıştırabilirsiniz.
Arka plan görevini ayrı bir VM'de başlatmak için birkaç seçeneğiniz vardır:
Görevin kullanıma sunduğu bir uç noktaya istek göndererek, görevi doğrudan uygulamanızdan isteğe bağlı olarak çalıştırabilirsiniz. Bu istek, görevin gerektirdiği tüm verileri geçirir. Uç nokta görevi çağırır.
Seçtiğiniz işletim sisteminde kullanılabilir bir zamanlayıcı veya zamanlayıcı kullanarak görevi bir zamanlamaya göre çalışacak şekilde ayarlayabilirsiniz. Örneğin, Windows'da betikleri ve görevleri çalıştırmak için Windows Görev Zamanlayıcı'yı kullanabilirsiniz. Veya VM'de SQL Server yüklüyse, betikleri ve görevleri çalıştırmak için SQL Server Aracısı'nı kullanabilirsiniz.
Görevin dinlediği kuyruğa bir ileti ekleyerek veya görevin kullanıma sunduğu bir API'ye istek göndererek görevi başlatmak için Logic Apps'i kullanabilirsiniz.
Arka plan görevlerini başlatma hakkında daha fazla bilgi için bkz. Tetikleyiciler.
Sanal Makineler ile ilgili dikkat edilmesi gerekenler
Azure VM'de arka plan görevlerini dağıtırken aşağıdaki noktaları göz önünde bulundurun:
Arka plan görevlerini ayrı bir Azure VM'sinde barındırmak başlatma, işleme, zamanlama ve kaynak ayırma üzerinde esneklik ve hassas denetim sağlar. Ancak bu yaklaşım, vm'nin yalnızca arka plan görevlerini çalıştırmak için dağıtılması gerekiyorsa çalışma zamanı maliyetini artırır. Vm'nin doğru işlem modeli olup olmadığını değerlendirmek için bkz. Azure işlem hizmeti seçme.
Azure portalında tek tek görevleri izlemek için yerleşik bir tesis yoktur ve başarısız görevler için otomatik yeniden başlatma özelliği yoktur. Azure PowerShell cmdlet'lerini kullanarak VM'nin temel durumunu izleyebilir ve yönetebilirsiniz, ancak görev ve işletim sisteminden izleme verileri toplamak için kendi mekanizmalarınızı uygulamanız gerekir. Vm'den günlükleri ve ölçümleri toplamak için Azure İzleyici Aracısı'nı kullanın.
HTTP uç noktaları aracılığıyla kullanıma sunulan izleme yoklamaları oluşturun. Bu yoklamaların kodu sistem durumu denetimleri gerçekleştirmeli, işlem bilgileri ve istatistikler toplamalı veya hata bilgilerini harmanlamalı ve bir yönetim uygulamasına döndürmelidir. Daha fazla bilgi için bkz. Sağlık Uç Noktası İzleme Deseni.
App Service Web İşleri
Azure Webjobs , web uygulamasıyla aynı örnekte arka plan betikleri veya programlar çalıştıran bir App Service özelliğidir. Web İşleri, web uygulamasının korumalı alanı içinde çalıştırılır; bu da ortam değişkenlerine, bağlantı dizelerine ve uygulamayla paylaşılan diğer yapılandırmalara erişebildikleri anlamına gelir. Yaygın arka plan işleme görevleri için yazdığınız kodu basitleştirmek için Azure Web İşleri SDK'sını kullanabilirsiniz.
Mevcut bir App Service web uygulamanız varsa ve web uygulamasıyla aynı yaşam döngüsünü, yapılandırmayı ve dağıtımı paylaşan arka plan işlemeye ihtiyacınız olduğunda Web İşleri'ni göz önünde bulundurun. Web İşleri'ni yeni iş yükleri için genel amaçlı arka plan iş platformu olarak önermeyiz. Olay temelli veya zamanlanmış yeni arka plan işleme için İşlevler veya Container Apps işlerini değerlendirin.
WebJobs sürekli veya tetiklenen işlemler olarak çalıştırılabilir.
Sürekli olarak çalıştır: WebJob hemen başlar ve uzun süreli bir işlem olarak çalışır. Betik veya program
site/wwwroot/app_data/jobs/continuousiçinde depolanır.Zamanlamaya göre veya talep üzerine çalıştırın: CRON ifadesi veya el ile gerçekleştirilen bir eylem, WebJob'u tetikler. Betik veya program
site/wwwroot/app_data/jobs/triggerediçinde depolanır.
App Service Webjobs ile ilgili dikkat edilmesi gerekenler
Varsayılan olarak, WebJobs, web uygulamasıyla birlikte ölçeklendirilir. Bir işi tek bir örnek olarak çalışacak şekilde ayarlamak için
is_singletonyapılandırma özelliğinitrueolarak ayarlayabilirsiniz. Tek örnekli Web İşleri, yeniden dizinleme veya veri analizi gibi aynı anda birden çok örnek olarak çalıştırmak istemediğiniz görevlere uygundur.web uygulaması performansı üzerindeki iş etkisini azaltmak için, uzun süre çalışan veya yoğun kaynak kullanan Web İşleri barındırmak için ayrı bir App Service planında boş bir Azure web uygulaması örneği oluşturmayı göz önünde bulundurun.
WebJobs, hesaplama kaynaklarını konak web uygulamasıyla paylaşır. Yoğun kaynak gerektiren arka plan işleme, web uygulamasının yanıt hızını düşürebilir.
Bölümleme
Mevcut bir işlem örneğine arka plan görevleri eklemeye karar verirseniz, bu yaklaşımın işlem örneğinin kalite özniteliklerini ve arka plan görevini nasıl etkilediğini göz önünde bulundurun. Bu faktörler, görevleri mevcut işlem örneğiyle birlikte mi yoksa ayrılmış bir işlem örneğine mi ayırabileceğinize karar vermenize yardımcı olur:
Kullanılabilir -lik: Bekleyen işler kuyruğa alınabildiğinden arka plan görevleri genellikle kısa kesintileri kullanıcı arabiriminden daha iyi tolere eder. Arka plan işleme çok uzun süre kullanılamadığı için kuyruk birikiyorsa, uygulama etkilenir.
Kurtarma: Yalnızca arka plan görevlerini barındıran bir bilişim örneği başarısız olursa, bekleyen işler kuyruğa alındığı sürece uygulama kullanıcılara hizmet vermeye devam edebilir. Sunucu kurtarıldığında birikmiş işleri işler.
Güvenlik: Arka plan görevlerinin kullanıcı arabiriminden farklı kaynaklara, kimlik bilgilerine veya ağ kesimlerine erişmesi gerekebilir. Bunları ayrı bir işlem örneğinde çalıştırmak, kullanıcı arabiriminin hiçbir zaman doğrudan erişmemesi gereken bir veri deposuna ağ erişimini kısıtlama gibi daha sıkı bir güvenlik sınırı uygulamanızı sağlar. Arka plan hesaplamasını kullanıcıya yönelik bileşenlerden yalıtmak için Gatekeeper gibi desenler de kullanabilirsiniz.
Yönetilebilirlik: Arka plan görevleri, kullanıcı arabiriminden farklı bir sürüm temposuyla değişiklik gösterir. Görevleri ayırmak, yalnızca iş mantığı değiştiğinde uygulamanın tamamının yeniden dağıtılmasını önler.
Ölçeklenebilir -lik: Arka plan görevleri genellikle kullanıcı arabiriminden farklı sinyallere göre ölçeklendirilir. Arka plan sistemleri kuyruk derinliğine veya toplu iş boyutuna göre ölçeklendirilirken, kullanıcı arabirimi eş zamanlı kullanıcılara veya istek oranına göre ölçeklendirilir. Bunları ayırmak, her görevin bağımsız olarak ölçeklendirilmesini sağlar.
Arka plan görevlerini ayrılmış bilgi işlem kaynaklarına ayırmak, barındırma maliyetini artırır. Bu maliyeti bağımsız ölçeklendirme, dağıtım ve hata yalıtımının operasyonel avantajlarıyla karşılaştırın.
Çatışmalar
Arka plan işinin birden çok örneğiniz varsa, bunlar veritabanları ve depolama gibi kaynaklara ve hizmetlere erişmek için rekabet edebilir. Bu eşzamanlı erişim kaynak çekişmesiyle sonuçlanabilir ve bu da hizmet kullanılabilirliğini ve veri bütünlüğünü etkileyebilir. Kötümser bir kilitleme yaklaşımı kullanarak kaynak çekişmesi sorununu çözebilirsiniz. Bu yaklaşım, bir görevin rakip örneklerinin bir hizmete eşzamanlı olarak erişmesini veya verileri bozmasını engeller.
Başka bir yaklaşım, yalnızca bir örneğin çalışması için arka plan görevlerini tekil olarak tanımlayarak çakışmaları çözer. Ancak bu yaklaşım, birden çok örnekli yapılandırmanın güvenilirlik ve performans avantajlarını ortadan kaldırır. Bu etki özellikle kullanıcı arabirimi birden fazla arka plan görevini meşgul tutmak için yeterli çalışma sağlayabiliyorsa 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. Bu sonucu elde etmek için, yeterli kaynak içeren bir işlem örneği ayırın, talep azaldığında daha sonra işleme isteklerini depolayan bir kuyruğa alma mekanizması uygulayın veya her iki tekniği de birleştirin.
Koordinat
Arka plan görevleri karmaşık olabilir ve bir sonuç üretmek veya tüm gereksinimleri karşılamak için birden çok ayrı görev gerektirir. Bu senaryolarda ekipler genellikle görevi birden çok tüketicinin çalıştırabileceği daha küçük, ayrık adımlara veya alt görevlere böler. Birden çok iş tek tek adımları yeniden kullanabileceği için çok adımlı işler genellikle verimliliği ve esnekliği artırır. Ayrıca adımları ekleyebilir, kaldırabilir veya yeniden sıralayabilirsiniz.
Görevleri koordine etmek zor olabilir, ancak üç yaygın desen uygulamanız için yol gösterebilir:
Bir görevi birden çok yeniden kullanılabilir adıma bölün. Arka plan işi doğrulama, dönüştürme ve depolama gibi çeşitli aşamalarda bilgileri işler. Bu akışı kuyruklara bağlı ayrı filtrelere bölebilirsiniz. Her adım bağımsız olarak çalışır ve farklı işlerde ölçeklendirilebilir veya kullanılabilir. Daha fazla bilgi için Kanallar ve Filtreler düzenine bakın.
Bir görev için adımların nasıl çalıştığını yönetin. Uzak hizmetleri çağıran veya uzak kaynaklara erişen birkaç adımdan oluşan bir arka plan işi, adımları sıralamak, zaman aşımlarını işlemek ve ilerleme durumunu izlemek için düzenleme mantığı gerektirir. 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. Birden çok adıma yayılan (ve birlikte sonunda tutarlı bir işlemi tanımlayan) bir arka plan işi, sonraki bir adım başarısız olursa tamamlanmış çalışmayı geri alabilir. Daha fazla bilgi için bkz. Telafi İşlemi düzeni.
Güvenilirlikle ilgili dikkat edilmesi gerekenler
Uygulamaya güvenilir hizmetler sağlamak için arka plan görevleri dayanıklı ve kurtarılabilir olmalıdır. Arka plan görevlerini planlayıp tasarlarken aşağıdaki noktaları göz önünde bulundurun:
Arka plan görevleri, verileri bozmadan veya uygulamaya tutarsızlık getirmeden yeniden başlatmaları düzgün bir şekilde işlemelidir. Uzun süre çalışan veya çok adımlı görevler için, iş durumunu kalıcı depolamaya veya uygun olduğunda kuyruk iletilerine kaydederek denetim noktası oluşturmayı kullanmayı göz önünde bulundurun. Örneğin, durum bilgilerini bir kuyruk iletisinde kalıcı hale gelebilir ve görevin en baştan yeniden başlatmak yerine bilinen son iyi denetim noktasından devam etmesi için bu durumu görev ilerleme durumuyla artımlı olarak güncelleştirebilirsiniz. Service Bus kuyruklarını kullandığınızda, uygulama işleme durumunu kaydetmek ve almak için ileti oturumlarını kullanabilirsiniz. Güvenilir çok adımlı işlemler ve iş akışları tasarlama hakkında daha fazla bilgi için zamanlayıcı aracısı gözetmen düzenine bakın.
Barındırma platformu sonlandırmaya işaret ettiğinde arka plan görevlerini düzgün bir şekilde kapatacak şekilde tasarla. Dağıtımlar, ölçek küçültme olayları ve platform bakımı, çalışan bir örneği herhangi bir zamanda durdurabilir. Arka plan görevi çalışırken (kapsayıcılarda olduğu gibi
SIGTERM) sonlandırma sinyali aldığında, yeni çalışmayı kabul etmeyi durdurmalı, geçerli iş öğesini bitirmeli veya kontrol noktası yapmalı ve temiz bir şekilde çıkmalıdır. Kuyruk temelli görevler için nazik kapatma, mesajın gereksiz yere yeniden teslim edilmemesi için işlem sona ermeden önce mevcut mesajın tamamlanması anlamına gelir. Görev zamanında tamamlanamıyorsa, ilerleme durumunu denetlemeli veya başka bir örneğin işi işlemesi için ileti görünürlüğü zaman aşımı süresinin dolmasına izin vermelidir.Normal iş öğenizin tamamlanması için platformun kapatma müsaade süresini yeterince uzun ayarlayın. Kubernetes'te pod spesifikasyonunu
terminationGracePeriodSecondsüzerinde ayarlayın. İşlevler Esnek Tüketim ve Premium planlarında, platform içeri ölçeklendirme sırasında devam eden çalışmaların tamamlanması için otomatik olarak 60 dakikaya kadar süre sağlar.Arka plan görevleriyle iletişim kurmak için kuyrukları kullandığınızda kuyruklar, uygulama normalden daha yüksek bir yük altındayken istekleri depolamak için bir arabellek olarak işlev görebilir. Bu tasarım, görevlerin daha az meşgul dönemlerde kullanıcı arabirimini yakalamasını sağlar. Ayrıca yeniden başlatmalar kullanıcı arabirimini engellemez. Daha fazla bilgi için bkz .Queue-Based Yük Dengeleme düzeni. Bazı görevler diğerlerinden daha önemliyse, bu görevlerin daha az önemli görevlerden önce çalıştığından emin olmak için Öncelik Sırası düzenini uygulamayı göz önünde bulundurun.
İletilerin başlattığı veya iletileri işleyen arka plan görevleri, sıra dışı gelen iletiler, sürekli hataya neden olan iletiler (genellikle zehirli iletiler olarak bilinir) ve birden çok kez teslim edilen iletiler gibi tutarsızlıkları işlemelidir. Aşağıdaki etmenleri inceleyin:
Geçerli veri değerine bağlı güncelleştirmeler gibi sıralı işleme gerektiren iletiler gönderildikleri sırayla teslim edilemeyebilir. Alternatif olarak, bir arka plan görevinin farklı örnekleri de her örnekteki değişen yükler nedeniyle bunları farklı bir sırada işleyebilir. Belirli bir sırada işlenmesi gereken iletiler sıra numarası, anahtar veya arka plan görevlerinin doğru işleme sırasını sağlamak için kullanabileceği başka bir gösterge içermelidir. Service Bus kullanıyorsanız, teslim sırasını garanti etmek için ileti oturumlarını kullanabilirsiniz. Ancak, mümkün olduğunda, ileti sırasının önemli olmaması için süreci tasarlamak genellikle daha verimlidir.
Arka plan görevi genellikle kuyruktaki iletilere göz atar ve bu da iletileri diğer ileti tüketicilerinden geçici olarak gizler. Görev bir iletiyi başarıyla işledikten sonra 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 başka bir örneği veya bu örneğin sonraki işlem döngüsü bunu işler. Mesaj sürekli olarak tüketicide hataya neden oluyorsa, kuyruk dolduğunda görevi ve kuyruğu, sonunda da uygulamayı engeller. Zehirli iletileri algılayın ve kuyruktan kaldırın. Service Bus kullanıyorsanız, hataya neden olan iletileri otomatik olarak taşıyabilir veya bunları el ile ilişkili bir teslim edilemeyen ileti kuyruğuna taşıyabilirsiniz.
Kuyruklar, bir iletinin birden çok kez teslim edilebileceği anlamına gelen en az bir kez teslim mekanizmalarını garanti eder. 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 hale gelir. Tüm mesaja dayalı arka plan görevleri idempotent olmalıdır. Daha fazla bilgi için Idempotans için tasarım bölümüne bakın.
Geçici hataları iş işlemcinizdeki kalıcı hatalardan ayırt edin. Arka plan görevi bir iletiyi işleyemediğinde, kuyruk otomatik olarak yeniden teslim eder. Hata, aşağı akış zaman aşımı veya kısıtlama yanıtı gibi geçiciyse, yeniden teslim istendiği gibi çalışır. Hatalı biçimlendirilmiş yük veya başvuruda bulunulamamış veriler gibi hata kalıcı olursa, ileti her denemede başarısız olur. kalıcı hataları algılamak için iş işlemcinizi ayarlayın ve bu iletileri yeniden deneme girişimlerini kullanmak yerine doğrudan bir teslim edilemeyen ileti kuyruğuna yönlendirin. Kuyruğun maksimum teslim sayısı, iletiyi otomatik olarak ölü-harf kuyruğuna taşımadan önce kuyruğun kaç kez yeniden deneyeceğini denetler. İşleme mantığınızdaki geçici koşulları işleme hakkında daha fazla bilgi için bkz. Geçici hata işleme.
Güvenlik konuları
Arka plan işleri genellikle veri depolarına, API'lere ve iç hizmetlere kullanıcıya yönelik uygulamaya göre daha geniş erişimle çalışır. Arka plan görevleri için güvenlik planlarken aşağıdaki noktaları göz önünde bulundurun:
İş işlemcilerine en az ayrıcalık erişimi verin. Kuyruktan okuyan ve veritabanına yazan bir arka plan işi yalnızca bu iki işlemi yapma iznine sahip olmalıdır. Kullanıcı arabirimine veya yönetici API'lerine de hizmet veren geniş bir uygulama kimliğini yeniden kullanmaktan kaçının. bir iş işlemcisi tehlikeye atılırsa, etkinin kapsamı verilen izinlerle sınırlı kalır.
Hassas verileri ileti yüklerinden uzak tutun. Kuyruk iletileri günlüğe kaydedilebilir, ölü harfe yerleştirilebilir veya hata ayıklama sırasında incelenebilir. Kişisel bilgiler veya kimlik bilgileri gibi hassas verileri doğrudan bir iletiye yerleştirmek yerine, verileri korumalı bir veri deposunda depolayın ve işin verileri almak için kullandığı iletiye bir başvuru tanımlayıcısı geçirin.
Gözlemlenebilirlik konusunda dikkat edilmesi gerekenler
Arka plan işleri kullanıcı olmadan çalıştırıldığından, etkin olarak izlemediğiniz sürece hatalar sessizdir. Arka plan görevleri için gözlemlenebilirlik planlarken aşağıdaki noktaları göz önünde bulundurun:
yalnızca iş başlangıcını değil, işin tamamlanmasını da izleyin. Bir arka plan işi başladığında, tamamlandığında veya başarısız olduğunda, günlüğe kaydedin. İş türünü, işi tetikleyen olaya veya iletiye geri bağlayan bağıntı tanımlayıcısını ve geçen süreyi ekleyin. Tamamlama takibi olmadan, çalışmayı askıda bırakan veya sessizce çöken bir iş normal şekilde çalışıyor gibi görünebilir.
Kaçırılan zamanlamalarla ilgili uyarı. Zamanlama temelli görevler için beklenen her çalıştırmanın gerçekleşip gerçekleşmediğini kontrol edin. Zamanlanmış bir iş tetiklenmiyorsa, hiçbir şey çalışmadığından yakalanacak bir hata yoktur. Gerçek çalışma sürelerini beklenen zamanlamayla karşılaştırın ve bir çalıştırma eksik olduğunda uyarı verin.
Teslim edilemeyen ileti kuyruklarını izleyin. Ölü-harfli iletiler, tamamlanmamış arka plan çalışmalarını temsil eder. İşlem ekibinizin hataları araştırabilmesi, temel sorunu düzeltebilmesi ve iletileri yeniden gönderebilmesi için teslim edilemeyen ileti kuyruğu derinliği ve ileti yaşı ile ilgili uyarılar ayarlayın. İzleme olmadan, başarısız çalışma sessizce birikir.
Yalnızca işlem süresini değil kuyruk bekleme süresini de ölçün. İş etkisi, iletinin sıraya alınma süresinden tamamlanma süresine kadar geçen süreye göre belirlenir. Örneğin, 2 saniye içinde işleyen ancak 30 dakika kuyrukta duran bir iş 30 dakikalık gecikmeye neden olur. İş başına işlem süresiyle birlikte sıraya alma ve tamamlama arasındaki gecikmeyi izleyin.
İş adımları arasında bağıntı oluşturun. Çok adımlı arka plan işleri birden çok hizmete, kuyruğa ve işlem örneğine yayılabilir. Günlüklerinizde ve dağıtılmış izlerinizde tek bir iş öğesinin tam yaşam döngüsünü takip edebilmek için her adımda bir korelasyon tanımlayıcısı aktarın.
Ölçekleme ve performans ile ilgili önemli noktalar
Arka plan görevleri, işin ulaşma hızına ayak uydurmalıdır. Görevler geride kalırsa kuyruklar büyür, gecikme süresi artar ve aşağı akış işlemleri durur. Arka plan görevleri için ölçeklendirmeyi planlarken aşağıdaki noktaları göz önünde bulundurun:
Yalnızca CPU'ya değil kuyruk derinliğine göre ölçeklendirin. Mesaj tabanlı arka plan görevleri için ölçeklendirme sinyalinin en kullanışlı olanı, mevcut örneklerin ne kadar yoğun olduğundan ziyade kuyrukta ne kadar işin beklediğidir. İşlevler, Container Apps ve AKS ( KEDA aracılığıyla) tümü kuyruk uzunluğuna, konu aboneliği sayısına veya diğer olay kaynağı ölçümlerine göre ölçeklendirmeyi destekler. Bu yaklaşım, iş biriktiğinde kapasite ekler ve kuyruklar boşaldığında kapasiteyi azaltır.
Aralıklı iş yükleri için sıfıra ölçeklendirme kullanın. Arka plan işleriniz yalnızca boşta kalma dönemleri olan gecelik toplu işler veya olay odaklı işleme gibi belirli saatlerde çalıştırılırsa, iş olmadığında sıfıra ölçeklendirilen bir barındırma modeli kullanın. İşlevler ve Container Apps işleri sıfıra ölçeklendirilebileceğinden boşta işlem için ödeme yapamazsınız.
Arka plan görevlerini uygulamadan bağımsız olarak ölçeklendirin. Kullanıcı arabirimi ve arka plan işlemenin farklı sinyallere göre ölçeklendirilmesi için arka plan görevlerini ayrı bir işlem hizmetinde barındırın. Farklı aktarım hızı özelliklerine sahip birden çok arka plan görev türünüz varsa, her türün bağımsız olarak ölçeklenebilmesi için bunları ayırmayı göz önünde bulundurun.
İşleme hattının tamamını ölçeklendirin, yalnızca hesaplamayı değil. Kuyruk, veritabanı veya aşağı akış API'sinin performans sorununa dönüşmesinde daha fazla görev örneği yardımcı olmaz. İleti aktarım hızı birimleri, veritabanı istek birimleri ve API hız sınırları dahil olmak üzere işlem hattı genelinde aktarım hızı sınırlarını belirleyin. Hesaplama kaynaklarınızın yanı sıra bu kaynakları da ölçeklendirin.
Gerektiğinde tek örnekli yürütmeyi zorunlu kılma. Zamanlanmış bazı arka plan görevleri, veritabanı bakımı veya idempotent olmayan rapor oluşturma işlemleri gibi eşzamanlı olarak çalışmamalıdır. İşlev zamanlayıcı tetikleyicileri, yalnızca bir örneğin çalıştığından emin olmak için dağıtılmış bir kilit kullanır. Kapsayıcılar için Kubernetes CronJob
concurrencyPolicy: Forbidayarını veya Container Apps iş düzeyinde eşzamanlılık ayarlarını kullanın.