Telafi İşlemi düzeni

Azure

Bir dizi adımdan oluşan nihai tutarlı bir işlem kullandığınızda, Telafi İşlemi düzeni yararlı olabilir. Özellikle, adımlardan biri veya daha fazlası başarısız olursa, adımların gerçekleştirdiği işi geri almak için Telafi İşlemi desenini kullanabilirsiniz. Genellikle, karmaşık iş süreçlerini ve iş akışlarını uygulayan bulutta barındırılan uygulamalarda nihai tutarlılık modelini izleyen işlemler bulursunuz.

Bağlam ve sorun

Bulutta çalışan uygulamalar verileri sık sık değiştirir. Bu veriler bazen farklı coğrafi konumlardaki çeşitli veri kaynaklarına yayılır. Çekişmenin önlenmesi ve dağıtılmış bir ortamda performansın artması için bir uygulamanın güçlü işlemsel tutarlılık sağlamaya çalışmaması gerekir. Bunun yerine, uygulama nihai tutarlılık uygulamalıdır. Nihai tutarlılık modelinde tipik bir iş işlemi bir dizi ayrı adımdan oluşur. İşlem bu adımları gerçekleştirirken sistem durumunun genel görünümü tutarsız olabilir. Ancak işlem tamamlandığında ve tüm adımlar çalıştırıldığında sistem yeniden tutarlı hale gelmelidir.

Veri Tutarlılığı Temel Bilgileri, dağıtılmış işlemlerin neden iyi ölçeklendiril olmadığı hakkında bilgi sağlar. Bu kaynak, nihai tutarlılık modelinin ilkelerini de listeler.

Nihai tutarlılık modelindeki bir zorluk, başarısız olan bir adımın nasıl işleneceğini gösterir. Bir hatadan sonra, işlemdeki önceki adımların tamamlandığı tüm çalışmaları geri almanız gerekebilir. Ancak, uygulamanın diğer eşzamanlı örnekleri değiştirmiş olabileceğinden verileri her zaman geri alamayabilirsiniz. Eşzamanlı örneklerin verileri değiştirmediği durumlarda bile, bir adımı geri almak özgün durumu geri yüklemekten daha karmaşık olabilir. İşletmeye özgü çeşitli kuralların uygulanması gerekebilir. Örnek için, bu makalenin devamında Örnek bölümünün açıklandığı seyahat web sitesine bakın.

Nihai tutarlılık uygulayan bir işlem birkaç heterojen veri deposuna yayılmışsa, işlemdeki adımları geri almak için her veri deposunun sırayla ziyaretlenmesi gerekir. Sistemin tutarsız kalmasını önlemek için, her veri deposunda gerçekleştirdiğiniz işi güvenilir bir şekilde geri almalısınız.

Nihai tutarlılığı uygulayan bir işlemden etkilenen veriler her zaman veritabanında tutulmaz. Örneğin, hizmet odaklı mimari (SOA) ortamını göz önünde bulundurun. SOA işlemi bir hizmetteki bir eylemi çağırabilir ve bu hizmet tarafından tutulan durumda bir değişikliğe neden olabilir. İşlemi geri almak için bu durum değişikliğini de geri alnız gerekir. Bu işlem, hizmeti yeniden çağırmayı ve ilkinin etkilerini tersine çeviren başka bir eylem gerçekleştirmeyi içerebilir.

Çözüm

Çözüm, telafi edici bir işlem uygulamaktır. Telafi işlemindeki adımlar, özgün işlemdeki adımların etkilerini geri alır. Sezgisel bir yaklaşım, geçerli durumu işlemin başlangıcında sistemin içinde olduğu durumla değiştirmektir. Ancak telafi işlemi her zaman bu yaklaşımı benimseyebilir çünkü uygulamanın diğer eşzamanlı örneklerinin yaptığı değişikliklerin üzerine yazabilir. Bunun yerine telafi işlemi, eş zamanlı örneklerin yaptığı tüm işleri dikkate alan akıllı bir işlem olmalıdır. Bu işlem genellikle uygulamaya özgüdür ve özgün işlemin gerçekleştirdiği çalışmanın yapısına göre yönlendirilir.

Bir iş akışı kullanarak telafi gerektiren bir son tutarlılık işlemi uygulamak yaygın olarak benimsenen bir yaklaşımdır. Özgün işlem devam ederken sistem, adımın gerçekleştirdiği çalışmayı geri alma da dahil olmak üzere her adımla ilgili bilgileri kaydeder. İşlem herhangi bir noktada başarısız olursa, iş akışı tamamlandığı adımlarda geri sarılacak. Her adımda, iş akışı bu adımı tersine çeviren işi gerçekleştirir.

İki önemli nokta şunlardır:

  • Telafi işleminin, özgün işlemin tam ters sırasına göre çalışmayı geri almaları gerekmeyebilir.
  • Bazı geri alma adımlarını paralel olarak gerçekleştirmek mümkün olabilir.

Bu yaklaşım, Clemens Vasters'ın blogunda ele alınan Sagas stratejisine benzer.

Telafi işlemi, nihai tutarlı işlemin kendisidir, bu nedenle de başarısız olabilir. Sistem, telafi işlemini hata noktasından sürdürebilmeli ve işlemi devam ettirebilmelidir. Başarısız olan bir adımı tekrarlamanız gerekebilir, bu nedenle telafi işlemindeki adımları bir kez etkili komutlar olarak tanımlamanız gerekir. Daha fazla bilgi için Jonathan Oliver'ın blogundaki Idempotency Patterns bölümüne bakın.

Bazı durumlarda, başarısız olan bir adımı kurtarmanın tek yolu el ile müdahale olabilir. Bu gibi durumlarda sistem bir uyarı oluşturmalı ve hatanın nedeni hakkında mümkün olduğunca çok bilgi sağlamalıdır.

Sorunlar ve dikkat edilmesi gerekenler

Bu deseni nasıl uygulayabileceğinize karar vermek için aşağıdaki noktaları göz önünde bulundurun:

  • Son tutarlılığı uygulayan bir işlemdeki bir adımın ne zaman başarısız olduğunu belirlemek kolay olmayabilir. Bir adım hemen başarısız olmayabilir. Bunun yerine engellenebilir. Zaman aşımı mekanizması uygulamanız gerekebilir.

  • Telafi mantığını genelleştirmek kolay değildir. Telafi işlemi uygulamaya özgüdür. Bir işlem başarısız olduğunda işlemin etkilerini geri alabilmek için uygulamanın yeterli bilgiye sahip olmasına bağımlıdır.

  • Bir telafi işlemindeki adımları bir kere etkili olacak komutlar olarak tanımlamanız gerekir. Bunu yaparsanız, telafi işleminin kendisi başarısız olursa adımlar yinelenebilir.

  • Adımları işleyen altyapı aşağıdaki ölçütleri karşılamalıdır:

    • Özgün işlemde ve telafi işleminde dayanıklıdır.
    • Başarısız bir adımı telafi etmek için gereken bilgileri kaybetmez.
    • Telafi mantığının ilerleme durumunu güvenilir bir şekilde izler.
  • Telafi işlemi, sistem verilerini özgün işlemin başlangıcındaki durumuna döndürmez. Bunun yerine işlem, işlemin başarısız olmadan önce başarıyla tamamlandığı çalışmayı telafi eder.

  • Telafi işlemindeki adımların sırası, özgün işlemdeki adımların tam tersi olmayabilir. Örneğin, bir veri deposu tutarsızlıklara karşı diğerinden daha hassas olabilir. Önce bu depoda yapılan değişiklikleri geri alan telafi işlemindeki adımlar gerçekleşmelidir.

  • Bazı ölçüler, genel etkinliğin başarılı olma olasılığını artırmaya yardımcı olabilir. Özellikle, bir işlemi tamamlamak için gereken her kaynağa kısa vadeli, zaman aşımı tabanlı bir kilit yerleştirebilirsiniz. Ayrıca bu kaynakları önceden de edinebilirsiniz. Ardından, yalnızca tüm kaynakları aldıktan sonra işi gerçekleştirin. Kilitlerin süresi dolmadan önce tüm eylemleri sonlandırın.

  • Normalden daha bağışlayıcı olan yeniden deneme mantığı, telafi işlemini tetikleyen hataları en aza indirmeye yardımcı olabilir. Son tutarlılığı uygulayan bir işlemdeki bir adım başarısız olursa, hatayı geçici bir özel durum olarak işlemeyi ve adımı yinelemeyi deneyin. İşlemi durdurun ve yalnızca bir adım tekrar tekrar başarısız olursa veya kurtarılamıyorsa telafi işlemi başlatın.

  • Telafi işlemi uyguladığınızda, nihai tutarlılığı uygularken karşılaştığınız zorlukların birçoğuyla karşılaşırsınız. Daha fazla bilgi için Veri Tutarlılığı Temel Bilgileri'ndeki "Nihai Tutarlılığı Uygulamayla İlgili Dikkat Edilmesi Gerekenler" bölümüne bakın.

Bu düzenin kullanılacağı durumlar

Bu düzeni yalnızca başarısız olursa geri alınması gereken işlemler için kullanın. Çözümlerinizi mümkün olduğunca telafi işlemleri gerektirecek karmaşıklık düzeyinden kaçınacak şekilde tasarlayın.

İş yükü tasarımı

Bir mimar, Azure İyi Tasarlanmış Çerçeve yapılarında ele alınan hedefleri ve ilkeleri ele almak için Telafi İşlemi düzeninin iş yükünün tasarımında nasıl kullanılabileceğini değerlendirmelidir. Örneğin:

Yapı Taşı Bu desen sütun hedeflerini nasıl destekler?
Güvenilirlik tasarımı kararları, iş yükünüzün arızaya karşı dayanıklı olmasına ve bir hata oluştuktan sonra tamamen çalışır duruma gelmesini sağlamaya yardımcı olur. Dengeleme eylemleri, veri değişikliklerini doğrudan geri alma, işlem kilitlerini bozma ve hatta etkiyi tersine çevirmek için yerel sistem davranışını yürütme gibi işlemleri kullanarak kritik iş yükü yollarındaki arızaları giderir.

- RE:02 Kritik akışlar
- RE:09 Olağanüstü durum kurtarma

Herhangi bir tasarım kararında olduğu gibi, bu desenle ortaya konulabilecek diğer sütunların hedeflerine karşı herhangi bir dengeyi göz önünde bulundurun.

Örnek

Müşteriler seyahat rehberi rezervasyonu yapmak için bir seyahat web sitesi kullanır. Tek bir seyahat rehberi, bir dizi uçuş ve otel içerebilir. Seattle'dan Londra'ya ve ardından Paris'e seyahat eden bir müşteri, bir seyahat çizelgesi oluştururken aşağıdaki adımları gerçekleştirebilir:

  1. Seattle’dan Londra’ya F1 uçuşundan yer ayırtma.
  2. Londra’dan Paris’e F2 uçuşundan yer ayırtma.
  3. Paris’ten Seattle’a F3 uçuşundan yer ayırtma.
  4. Londra'daki H1 otelinden oda rezervasyonu yapma.
  5. Paris’teki H2 otelinden oda rezervasyonu yapma.

Her biri ayrı birer eylem olan bu adımlar, birlikte ele alındığında son tutarlılık gerektiren bir işlem oluşturur. Bu adımları gerçekleştirmenin yanı sıra, sistemin her adımı geri almak için sayaç işlemlerini de kaydetmesi gerekir. Bu bilgiler, müşterinin seyahat kılavuzunu iptal etme olasılığına karşı gereklidir. Sayaç işlemlerini gerçekleştirmek için gereken adımlar daha sonra telafi işlemi olarak çalıştırılabilir.

Telafi işlemindeki adımlar, özgün adımların tam tersi olmayabilir. Ayrıca, telafi işlemindeki her adımdaki mantık, işletmeye özgü kuralları dikkate almalıdır. Örneğin, bir uçuş rezervasyonunu iptal etmek müşteriye tam para iadesi hakkı vermeyebilir.

Aşağıdaki şekilde, seyahat seyahati rezervasyonu için uzun süre çalışan bir işlemdeki adımlar gösterilmektedir. İşlemi geri alan telafi işlemi adımlarını da görebilirsiniz.

Bir seyahat aracı oluşturma adımlarını gösteren diyagram. Program iptal eden telafi işleminin adımları da gösterilir.

Not

Her adım için telafi mantığını nasıl tasarladığınıza bağlı olarak, telafi işlemindeki adımları paralel olarak gerçekleştirebilirsiniz.

Birçok iş çözümünde, tek bir adımın başarısız olmasının telafi işlemi kullanılarak sistemin geri döndürülmesi her zaman gerekli değildir. Örneğin, seyahat web sitesi senaryolarını göz önünde bulundurun. Müşterinin F1, F2 ve F3 uçuşları için rezervasyon yapıp H1 otelinde oda ayıramazsınız. Müşteriye uçuşları iptal etmek yerine aynı şehirdeki farklı bir otelde bir oda sunmak tercih edilir. Müşteri yine de iptal etmeye karar verebilir. Bu durumda telafi işlemi çalıştırılır ve F1, F2 ve F3 uçuşları için rezervasyonları geri alır. Ancak bu kararı sistem değil müşteri vermelidir.

Sonraki adımlar

  • Veri Tutarlılığı Temel Bilgileri. Telafi İşlemi düzeni çoğunlukla son tutarlılık modelini uygulamayan işlemlerin geri alınması için kullanılır. Bu temel, nihai tutarlılığın avantajları ve dengeleri hakkında bilgi sağlar.
  • Idempotency Desenleri. Telafi işleminde, en iyisi etkili komutları kullanmaktır. Bu blog gönderisinde, bir kez etkililik uyguladığınızda dikkate almanız gereken faktörler açıklanmaktadır.
  • Zamanlayıcı Aracısı Gözetmen düzeni. Bu makalede, dağıtılmış hizmetleri ve kaynakları kullanan iş işlemlerini gerçekleştiren dayanıklı sistemlerin nasıl uygulandığı açıklanır. Bu sistemlerde bazen bir işlemin gerçekleştirdiği işi geri almak için telafi işlemi kullanmanız gerekir.
  • Yeniden deneme düzeni. Telafi işlemleri işlem açısından zorlu olabilir. Başarısız işlemleri yeniden denemenin etkili bir ilkesini uygulamak için Yeniden Deneme desenini kullanarak bunların kullanımını en aza indirmeyi deneyebilirsiniz.
  • Saga dağıtılmış işlemler düzeni. Bu makalede, dağıtılmış işlem senaryolarında mikro hizmetler genelinde veri tutarlılığını yönetmek için Saga deseninin nasıl kullanılacağı açıklanmaktadır. Saga deseni telafi işlemleriyle hata kurtarmayı işler.
  • Kanallar ve Filtreler düzeni. Bu makalede, karmaşık bir işleme görevini bir dizi yeniden kullanılabilir öğeye ayırmak için kullanabileceğiniz Kanallar ve Filtreler düzeni açıklanmaktadır. Dağıtılmış işlemleri uygulamaya alternatif olarak, Telafi İşlemi düzeniyle Kanallar ve Filtreler desenini kullanabilirsiniz.
  • Kendi kendini iyileştirecek şekilde tasarlayın. Bu kılavuzda kendi kendini iyileştiren uygulamalar tasarlama açıklanmaktadır. Telafi işlemlerini kendi kendini düzeltme yaklaşımının bir parçası olarak kullanabilirsiniz.