Arka plan işleri geliştirme önerileri

Bu Azure Well-Architected Framework Güvenilirliği denetim listesi önerisi için geçerlidir:

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

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

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

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

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

Temel tasarım stratejileri

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

Arka plan işlerinin türleri

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

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

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

  • Gecelik veri güncelleştirmeleri veya zamanlanmış işlemeler 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 aktaran hassas veri işleme. Örneğin, bir web uygulamasındaki hassas verileri işlemek istemeyebilirsiniz. Bunun yerine, verileri korumalı depolamaya erişimi olan yalıtılmış bir arka plan işlemine aktarmak için Ağ Geçidi Denetleyicisi deseni gibi bir desen kullanabilirsiniz.

Tetikleyiciler

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

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

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

Olay temelli tetikleyiciler

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

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

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

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

Olay temelli çağrıya uygun diğer görev ö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

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

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

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

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

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

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

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

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

Sonuçları döndürme

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

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

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

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

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

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

Arka plan işlerini bölümleme

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

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

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

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

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

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

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

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

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

Çakışmalar

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

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

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

Koordinasyon

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

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

  • Görevi yeniden kullanılabilir birden çok adıma ayırma. Bir uygulamanın işlediği bilgiler üzerinde farklı karmaşıklıkta çeşitli görevleri yerine getirmesi gerekebilir. Böyle bir uygulamayı uygulamaya yönelik basit ama esnek olmayan bir yaklaşım, bu işlemeyi monolitik bir modül olarak gerçekleştirmektir. Ancak bu yaklaşımın kodu yeniden düzenleme, iyileştirme veya uygulamanın başka bir yerde aynı işlemenin parçalarına ihtiyaç duyması durumunda kodu yeniden kullanma fırsatlarını azaltması olasıdır. Daha fazla bilgi için bkz . Kanallar ve Filtreler düzeni.

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

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

Dayanıklılık konuları

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

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

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

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

İletiler

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

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

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

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

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

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

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

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

Ölçeklendirme ve performans ile ilgili önemli noktalar

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

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

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

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

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

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

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

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

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

Azure kolaylaştırma

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

Konak ortamları

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

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

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

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

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

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

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

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

Web Apps ve Web İşleri

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    • { "stopping_wait_time": 60 }

    • { "is_singleton": true }

Web Apps ve Web İşleri ile ilgili dikkat edilmesi gerekenler

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

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

Azure İşlevleri

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

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

Azure İşlevleri dikkat edilmesi gerekenler

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

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

İş yükünüz ayrılmış planda zaten çalışıyorsa, ayrılmış plan arka plan işleri için uygundur. Vm'leri az kullandıysanız ayrılmış planı aynı VM'de çalıştırabilir ve işlem maliyetlerini paylaşabilirsiniz.

Daha fazla bilgi için bkz.

Sanal Makineler

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

Daha fazla bilgi için bkz.

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

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

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

  • Görevin izlediğ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 kullanın.

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

Sanal Makineler dikkat edilmesi gerekenler

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

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

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

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

Daha fazla bilgi için bkz.

Batch

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

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

Batch ile ilgili dikkat edilmesi gerekenler

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

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

Daha fazla bilgi için bkz.

Azure Kubernetes Service

Kapsayıcılı uygulamaları kolayca dağıtabilmeniz ve yönetebilmeniz için aks kullanarak barındırılan Kubernetes ortamınızı yönetin.

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

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

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

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

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

AKS ile ilgili dikkat edilmesi gerekenler

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

Daha fazla bilgi için bkz.

Kapsayıcı Uygulamaları

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

  • Özellikle kapsayıcılara dağıtılan birçok mikro hizmete yayılan uygulamalar olmak üzere 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 sıfıra ölçeklendirme de dahil olmak üzere kuyruklar gibi olay kaynaklarından çekmeyi destekleyerek olay odaklı uygulama mimarilerini etkinleştirir.

  • Uzun süre çalışan işlemleri destekler ve arka plan görevlerini çalıştırabilir.

Container Apps ile ilgili dikkat edilmesi gerekenler

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

Daha fazla bilgi için bkz.

Güvenilirlik denetim listesi

Önerilerin tamamına bakın.