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 işlemine aktarmak için Ağ Geçidi Denetleyicisi deseni gibi bir desen kullanabilirsiniz.
Tetikleyiciler
Arka plan işleri birkaç farklı şekilde başlatılabilir. Aşağıdaki kategorilerden birine denk gelirler:
- Olay temelli 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. Bu desen, zaman uyumsuz ileti tabanlı iletişim olarak bilinir.
- 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 aralıklarla 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 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. Bu konuda daha fazla bilgi için idempotence hakkında bu blog gönderisini okuyun.
- 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 "tetikle ve unut" işlemleridir ve yürütme ilerleme durumlarının kullanıcı arabirimini veya çağırma işlemini etkilemesi gerekmez. 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. Aşağıda bazı örnekler bulunmaktadı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 Web İşleri. 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 Uzun süre çalışmayan arka plan işleri için işlevleri kullanabilirsiniz. Başka bir kullanım örneği de iş yükünüzün App Service planında zaten barındırılıyor olması ve az kullanılıyor olmasıdır.
- Azure Sanal Makineleri. 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.
- Azure Container Apps. Azure Container Apps, kapsayıcıları temel alan sunucusuz mikro hizmetler oluşturmanıza olanak tanır.
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.
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. Web İşleri, Azure Logic Apps'ten gelen bir tetikleyici olayına veya depolama bloblarındaki değişiklikler ve ileti kuyrukları gibi dış faktörlere yanıt olarak da çalışır. İş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, bloblarına ve tablolarına ve 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: Komut betikleri (), toplu iş dosyaları (), PowerShell betikleri (
.bat
.cmd
), Bash kabuk betikleri.ps1
(), PHP betikleri (.sh
), Python betikleri (.php
), JavaScript kodu (.py
.js
) ve yürütülebilir programlar (.exe
,.jar
ve daha fazlası) kullanarak Web İşleri tanımlayabilirsiniz. - Dağıtım: Betikleri ve yürütülebilir dosyaları Azure portalını kullanarak, Visual Studio kullanarak, Azure Webjobs SDK'sını kullanarak veya doğrudan aşağıdaki konumlara kopyalayarak 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. Bunlar aşağıdaki konumlara kaydedilir:
- 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. Örneğin:
- { "stopping_wait_time": 60 }
- { "is_singleton": true }
Dikkat edilmesi gereken noktalar
- 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.
- İşlerin 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 Azure Web App örneği oluşturmayı göz önünde bulundurun.
Azure İşlevleri
Web İşleri'ne benzer bir seçenek Azure İşlevleri. Bu hizmet, kısa bir süre boyunca çalışan olay temelli tetikleyiciler için en uygun sunucusuz hizmettir. Bir işlev, zamanlanmış işleri belirli zamanlarda çalışacak şekilde yapılandırıldığında zamanlayıcı tetikleyicileri aracılığıyla çalıştırmak için de kullanılabilir.
Azure İşlevleri, uzun süre çalışan büyük görevler için önerilen bir seçenek değildir çünkü bunlar beklenmeyen zaman aşımı sorunlarına neden olabilir. Ancak, barındırma planına bağlı olarak, zamanlama temelli tetikleyiciler için göz önünde bulundurulabilir.
Dikkat edilmesi gereken noktalar
Arka plan görevinin bir olaya yanıt olarak kısa bir süre çalışması bekleniyorsa, görevi tüketim planında çalıştırmayı göz önünde bulundurun. Yürütme süresi maksimum süreye kadar yapılandırılabilir. Daha uzun maliyetler için çalışan bir işlev. Ayrıca 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ışması beklenen çok sayıda göreviniz varsa daha uygundur. Daha fazla belleğe ve CPU'ya ihtiyaç duyduğundan bu plan daha pahalıdır. Bunun avantajı, sanal ağ tümleştirmesi gibi özellikleri kullanabilmenizdir.
İş yükünüz zaten üzerinde çalışıyorsa Ayrılmış plan arka plan işleri için en uygundur. Az kullanılan VM'leriniz varsa, bunu 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, Bunların Azure Web Apps'e dağıtılmasını engelleyecek şekilde uygulanabilir veya bu seçenekler uygun 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 seçenekleri hakkında bilgi için bkz. Azure'da Windows sanal makineleri 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 kuyruğa bir ileti ekleyerek veya görevin kullanıma sunduğu bir API'ye istek göndererek görevi başlatmak için Azure Logic Apps'i 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 gereken noktalar
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ında görevleri izleme olanağı ve başarısız görevler için otomatik bir yeniden başlatma özelliği bulunmaz; ancak Azure Resource Manager Cmdlet’lerini kullanarak sanal makinenin temel durumunu izleyebilir ve sanal makineyi 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 bkz . Sistem Durumu Uç Noktası İzleme düzeni.
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 gereken noktalar
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 gereken noktalar
- Bir kapsayıcı düzenleyicisinin nasıl kullanılacağını bilmeyi gerektirir. DevOps ekibinizin beceri kümesine bağlı olarak, bu bir sorun olabilir veya olmayabilir.
Daha fazla bilgi için bkz.
Azure Container Apps
Azure Container Apps, kapsayıcıları temel alan sunucusuz mikro hizmetler oluşturmanıza olanak tanır. Container Apps'in ayırt edici özellikleri şunlardır:
- Özellikle kapsayıcılara dağıtılan birçok mikro hizmeti kapsayan uygulamalar için genel amaçlı kapsayıcıları çalıştırmak için iyileştirilmiştir.
- Kubernetes ve Dapr, Kubernetes Event-driven Autoscaling (KEDA) ve envoy gibi açık kaynak teknolojileri tarafından desteklenir.
- Hizmet bulma ve trafik bölme gibi özelliklerle Kubernetes stili uygulamaları ve mikro hizmetleri destekler.
- Trafiğe dayalı ölçeklendirmeyi destekleyerek ve kuyruklar gibi olay kaynaklarından çekerek olay odaklı uygulama mimarilerini etkinleştirir ve ölçeği sıfıra çıkarır.
- Uzun süre çalışan işlemleri destekler ve arka plan görevlerini çalıştırabilir.
Dikkat edilmesi gereken noktalar
Azure Container Apps, temel kubernetes API'lerine doğrudan erişim sağlamaz. Kubernetes API'lerine ve denetim düzlemine erişmeniz gerekiyorsa Azure Kubernetes Service'i kullanmanız gerekir. Ancak, Kubernetes stilinde uygulamalar oluşturmak istiyorsanız ve tüm yerel Kubernetes API'lerine ve küme yönetimine doğrudan erişim gerekmiyorsa, Container Apps en iyi yöntemleri temel alan tam olarak yönetilen bir deneyim sağlar. Bu nedenlerden dolayı, birçok ekip Azure Container Apps ile kapsayıcı mikro hizmetleri oluşturmaya başlamayı tercih edebilir.
Daha fazla bilgi için bkz.
Hızlı başlangıçları kullanarak ilk kapsayıcı uygulamanızı oluşturmaya başlayabilirsiniz.
Bölümleme
Mevcut bir işlem örneğine arka plan görevleri eklemeye karar verirseniz, bunun işlem örneğinin kalite özniteliklerini ve arka plan görevinin kendisini nasıl etkileyeceğini göz önünde bulundurmanız gerekir. 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. Talep artışlarını karşılamak için kullanıcı arabirimini ölçeklendirmek gerekebilirken, bekleyen arka plan görevleri daha az işlem örneği tarafından daha az meşgul zamanlarda tamamlanabilir.
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 veya görevleri uygun bir aralık içinde 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ç elde etmek veya tüm gereksinimleri karşılamak için birden çok ayrı görev yürütülmesini gerektirebilir. 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 Kanallar ve Filtreler düzenine bakın.
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 İşlemi 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 uygulamaya tutarsızlık getirmeden yeniden başlatmaları düzgün bir şekilde işleyebilmeli. 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 zamanlayıcı aracısı gözetmen düzenine bakın.
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. Bu, yeniden başlatmaların kullanıcı arabirimini engellemeyeceği anlamına da gelir. Daha fazla bilgi için bkz . Kuyruk Tabanlı Yük Dengeleme düzeni. Bazı görevler diğerlerinden daha önemliyse, bu görevlerin daha az önemli olanlardan önce çalıştığından emin olmak için Öncelik Sırası düzenini uygulamayı göz önünde bulundurun.
İ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 otomatik olarak veya ilişkili bir teslim edilemeyen ileti kuyruğuna el ile 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ıdır; başka bir deyişle aynı iletinin birden çok kez işlenmesi uygulamanın verilerinde hataya veya tutarsızlığa 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. En az bir kez ileti teslimi ile ilgili zorluklar hakkında daha fazla bilgi için, aynı anda ileti işleme yönergelerine bakın.
Azure Kuyruk Depolama ve Azure Service Bus kuyrukları gibi bazı mesajlaşma sistemleri, bir iletinin kuyruktan kaç kez okunduğunu belirten bir kuyruktan kaldırma sayısını 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:
Web Apps ve Sanal Makineler barındırılan dağıtımlar için geçerli talebe ve yüklemeye veya önceden tanımlanmış bir zamanlamaya göre otomatik ölçeklendirmeyi (hem ölçeği genişletme hem de yeniden ölçeklendirme) Azure desteği. Ç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 uygulamanın diğer bölümlerinden farklı bir performans özelliğine sahip olduğu durumlarda (örneğin, kullanıcı arabirimi veya veri erişim katmanı gibi bileşenler), arka plan görevlerini ayrı bir işlem hizmetinde birlikte barındırmak, kullanıcı arabiriminin ve arka plan görevlerinin yükü yönetmek için bağımsız olarak ölçeklendirilmesine olanak tanır. Birden çok arka plan görevinin birbirinden önemli ölçüde farklı performans özellikleri varsa, bunları bölmeyi ve her türü bağımsız olarak ölçeklendirmeyi göz önünde bulundurun. Ancak, bunun çalışma zamanı maliyetlerini artırabileceğini unutmayın.
Yalnızca işlem kaynaklarını ölçeklendirmek, yük altında performans kaybını önlemek 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.