Aracılığıyla paylaş


Kalıcılık En İyi Yöntemleri

Bu belge, iş akışı kalıcılığıyla ilgili iş akışı tasarımı ve yapılandırması için en iyi yöntemleri kapsar.

Dayanıklı İş Akışlarının Tasarımı ve Uygulanması

Genel olarak iş akışları, iş akışının bir olay beklediği için boşta olduğu sürelerle kesişen kısa dönemlerde iş yapar. Bu olay, ileti veya süresi dolan zamanlayıcı gibi şeyler olabilir. İş akışı örneği işlem yapmadığında kaldırılabilmesi için, hizmet ana bilgisayarının iş akışı örneğini saklaması gerekir. Bu yalnızca iş akışı örneği kalıcı olmayan bir bölgede değilse (örneğin, bir işlemin tamamlanmasını bekliyor veya zaman uyumsuz bir geri çağırma bekliyorsa) mümkündür. Boşta kalan bir iş akışı örneğinin kaldırılmasına izin vermek için, iş akışı yazarının yalnızca kısa süreli eylemler için işlem kapsamlarını ve zaman uyumsuz etkinlikleri kullanması gerekir. Özellikle, yazar bu sürekli olmayan bölgelerdeki gecikme etkinliklerini mümkün olduğunca kısa tutmalıdır.

Bir iş akışı yalnızca iş akışı tarafından kullanılan tüm veri türleri serileştirilebilirse kalıcı hale getirilebilir. Ayrıca, kalıcı iş akışlarında kullanılan özel türlerin, NetDataContractSerializer tarafından kalıcı hale getirilebilmesi için SqlWorkflowInstanceStore ile serileştirilebilir olması gerekir.

Bir iş akışı örneği, kalıcı hale getirilmemişse bir konak veya bilgisayarın başarısız olması durumunda kurtarılamaz. Genel olarak, iş akışının yaşam döngüsünün başlarında bir iş akışı örneğini kalıcı hale geçirmenizi öneririz.

İş akışınız uzun süre meşgulse, iş akışı örneğini meşgul olduğu süre boyunca düzenli olarak kalıcı hale bırakmanızı öneririz. Bunu yapmak için iş akışı örneğini meşgul tutan etkinlikler dizisi boyunca etkinlikler ekleyebilirsiniz Persist . Bu şekilde, uygulama etki alanı geri dönüşümü, konak hataları veya bilgisayar hataları sistemin yoğun dönemin başına geri döndürülmesine neden olmaz. İş akışınıza etkinlik eklemenin Persist performansın düşmesine neden olabileceğini unutmayın.

Windows Server App Fabric, kalıcılık yapılandırmasını ve kullanımını büyük ölçüde basitleştirir. Daha fazla bilgi için bkz. Windows Server App Fabric Kalıcılığı

Ölçeklenebilirlik Parametrelerinin Yapılandırması

Ölçeklenebilirlik ve performans gereksinimleri aşağıdaki parametrelerin ayarlarını belirler:

Bu parametreler, geçerli senaryoya göre aşağıdaki gibi ayarlanmalıdır.

Senaryo: En uygun yanıt süresini gerektiren az sayıda iş akışı örneği

Bu senaryoda, tüm iş akışı örnekleri boşta kaldıklarında yüklenmeye devam etmelidir. Büyük bir değere ayarlayın TimeToUnload . Bu ayarın kullanılması, bir iş akışı örneğinin bilgisayarlar arasında geçiş yapmasını engeller. Bu ayarı yalnızca aşağıdakilerden biri veya daha fazlası doğruysa kullanın:

  • bir iş akışı örneği, ömrü boyunca tek bir ileti alır.

  • Tüm iş akışı örnekleri tek bir bilgisayarda çalışır

  • Bir iş akışı örneği tarafından alınan tüm iletiler aynı bilgisayar tarafından alınır.

Hizmet ana bilgisayarı veya bilgisayar hatalarından sonra iş akışı örneğinizin kurtarılmasını sağlamak için Persist etkinliklerini kullanın veya TimeToPersist'i 0 olarak ayarlayın.

Senaryo: İş Akışı Örnekleri Uzun Süre Boşta

Bu senaryoda, kaynakları en kısa sürede yayınlamak için 0 olarak ayarlayın TimeToUnload .

Senaryo: İş Akışı Örnekleri Kısa Sürede Birden Çok İleti Alıyor

Bu senaryoda, bu iletiler aynı bilgisayar tarafından alınırsa 60 saniye olarak ayarlayın TimeToUnload . Bu, bir iş akışı örneğinin hızlı bir şekilde kaldırılmasını ve yüklenmesini önler. Bu ayrıca örneği çok uzun süre bellekte tutmaz.

0 olarak ayarlayın TimeToUnload ve bu iletiler farklı bilgisayarlar tarafından alınabilecekse BasicRetry veya AggressiveRetry olarak ayarlayın InstanceLockedExceptionAction . Bu, iş akışı örneğinin başka bir bilgisayar tarafından yüklenmesini sağlar.

Senaryo: İş Akışı Kısa Sürelerle Gecikme Etkinliklerini Kullanıyor

Bu senaryoda, süresi dolmuş bir SqlWorkflowInstanceStore etkinliği nedeniyle yüklenmesi gereken örnekler için Delay kalıcılık veritabanını düzenli olarak sorgular. SqlWorkflowInstanceStore bir sonraki yoklama aralığında süresi dolacak bir zamanlayıcı bulursa, SQL İş Akışı Örnek Deposu yoklama aralığını kısaltır. Sonraki yoklama, süreölçerin süresi dolduktan hemen sonra gerçekleşir. Bu sayede, SQL İş Akışı Örnek Deposu tarafından ayarlanan RunnableInstancesDetectionPeriod yoklama aralığını aşan zamanlayıcılar için yüksek doğruluk elde edilir. Daha kısa gecikmelerin zamanında işlenmesini sağlamak için iş akışı örneğinin en az bir yoklama aralığı için bellekte kalması gerekir.

Süre sonunu kalıcılık veritabanına yazmak için 0 olarak ayarlayın TimeToPersist .

TimeToUnload'u RunnableInstancesDetectionPeriod'den uzun veya eşit olacak şekilde ayarlayın, böylece örnek en az bir yoklama aralığı boyunca bellekte kalır.

Bu, kalıcılık veritabanında yükün artmasına neden olduğundan azaltmanızı önermeyiz RunnableInstancesDetectionPeriod . SqlWorkflowInstanceStore kullanan her hizmet konağı, algılama dönemi başına veritabanını bir kez yoklar. Zaman RunnableInstancesDetectionPeriod aralığının çok küçük olması, hizmet konaklarının sayısı büyükse sisteminizin performansının düşmesine neden olabilir.

SQL İş Akışı Örnek Deposu'nı yapılandırma

SQL İş Akışı Örnek Deposu aşağıdaki yapılandırma parametrelerine sahiptir:

InstanceEncodingOption
Bu parametre, SqlWorkflowInstanceStore öğesine iş akışı örneği durumunu sıkıştırmasını bildirir. Sıkıştırma, kalıcılık veritabanında depolanan veri miktarını azaltır ve kalıcılık veritabanının ayrılmış bir veritabanı sunucusunda bulunması durumunda ağ trafiğini azaltır. Sıkıştırma kullanılıyorsa, örnek durumunu sıkıştırmak ve ayıklamak için hesaplama kaynakları gerekir. Çoğu durumda sıkıştırma performansı artırır.

InstanceCompletionAction
Bu parametre SqlWorkflowInstanceStore'e tamamlanan örneklerin ya tutulmasını ya da silinmesini belirtir. Tamamlanmış örneklerin tutulması kalıcılık veritabanı depolama gereksinimlerini artırır ve tablo arama sürelerini artıran daha büyük tablolara yol açar. Hata ayıklama veya denetim için tamamlanmış örnekler gerekli değilse, tamamlanmış örneklerin silinmesini bildirmek SqlWorkflowInstanceStore en iyisidir. Silinen örnekler yalnızca kullanıcı sonunda bunları kaldırmak için bir işlem oluşturduğunda tutulmalıdır. Tamamlanan iş akışı örneği örnek deposunda bulunduğu sürece bağıntı anahtarlarının yeniden kullanılamadığını unutmayın.

RunnableInstancesDetectionPeriod
Bu parametre, bir SqlWorkflowInstanceStore etkinliğin süresi dolduğunda yüklenmesi gereken örnekler için kalıcılık veritabanını yoklama aralığı üst sınırını Delay tanımlar. Bir SqlWorkflowInstanceStore sonraki yoklama aralığında süresi dolacak bir süreölçer bulursa, yoklama aralığını kısaltır, böylece zamanlayıcının süresi dolduktan hemen sonra bir sonraki yoklama gerçekleşir. Bu şekilde SQL İş Akışı Örnek Deposu, değerinden RunnableInstancesDetectionPerioddaha uzun süre çalışan zamanlayıcılar için yüksek doğruluk elde eder.

Bu öğeyi azaltmanızı önermeyiz, çünkü bu durum kalıcılık veritabanında yükün artmasına yol açar. SqlWorkflowInstanceStore kullanan her hizmet konağı, algılama dönemi başına veritabanını bir kez yoklar. Bir aralığın çok küçük olarak ayarlanması RunnableInstancesDetectionPeriod , hizmet konaklarının sayısı büyükse sisteminizin performansının düşmesine neden olabilir.

HostLockRenewalPeriod
Bu parametre, konağın kalıcılık veritabanındaki kilidini yenileme aralığını tanımlar. Bu aralığın kısaltılması, bir konağın veya bilgisayarın başarısız olması durumunda iş akışı örneklerinin daha hızlı kurtarılmasını sağlar. Öte yandan, kısa bir kilit yenileme süresi kalıcılık veritabanındaki yükü artırır. SqlWorkflowInstanceStore kullanan her hizmet konağı, her yenileme dönemi başına veritabanındaki kilitlerini bir kez günceller. Bir bilgisayar çok sayıda hizmet ana bilgisayarı çalıştırıyorsa, kilit yenilemesinin neden olduğu yükün sisteminizin performansını düşürmediğinden emin olun. Varsa, HostLockRenewalPeriod değerini artırmayı göz önünde bulundurun.

InstanceLockedExceptionAction
Etkinleştirilirse, SqlWorkflowInstanceStore sonraki 30 saniye boyunca kilitli bir örneği yüklemeyi yeniden denenir. İş akışı kısa sürede birden çok ileti alıyorsa ve bu iletiler farklı bilgisayarlar tarafından alınıyorsa BasicRetry veya AggressiveRetry olarak ayarlayın InstanceLockedExceptionAction .

Yük yeniden deneme mekanizması, yük yeniden denemeleri denenmediği sürece herhangi bir performans yüküne neden olmadığından, InstanceLockedExceptionAction her zaman etkinleştirilmelidir.