Arka plan işleri
Birçok uygulama türünün kullanıcı arabiriminden (UI) bağımsız olarak çalışması için arka plan görevleri gerekir. Toplu işler, yoğun işleme görevleri ve iş akışları gibi uzun süre çalışan işlemler bunların örneklerindendir. Arka plan işleri, kullanıcı etkileşimi gerektirmeden yürütülebilir; uygulama işi başlatabilir ve sonra kullanıcılardan gelen etkileşimli istekleri yürütmeye devam edebilir. Bu özellik, uygulama kullanıcı arabirimi üzerindeki yükü en aza indirmeye yardımcı olarak kullanılabilirliği artırabilir ve etkileşimli yanıt sürelerini azaltabilir.
Örneğin, bir uygulamanın kullanıcı tarafından karşıya yüklenen görüntülere ait küçük resimler oluşturması gerekiyorsa, bu işlemi bir arka plan işi olarak yapabilir ve tamamlandığında, kullanıcının işlemin tamamlanmasını beklemesine gerek kalmadan, küçük resmi depolama alanına kaydedebilir. Aynı ş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 atmasına izin verir. Arka plan işi tamamlandığında, depolanmış sipariş verilerini güncelleştirebilir ve kullanıcıya siparişi onaylayan bir e-posta gönderebilir.
Bir görevi arka plan işi olarak uygulayıp uygulamayacağınızı düşündüğünüzde ana ölçüt, görevin kullanıcı etkileşimi olmadan ve kullanıcı arabiriminin işin tamamlanmasını beklemesine gerek kalmadan çalışıp çalışamamasıdır. Kullanıcı etkileşimini veya tamamlanırken kullanıcı arabiriminin beklemesini gerektiren görevler, arka plan işleri gibi uygun olmayabilir.
Arka plan işlerinin türleri
Arka plan işleri genellikle aşağıdaki iş türlerinden bir veya daha fazlasını içerir:
- Matematik hesaplamaları veya yapısal model analizi gibi CPU yoğunluklu işler.
- Bir dizi depolama işlemi yürütme ya da dosyaları dizinleme gibi G/Ç yoğunluklu işler.
- Gecelik veri güncelleştirmeleri veya zamanlanmış işlemeler gibi toplu işler.
- Siparişi yerine getirme veya hizmet ve sistemleri hazırlama gibi uzun süreli iş akışları.
- Görevin işlenmek üzere daha güvenli bir konuma devredildiği hassas veri işlemleri. Ö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 sürecine aktarımı için Ağ GeçidiKeeper düzeni gibi bir desen kullanabilirsiniz.
Tetikleyiciler
Arka plan işleri birkaç farklı şekilde başlatılabilir. Aşağıdaki kategorilerden birine denk gelirler:
- Olay odaklı tetikleyiciler. Görev genellikle bir kullanıcı ya da bir iş akışındaki adım tarafından gerçekleştirilen bir eylemi ifade eden olaya yanıt olarak başlatılır.
- Zamanlama temelli tetikleyiciler. Görev bir zamanlayıcıyı temel alan zamanlamaya göre çağrılır. Bu, yinelenen bir zamanlama veya daha sonraki bir zaman için belirtilen tek seferlik bir çağrı olabilir.
Olay temelli tetikleyiciler
Olay temelli çağrı, arka plan görevini başlatmak için bir tetikleyici kullanır. Olay temelli tetikleyicileri kullanma ö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 meydana gelen bir eylem hakkında veriler içerir. Arka plan görevi bu kuyruğu dinler ve yeni bir iletinin geldiğini algılar. İletiyi okur ve içindeki verileri arka plan işinin girdisi olarak kullanır.
- Kullanıcı arabirimi veya başka bir iş, depolama alanındaki bir değeri kaydeder veya güncelleştirir. Arka plan görevi, depolama alanını izler ve değişiklikleri algılar. Verileri okur ve arka plan işinin girdisi olarak kullanır.
- Kullanıcı arabirimi veya başka bir iş, HTTPS URI ya da web hizmeti olarak kullanıma sunulan API gibi bir uç noktaya istekte bulunur. Arka plan görevini tamamlamak için gereken verileri isteğin parçası olarak geçirir. Uç nokta veya web hizmeti, girdisi olarak verileri kullanan arka plan görevini çağırır.
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, olay temelli çağrıya uygun görevlerin tipik örneklerindendir.
Zamanlama temelli tetikleyiciler
Zamanlama temelli çağrı, arka plan görevini başlatmak için bir zamanlayıcı kullanır. Zamanlama temelli tetikleyicileri kullanma ö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 süreölçer, API'ye veya web hizmetine düzenli aralıklarla istek gönderir. API veya web hizmeti, arka plan görevini çağırır.
- Ayrı bir işlem veya uygulama, belirtilen bir gecikme sonrasında veya belirtilen saatte arka plan görevinin çağrılmasına neden olan bir zamanlayıcı başlatır.
Toplu işleme rutinleri (yakın zamandaki 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 tutma temizliği ve veri tutarlılığı denetimleri, zamanlama temelli çağrıya uygun görevlerin tipik örneklerindendir.
Tek örnek olarak çalışması gereken zamanlama temelli bir görev kullanıyorsanız aşağıdakilere dikkat edin:
- Zamanlayıcıyı çalıştıran hesaplama örneği (zamanlanmış Windows görevleri kullanan bir sanal makine gibi) ölçeklenirse, birden fazla çalışan zamanlayıcı örneğiniz olur. Bunlar görevin birden fazla örneğini başlatabilir.
- Görevler zamanlayıcı olayları arasındaki dönemden daha uzun süre boyunca çalışırsa, önceki görev çalışmaya devam ederken zamanlayıcı görevin başka bir örneğini başlatabilir.
Sonuç döndürme
Arka plan işleri ayrı bir işlemde veya hatta ayrı bir konumda, arka plan görevini çağıran kullanıcı arabiriminden ya da işlemden zaman uyumsuz olarak yürütülür. İdeal olarak, arka plan görevleri "yangın ve unut" işlemleridir ve yürütme ilerlemelerinin kullanıcı arabirimini veya çağırma işlemini etkilemesi yoktur. Diğer bir deyişle, çağırma işlemi görevin tamamlanmasını beklemez. Bu nedenle, görev bittiğinde otomatik olarak algılayamaz.
İlerleme veya tamamlanma durumunu göstermek üzere bir arka plan görevinin çağırma göreviyle iletişim kurmasını istiyorsanız, buna yönelik bir mekanizma uygulamanız gerekir. Bazı örnekler şunlardır:
- Kullanıcı arabirimi veya çağıran görevinin erişebildiği depolama alanına, gerektiğinde izlenebilecek veya denetlenebilecek bir durum göstergesi değeri yazın. Arka plan görevinin çağırana döndürmesi gereken diğer veriler aynı depolama alanına yerleştirilebilir.
- Kullanıcı arabirimi veya çağıranın dinlediği bir yanıt kuyruğu oluşturun. Arka plan görevi, kuyruğa durumu ve tamamlanmayı gösteren iletiler gönderebilir. Arka plan görevinin çağırana döndürmesi gereken veriler iletilere yerleştirilebilir. Azure Service Bus kullanıyorsanız, bu özelliği uygulamak için ReplyTo ve CorrelationId özelliklerini kullanabilirsiniz.
- 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. Arka plan görevinin çağırana döndürmesi gereken veriler yanıta eklenebilir.
- Arka plan görevinin önceden tanımlanmış noktalarda veya tamamlandıktan sonra durumu belirtmek üzere bir API aracılığıyla kullanıcı arabirimini veya çağıranı geri çağırmasını sağlayın. Bu işlem, yerel olarak oluşturulan olaylar veya bir yayımla ve abone ol mekanizması aracılığıyla gerçekleştirilebilir. Arka plan görevinin çağırana döndürmesi gereken veriler yanıta veya olay yüküne eklenebilir.
Barındırma ortamı
Arka plan görevlerini bir dizi farklı Azure platform hizmetini kullanarak barındırabilirsiniz:
- Azure Web Apps ve WebJobs. WebJobs’ı kullanarak bir web uygulaması bağlamında bir dizi farklı türde betik ya da yürütülebilir programı temel alan özel işler yürütebilirsiniz.
- Azure İşlevleri. İşlevleri, uzun süre çalıştırılana arka plan işleri için kullanabilirsiniz. Bir diğer kullanım durumu da iş yükünüz zaten bir plan üzerinde App Service az kullanılıyorsa olabilir.
- Azure Sanal Makineler. Bir Windows hizmetiniz varsa veya Windows Görev Zamanlayıcı'yı kullanmak istiyorsanız, arka plan görevlerinizi ayrılmış bir sanal makine içinde barındırmak yaygın bir yöntemdir.
- Azure Batch. Batch, yönetilen bir sanal makine koleksiyonunda çalışacak işlem yoğunluklu işleri zamanlayan bir platform hizmetidir. İşlem kaynaklarını otomatik olarak ölçeklendirebilir.
- Azure Kubernetes Service (AKS). Azure Kubernetes Service Azure'da Kubernetes için yönetilen bir barındırma ortamı sağlar.
Aşağıdaki bölümlerde bu seçeneklerin her biri daha ayrıntılı olarak açıklanmakta ve uygun seçeneği belirlemenize yardımcı olacak hususlar yer almaktadır.
Azure Web Apps ve Web İşleri
Azure Web İşleri’ni kullanarak özel işleri bir Azure Web Uygulaması içinde arka plan görevleri olarak yürütebilirsiniz. Web İşleri, sürekli bir işlem olarak web uygulamanızın bağlamında çalışır. WebJobs ayrıca depolama blobları ve ileti kuyruklarında yapılan Azure Logic Apps dış faktörlerden gelen tetikleyici olayına yanıt olarak da çalıştırabilirsiniz. İşler isteğe bağlı olarak başlatılıp durdurulabilir ve düzgün biçimde kapatılabilir. Sürekli olarak çalışan bir Web İşi başarısız olursa otomatik olarak yeniden başlatılır. Yeniden deneme ve hata eylemleri yapılandırılabilir özelliktedir.
Bir Web İşini yapılandırırken:
- İşin olay temelli bir tetikleyiciye yanıt vermesini istiyorsanız Sürekli çalıştır olarak yapılandırmanız gerekir. Betik veya program, site/wwwroot/app_data/jobs/continuous adlı klasörde depolanır.
- İşin zamanlama temelli bir tetikleyiciye yanıt vermesini istiyorsanız Bir zamanlamaya göre çalıştır olarak yapılandırmanız gerekir. 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ı olarak çalıştır seçeneğini belirlerseniz, başlattığınızda Bir zamanlamaya göre çalıştır seçeneği ile aynı kodu yürütür.
Azure Web İşleri, web uygulamasının korumalı alanı içinde çalışır. Bu durum, ortam değişkenlerine erişebildiği ve bağlantı dizeleri gibi bilgileri web uygulaması ile paylaşabildiği anlamına gelir. İş, işi çalıştıran makinenin benzersiz tanıtıcısına erişebilir. AzureWebJobsStorage adlı bağlantı dizesi, uygulama verileri için Azure depolama kuyruklarına, bloblara ve tablolara, mesajlaşma ve iletişim için Service Bus’a erişim sağlar. AzureWebJobsDashboard adlı bağlantı dizesi, iş eylemi günlük dosyalarına erişim sağlar.
Azure Web İşleri aşağıdaki özelliklere sahiptir:
- Güvenlik: Web İşleri, web uygulamasının dağıtım kimlik bilgileri tarafından korunur.
- Desteklenen dosya türleri: Web İşlerini komut betikleri (.cmd), toplu iş dosyaları (.bat), PowerShell betikleri (.ps1), bash kabuk betikleri (.sh), PHP betikleri (.php), Python betikleri (.py), JavaScript kodu (.js) yürütülebilir programlar (.exe, .jar ve daha fazlası) kullanarak tanımlayabilirsiniz.
- Dağıtım: Azure portalı, Visual Studio veya Azure Web İşleri SDK’sı kullanarak ya da bunları doğrudan aşağıdaki konumlara kopyalayarak betikleri ve yürütülebilir dosyaları dağıtabilirsiniz:
- Tetiklenen yürütme için: site/wwwroot/app_data/jobs/triggered/{job name}
- Sürekli yürütme için: site/wwwroot/app_data/jobs/continuous/{job name}
- Günlüğe kaydetme: Console.Out dosyası INFO olarak kabul edilir (işaretlenir). Console.Error dosyası ERROR olarak kabul edilir. Azure portalını kullanarak izleme ve tanılama bilgilerine erişebilirsiniz. Günlük dosyalarını doğrudan siteden indirebilirsiniz. Şu konumlara kaydedilirler:
- Tetiklenen yürütme için: Vfs/data/jobs/triggered/jobName
- Sürekli yürütme için: Vfs/data/jobs/continuous/jobName
- Yapılandırma: Portal, REST API ve PowerShell kullanarak Web İşlerini yapılandırabilirsiniz. Bir işin yapılandırma bilgilerini sağlamak için iş betiği ile aynı kök dizinde bulunan settings.job adlı yapılandırma dosyasını kullanabilirsiniz. Örnek:
- { "stopping_wait_time": 60 }
- { "is_singleton": true }
Dikkat edilmesi gerekenler
- Varsayılan olarak, Web İşleri web uygulaması ile ölçeklenir. Ancak, is_singleton yapılandırma özelliğini true olarak ayarlayarak işleri tek örnekte çalışacak şekilde yapılandırabilirsiniz. Tek örnek Web İşleri yeniden dizinleme, veri analizi ve benzer görevler gibi ölçeklemek veya aynı anda birden çok örnek olarak çalıştırmak istemediğiniz görevler için yararlıdır.
- Web uygulamasının performansına göre işlerin etkisini en aza indirmek için, uzun süreli veya Kaynak yoğunluklu Web Işlerini barındırmak üzere yeni bir App Service planında boş bir Azure Web uygulaması örneği oluşturmayı düşünün.
Azure İşlevleri
WebJobs 'a benzer bir seçenek de Azure Işlevleridir. Bu hizmet, kısa bir süre için çalışan olay odaklı tetikleyicilere en uygun olan sunucusuz. Bir işlev, belirlenen saatlerde çalışacak şekilde yapılandırıldığında Zamanlayıcı Tetikleyicileri aracılığıyla zamanlanan işleri çalıştırmak için de kullanılabilir.
Azure Işlevleri, uzun süre çalışan çok sayıda görev için önerilen bir seçenek değildir çünkü bu, beklenmeyen zaman aşımı sorunlarına neden olabilir. Ancak, barındırma planına bağlı olarak, zamanlamaya dayalı Tetikleyiciler için göz önünde bulundurulur.
Dikkat edilmesi gerekenler
Arka plan görevinin bir olaya yanıt olarak kısa bir süre çalışması bekleniyorsa, görevi bir tüketim planında çalıştırmayı göz önünde bulundurun. Yürütme süresi en fazla bir kez yapılandırılabilir. Daha uzun maliyetler için çalışan bir işlev. Ayrıca, daha fazla bellek kullanan CPU yoğun işler daha pahalı olabilir. Görevin bir parçası olarak hizmetler için ek Tetikleyiciler kullanıyorsanız, bunlar ayrı olarak faturalandırılır.
Premium planı, kısa olan ancak sürekli olarak çalıştırılması beklenen yüksek sayıda göreviniz varsa daha uygundur. Bu plan daha pahalıdır çünkü daha fazla bellek ve CPU gerektirir. Bunun avantajı, sanal ağ tümleştirmesi gibi özellikleri kullanabilmeniz.
Adanmış plan, iş yükünüz zaten üzerinde çalışıyorsa arka plan işleri için en uygundur. VM 'Leri az önce kullandıysanız, aynı VM 'de çalıştırabilir ve işlem maliyetlerini paylaşabilirsiniz.
Daha fazla bilgi için şu makalelere bakın:
Azure Sanal Makineler
Arka plan görevleri, Azure Web Apps dağıtım yapılmasını önleyen bir şekilde uygulanabilir veya bu seçenekler kullanışlı olmayabilir. Windows hizmetleri ile üçüncü taraf yardımcı programlar ve yürütülebilir programlar tipik örneklerdendir. Başka bir örnek ise uygulamayı barındırandan farklı bir yürütme ortamı için yazılmış programlar olabilir. Örneğin, bir Windows ya da .NET uygulamasından yürütmek istediğiniz bir Unix ya da Linux programı olabilir. Bir Azure sanal makine için çeşitli işletim sistemleri arasından seçim yapabilir ve hizmetinizi ya da yürütülebilir dosyanızı o sanal makinede çalıştırabilirsiniz.
Sanal Makine kullanmayı ne zaman seçeceğinize yardımcı olması için bkz. Azure App Services, Cloud Services ve Sanal Makineler karşılaştırması. sanal makineler için seçenekler hakkında daha fazla bilgi için bkz. Azure 'da Windows sanal makineler için boyutlar. Sanal Makineler ile kullanılabilen işletim sistemleri ve önceden oluşturulmuş görüntüler hakkında daha fazla bilgi için bkz. Azure Sanal Makineler Marketi.
Ayrı bir sanal makinede bir arka plan görevi başlatmak için bir dizi seçeneğiniz vardır:
- Görevin kullanıma sunduğu uç noktaya bir istek göndererek görevi doğrudan uygulamanızdan isteğe bağlı olarak yürütebilirsiniz. Bunun yapılması, görev için gereken tüm verileri geçirir. Bu uç nokta, görevi çağırır.
- Seçtiğiniz işletim sisteminde mevcut olan bir zamanlayıcı seçerek görevi bir zamanlamaya göre çalışacak şekilde yapılandırabilirsiniz. Örneğin, Windows’ta betik ve görevleri yürütmek için Windows Görev Zamanlayıcı’yı kullanabilirsiniz. Sanal makinenizde SQL Server yüklüyse, betik ve görevleri yürütmek için SQL Server Agent’ı kullanabilirsiniz.
- görevin dinlediği bir kuyruğa ileti ekleyerek veya görevin sunduğu bir apı 'ye istek göndererek görevi başlatmak için Azure Logic Apps kullanabilirsiniz.
Arka plan görevlerini nasıl başlatabileceğiniz hakkında daha fazla bilgi için daha önceki Tetikleyiciler bölümüne bakın.
Dikkat edilmesi gerekenler
Bir Azure sanal makinesinde arka plan görevlerini dağıtıp dağıtmamaya karar verirken aşağıdaki noktaları göz önünde bulundurun:
- Arka plan görevlerinin ayrı bir Azure sanal makinesinde barındırılması esneklik sunar ve başlatma, yürütme, zamanlama ve kaynak ayırma üzerinde tam denetim sağlar. Ancak, yalnızca arka plan görevleri çalıştırmak için bir sanal makinenin dağıtılması gerekiyorsa çalışma zamanı maliyetini artırır.
- Azure portal görevleri izlemeye yönelik bir özellik yoktur ve başarısız görevler için otomatik yeniden başlatma yeteneği yoktur; ancak, sanal makinenin temel durumunu izleyebilir ve Azure Resource Manager cmdlet 'lerinikullanarak yönetebilirsiniz. Bununla birlikte, işlem düğümlerindeki işlemleri ve iş parçacıklarını denetleme olanağı yoktur. Genellikle, sanal makine kullanmak görevdeki izlemeden ve sanal makinedeki işletim sisteminden veri toplayan bir mekanizma uygulamak için ek çaba gerektirir. Uygun olabilecek bir çözüm ise Azure için System Center Yönetim Paketi kullanmaktır.
- HTTP uç noktaları aracılığıyla kullanıma sunulan izleme araştırmaları oluşturmayı düşünebilirsiniz. Bu araştırmaların kodu sistem durumu denetimleri gerçekleştirir, çalışma bilgileri ve istatistikleri toplar veya hata bilgilerini harmanlar ve bir yönetim uygulamasına döndürür. Daha fazla bilgi için sistem durumu uç nokta izleme düzeninebakın.
Daha fazla bilgi için bkz.
Azure Batch
Onlarca, yüzlerce veya binlerce VM’de büyük, paralel yüksek performanslı hesaplama (HPC) iş yükleri çalıştırmanız gerekiyorsa Azure Batch kullanmayı düşünün.
Batch hizmeti VM’leri sağlar, görevleri VM'lere atar, çalıştırır ve ilerleme durumunu izler. Batch, iş yüküne yanıt olarak VM’lerin ölçeğini otomatik olarak artırabilir. Batch ayrıca iş zamanlaması sağlar. Azure Batch hem Linux hem de Windows sanal makinelerini destekler.
Dikkat edilmesi gerekenler
Batch, doğası gereği paralel iş yükleri ile iyi çalışır. Ayrıca, en sonda bir azaltma adımı ile paralel hesaplamalar gerçekleştirebilir veya düğümler arasında ileti geçirmeyi gerektiren paralel görevler için İleti Geçirme Arabirimi (MPI) uygulamaları çalıştırır.
Bir Azure Batch işi, bir düğüm havuzu (VM) üzerinde çalışır. Bir yaklaşım, yalnızca gerektiğinde bir havuz ayırmak ve iş tamamlandıktan sonra havuzu silmektir. Bu yaklaşım, düğümler boşta olmadığı için kullanımı en üst düzeye çıkarır ancak iş, düğümlerin ayrılmasını beklemek zorundadır. Alternatif olarak, önceden bir havuz oluşturabilirsiniz. Bu yaklaşım, bir işin başlama süresini en aza indirir ancak sonuçta boşta duran düğümleriniz olabilir. Daha fazla bilgi için bkz. Havuz ve işlem düğümü ömrü.
Daha fazla bilgi için bkz.
- Azure Batch nedir?
- Batch içe büyük ölçekli paralel işlem çözümleri geliştirme
- Büyük ölçekli bilgi işlem iş yükleri için Batch ve HPC çözümleri
Azure Kubernetes Service
Azure Kubernetes Service (AKS), barındırılan Kubernetes ortamınızı yönetir ve kapsayıcılı uygulamaları dağıtmayı ve yönetmeyi kolaylaştırır.
Kapsayıcılar arka plan işlerini çalıştırmak için yararlı olabilir. 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.
- Kapsayıcı düzenleyicisi iç yük dengelemeyi gerçekleştirir, iç ağı yapılandırır ve diğer yapılandırma görevlerini tamamlar.
- Kapsayıcılar gerektiğinde başlatılıp durdurulabilir.
- Azure Container Registry, Azure sınırları içindeki kapsayıcılarınızı kaydetmenize olanak tanır. Bu hizmet güvenlik, gizlilik ve yakınlık avantajları ile birlikte sunulur.
Dikkat edilmesi gerekenler
- Bir kapsayıcı düzenleyicisinin nasıl kullanılacağını bilmeyi gerektirir. Bu sorun, DevOps takımınıza bağlı olarak sorun olabilir veya olmayacaktır.
Daha fazla bilgi için bkz.
Bölümleme
Mevcut bir işlem örneğine arka plan görevleri dahil etmek için bunun işlem örneğinin kalite özniteliklerini ve arka plan görevinin kendisini nasıl etkileyeceğini göz önünde bulundurabilirsiniz. Bu etkenler, görevleri mevcut işlem örneğiyle birlikte bulundurmaya veya ayrı bir işlem örneğine ayırmaya karar vermenize yardımcı olur:
Kullanılabilirlik: Arka plan görevlerinin, başta kullanıcı arabirimi ve kullanıcı etkileşiminde doğrudan rol alan diğer kısımlar olmak üzere uygulamanın diğer kısımlarıyla aynı düzeyde kullanılabilirliğe sahip olması gerekmeyebilir. İşlemler kuyruğa alındığı için, arka plan görevleri gecikme süresine, yeniden denenen bağlantı hatalarına ve kullanılabilirliği etkileyen diğer faktörlere daha dayanıklı olabilir. Ancak, kuyrukları engelleyebilen isteklerin yedeklenmesini önlemek ve uygulamanın tamamını etkilemek için yeterli kapasite olmalıdır.
Ölçeklenebilirlik: Arka plan görevleri, kullanıcı arabiriminden ve uygulamanın etkileşimli kısımlarından farklı bir ölçeklenebilirlik gereksinimine sahip olabilir. Kullanıcı arabirimini ölçeklendirmek, talebin en yüksek olduğu dönemleri karşılamak için gerekli olabilirken, bekleyen arka plan görevleri daha az yoğun zamanlarda daha az işlem örneği tarafından tamamlanır.
Dayanıklılık: Arka plan görevlerine yönelik istekler kuyruğa alınabiliyor veya görev yeniden kullanılabilir olana kadar ertelenebiliyorsa, yalnızca arka plan görevlerini barındıran bir işlem örneğinin başarısız olması uygulamayı bütün olarak kritik biçimde etkilemeyebilir. İşlem örneği ve/veya görevleri uygun bir aralıkta yeniden başlatılabilirse uygulamanın kullanıcıları etkilenmeyebilir.
Güvenlik: Arka plan görevleri, kullanıcı arabiriminden veya uygulamanın diğer kısımlarından farklı güvenlik gereksinimlerine veya kısıtlamalara sahip olabilir. Ayrı bir işlem örneği kullanarak, görevler için farklı bir güvenlik ortamı belirtebilirsiniz. Güvenlik ve ayırmayı en üst düzeye çıkarmak için, arka plan işlem örneklerini kullanıcı arabiriminden ayırmak üzere Ağ Geçidi Denetleyicisi gibi düzenler de kullanabilirsiniz.
Performans: Görevleri performans gereksinimlerini özellikle eşleştirecek şekilde arka plan görevlerinin işlem örneği türünü seçmeniz gerekir. Bu seçim, görevler kullanıcı arabirimiyle aynı işleme özelliklerini gerektirmiyorsa daha az pahalı bir işlem seçeneği veya ek kapasite ve kaynak gerektiriyorsa daha büyük bir örnek kullanmak anlamına gelebilir.
Yönetilebilirlik: Arka plan görevleri, ana uygulama kodu veya kullanıcı arabiriminden farklı bir geliştirme ve dağıtım ritmine sahip olabilir. Bu görevlerin ayrı bir işlem örneğine dağıtılması, güncelleştirme ve sürüm oluşturmayı kolaylaştırabilir.
Maliyet: Arka plan görevleri yürütmek için işlem örnekleri eklemek, barındırma maliyetlerini artırır. Ek kapasite ile bu ek maliyetler arasındaki dengeyi dikkatlice düşünmeniz gerekir.
Daha fazla bilgi için bkz. Lider Seçimi düzeni ve Rakip Tüketiciler düzeni.
Çakışmalar
Bir arka plan işinin birden fazla örneğine sahipseniz bu örneklerin veritabanları ve depolama alanları gibi kaynak ve hizmetlere erişmek için rekabet etmesi mümkündür. Bu eşzamanlı erişim, kaynak hizmetlerin kullanılabilirliğinde ve depolama alanındaki verilerin bütünlüğünde çakışmalara neden olabilecek kaynak çekişmesi ile sonuçlanabilir. Kötümser kilitleme yaklaşımını kullanarak kaynak çekişmesini çözebilirsiniz. Bunun yapılması, bir görevin rekabet eden örneklerinin bir hizmete eşzamanlı olarak erişmesini veya verileri bozmasını önler.
Çakışmaları çözümlemeye yönelik başka bir yaklaşım ise arka plan görevlerini tekil olarak tanımlamak, böylece yalnızca bir örneğin çalışmasını sağlamaktır. Ancak, bu yaklaşım çok örnekli bir yapılandırmanın sağlayabileceği güvenilirlik ve performans avantajlarını ortadan kaldırır. Bu durum özellikle kullanıcı arabirimi birden fazla arka plan görevini meşgul tutmak için yeterli iş sağlayabildiğinde geçerlidir.
Arka plan görevinin otomatik olarak yeniden başlatılabildiğinden ve talepteki yoğunluklarla başa çıkabilecek kapasiteye sahip olduğundan emin olmak önemlidir. Yeterli kaynaklarla bir işlem örneği ayırarak, talep arttığında daha sonra yürütmek üzere istekleri depolayabilen bir kuyruğa alma mekanizması uygulayarak ya da bu tekniklerin bir birleşimini kullanarak bunu başarabilirsiniz.
Koordinasyon
Arka plan görevleri karmaşık olabilir ve bir sonuç üretmek veya tüm gereksinimleri karşılamak için birden çok tek görevlerin yürütülebilir. Bu senaryolarda görevin birden fazla tüketici tarafından yürütülebilen daha küçük adımlara veya alt görevlere bölünmesi yaygındır. Bir adım birden fazla işte yeniden kullanılabileceği için çok adımlı işler daha verimli ve daha esnek olabilir. Adım eklemek, kaldırmak veya sırasını değiştirmek de kolaydır.
Birden fazla görev ve adımın koordine edilmesi zorlu olabilir ancak bir çözümü uygulamanıza yol göstermesi için kullanabileceğiniz üç genel düzen vardır:
Bir görevi birden çok yeniden kullanılabilir adıma ayırma. Uygulamaların, işledikleri bilgiler üzerinde farklı karmaşıklık düzeyinde çeşitli görevler gerçekleştirmesi gerekebilir. Bu uygulamayı kullanıma geçirmeye yönelik basit ancak esnek olmayan bir yaklaşım, işleme faaliyetini tek parça bir modül olarak gerçekleştirmek olabilir. Ancak, aynı işlemin parçaları uygulama içinde başka bir yerde gerekliyse bu yaklaşım kodu yeniden düzenlemeye, iyileştirmeye veya yeniden kullanmaya yönelik fırsatları azaltabilir. Daha fazla bilgi için bkz. Kanallar ve Filtreler düzeni.
Bir görev için adımların yürütülmesini yönetme. Bir uygulama, bazıları uzak hizmetleri çağırabilen veya uzak kaynaklara erişebilen birkaç adımlı görevler gerçekleştirebilir. Her bir adım birbirinden bağımsız olabilir, ancak görevi uygulayan bir uygulama mantığı tarafından düzenlenirler. 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önetme. Bir uygulamanın bir dizi adımda gerçekleştirilen bir çalışmayı geri alması gerekebilir (sonunda adımlar hep birlikte tutarlı bir işlemi tanımlar). Daha fazla bilgi için bkz. Telafi İşlem düzeni.
Dayanıklılık konuları
Arka plan görevleri, uygulamaya güvenilir hizmetler sunmak için dayanıklı olmalıdır. Arka plan görevlerini planlayıp tasarlarken aşağıdaki noktaları dikkate alın:
Arka plan görevleri, verileri bozmadan veya uygulamada tutarsızlık oluşturmadan yeniden başlatmaları normal bir şekilde işleyebildi. Uzun süreli veya çok adımlı görevler için, işlerin durumunu kalıcı depolamaya veya uygunsa iletiler halinde bir kuyruğa kaydederek denetim noktası kullanmayı düşünün. Örneğin, görevin baştan yeniden başlamak yerine bilinen son iyi denetim noktasından işlenebilmesi için, bir kuyruktaki iletinin durum bilgilerini kalıcı hale getirebilir ve bu durum bilgilerini görev ilerleme durumu ile artımlı olarak güncelleştirebilirsiniz. Azure Service Bus kuyruklarını kullanırken, aynı senaryoyu etkinleştirmek için ileti oturumlarını kullanabilirsiniz. Oturumlar SetState ve GetState yöntemlerini kullanarak uygulama işleme durumunu kaydedip almanıza olanak tanır. Güvenilir çok adımlı işlemler ve iş akışları tasarlama hakkında daha fazla bilgi için bkz. Zamanlayıcı Aracısı Gözetmeni 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. Böylece görevler daha az yoğun dönemlerde kullanıcı arabirimine ayak uydurabilir. Ayrıca yeniden başlatmalar kullanıcı arabirimini engellemez. Daha fazla bilgi için bkz. Kuyruk Tabanlı Yük Dengeleme düzeni. Bazı görevler diğer görevlerden daha önemli ise, bu görevlerin daha az önemli olanlardan önce çalıştırılana kadar çalışması için Öncelik Sırası desenini uygulamayı göz önünde bulundurabilirsiniz.
İletiler veya işlem iletileri tarafından başlatılan arka plan görevleri, sıraya uygun olarak gelmeyen iletiler, tekrarlayarak hataya neden olan iletiler (genellikle zehirli iletiler olarak adlandırılır) ve birden çok kez teslim edilen iletiler gibi tutarsızlıkları giderecek şekilde tasarlanmalıdır. Aşağıdaki topluluklara bir göz atın:
Var olan veri değerine göre verileri değiştiren (örneğin, var olan bir değere değer ekleme) iletiler gibi belirli bir sırayla işlenmesi gereken iletiler, asıl gönderildikleri sırayla ulaşmayabilir. Alternatif olarak, her bir örnekteki değişen yükler nedeniyle bir arka plan görevinin farklı örnekleri tarafından farklı bir sıra ile işlenebilirler. Belirli bir sırayla işlenmesi gereken iletiler bir sıra numarası, anahtar veya arka plan görevlerinin doğru sırayla işlendiklerinden emin olmak için kullanabileceği başka bir gösterge içermelidir. Azure Service Bus kullanıyorsanız, teslim sırasını garanti etmek için ileti oturumlarını kullanabilirsiniz. Ancak, mümkün olduğunda işlemi ileti sırası önemli olmayacak şekilde tasarlamak genellikle daha verimli bir yöntemdir.
Genellikle, bir arka plan görevi kuyruktaki iletileri göz atar ve diğer ileti tüketicilerinden geçici olarak gizler. Ardından, iletiler başarıyla işlendikten sonra iletileri siler. Bir iletiyi işlerken arka plan görevi 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 tarafından veya bu örneğin sonraki işleme döngüsü sırasında işlenir. İleti, tüketicide tutarlı bir şekilde hataya neden oluyorsa, kuyruk dolduğunda görevi ve kuyruğu ve sonunda uygulamayı engeller. Bu nedenle, zehirli iletilerin algılanması ve kuyruktan çıkarılması çok önemlidir. Azure Service Bus kullanıyorsanız, hataya neden olan iletiler ilişkili bir teslim edilemeyen iletiler sırasına otomatik olarak veya elle taşınabilir.
Kuyruklar en az bir kez teslim garantili mekanizmalardır ancak aynı iletiyi birden çok kez teslim edebilirler. Ayrıca, bir ileti işlendikten sonra ve kuyruktan silinmeden önce bir arka plan görevi başarısız olursa, ileti yeniden işlenmek için kullanılabilir hale gelir. Arka plan görevleri bir kez etkili olmalı, yani aynı iletiyi birden çok kez işleme uygulamanın verisinde hataya veya tutarsızlıklara neden olmaz. Depolanmış bir değerin belirli bir yeni değere ayarlanması gibi bazı işlemler doğası gereği bir kez etkilidir. Ancak, depolanmış değerin hala ileti ilk gönderildiğinde olduğu gibi olup olmadığını denetlemeden var olan depolanmış bir değere değer eklemek gibi işlemler tutarsızlıklara neden olur. Azure Service Bus kuyrukları, yinelenen iletileri otomatik olarak kaldıracak şekilde yapılandırılabilir.
Azure depolama kuyrukları ve Azure Service Bus kuyrukları gibi bazı ileti sistemleri, bir iletinin kuyruktan kaç kez okunduğunu belirten bir kuyruktan çıkarma sayımı özelliğini destekler. Bu özellik, yinelenen ve zehirli iletilerin işlenmesinde yararlı olabilir. Daha fazla bilgi için bkz. Zaman Uyumsuz Mesajlaşma Temel Bilgileri ve Teklik Düzenleri.
Ölçeklendirme ve performans ile ilgili önemli noktalar
Arka plan görevleri, sistem yük altındayken uygulamayı engellemediklerinden veya geciken işlem nedeniyle tutarsızlıklara neden olmadığından emin olmak için yeterli performans sunmalıdır. Genellikle, arka plan görevlerini barındıran işlem örnekleri ölçeklendirilerek performans geliştirilir. Arka plan görevlerini planlayıp tasarlarken ölçeklenebilirlik ve performans konusunda aşağıdaki noktaları dikkate alın:
Azure, Web Apps ve sanal makinelerde barındırılan dağıtımlar için otomatik ölçeklendirmeyi (hem genişleme hem de ölçeklendirilmesi) destekler. Çalışma zamanı maliyetlerini en aza indirirken uygulamanın bütün olarak yeterli performans özelliklerine sahip olduğundan emin olmak için bu özelliği kullanın.
Arka plan görevlerinin, bir uygulamanın diğer bölümlerinden farklı bir performans özelliği olduğu durumlarda (örneğin, Kullanıcı arabirimi veya veri erişim katmanı gibi bileşenler), arka plan görevlerinin ayrı bir işlem hizmetinde barındırılması, Kullanıcı arabirimi ve arka plan görevlerinin yükü yönetmek için bağımsız olarak ölçeklendirilmesine olanak tanır. Birden fazla arka plan görevi birbirinden önemli ölçüde farklı performans özelliklerine sahip olursa, bunları birbirinden bağımsız olarak ölçeklendirin ve her tür ölçeklendirin. Ancak, bunun çalışma zamanı maliyetlerini artırabileceğini unutmayın.
İşlem kaynaklarının ölçeklendirilmesi, yük altında performans kaybını engellemek için yeterli olmayabilir. Aynı zamanda, genel işleme zincirinin tek bir noktasının bir performans sorunu haline gelmesini önlemek için depolama kuyruklarını ve diğer kaynakları ölçeklendirmeniz gerekebilir. Ayrıca, en fazla depolama aktarım hızı ve uygulama ile arka plan görevlerinin kullandığı diğer hizmetler gibi diğer sınırlamaları da göz önünde bulundurun.
Arka plan görevleri ölçeklendirme için tasarlanmış olmalıdır. Örneğin, iletileri dinlemek ve uygun kuyruğa göndermek için kullanımdaki depolama kuyruklarının sayısını dinamik olarak algılayabilmelidir.
Varsayılan olarak, Web İşleri kendi ilişkili Azure Web Apps örneği ile ö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. Bunun yapılması, ilişkili web uygulamasının birden fazla örneği olsa bile Azure’u yalnızca bir Web İşi örneği çalıştırmaya zorlar. Bu, yalnızca tek bir örnek olarak çalışması gereken zamanlanmış işler için yararlı bir teknik olabilir.