Telafi İşlemi düzeni

Hep birlikte sonunda tutarlı bir işlemi tanımlayan bir dizi adımda gerçekleştirilen bir çalışmayı, adımlardan biri veya daha fazlası başarısız olduysa geri alın. Karmaşık iş süreçleri ve iş akışları uygulayan, bulutta barındırılan uygulamalarda son tutarlılık modelini izleyen işlemler yaygın olarak kullanılır.

Bağlam ve sorun

Bulutta çalışan uygulamalar verileri sık sık değiştirir. Bu veriler, farklı coğrafi konumlarda tutulan çeşitli veri kaynaklarına yayılmış olabilir. Ç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. Bu modelde, tipik bir iş işlemi bir dizi ayrı adımdan oluşur. Bu adımlar gerçekleştirildiği sırada sistem durumunun genel görünümü tutarsız olabilir, ancak işlem tamamlanıp tüm adımlar yürütüldükten sonra sistem yeniden tutarlı duruma gelmelidir.

Veri Tutarlılığı Temel Bilgileri sayfasında dağıtılmış işlemlerin niye düzgün ölçeklendirilemediği ve son tutarlılık modelinin ilkeleri hakkında bilgi sağlanır.

Son tutarlılık modelinde karşılaşılan bir zorluk, başarısız olan bir adımın nasıl işleneceği ile ilgilidir. Bu durumda, işlemin önceki adımları tarafından tamamlanan tüm işlerin geri alınması gerekebilir. Ancak, veriler uygulamanın diğer eş zamanlı örnekleri tarafından değiştirilmiş olabileceğinden basitçe geri alınamayabilir. Verilerin eş zamanlı bir örnek tarafından değiştirilmediği durumlarda bile bir adımın geri alınması doğrudan özgün durumun geri yüklenmesi anlamına gelmeyebilir. İşe özgü çeşitli kuralların uygulanması gerekli olabilir (Örnek bölümünde açıklanan yolculuk web sitesine bakın).

Son tutarlılık uygulayan bir işlem birden fazla heterojen veri deposuna yayılmış durumdaysa, işlemdeki adımların geri alınabilmesi için her veri deposunun sırayla ziyaret edilmesi gerekir. Sistemin tutarsız kalmasının önlenmesi için her veri deposunda gerçekleştirilen çalışmaların güvenilir bir şekilde geri alınması gerekir.

Son tutarlılık uygulayan bir işlemden etkilenen tüm veriler bir veritabanında tutulmuyor olabilir. Bir hizmet odaklı mimari (SOA) ortamında, işlemler tarafından bir hizmetteki bir eylem çağrılarak bu hizmetin durumunda bir değişikliğe neden olunabilir. İşlemin geri alınması için bu durum değişikliği de geri alınmalıdır. Bu, hizmetin yeniden çağrılmasını ve ilk eylemin etkilerini tersine çeviren başka bir eylemin gerçekleştirilmesini gerektirebilir.

Çözüm

Çözüm, telafi edici bir işlem uygulamaktır. Bir telafi işleminin adımları, özgün işlemdeki adımların etkilerini geri almalıdır. Bu yaklaşımda bir uygulamanın diğer eş zamanlı örnekleri tarafından yapılan değişikliklerin üzerine yazılamadığından, bir telafi işlemi geçerli durumu basitçe sistemin işlemden önceki durumu olarak değiştiremeyebilir. Bunun yerine, eş zamanlı örnekler tarafından gerçekleştirilen tüm işleri hesaba katan akıllı bir işlem olmalıdır. Genellikle uygulamaya özgü olan bu işlem, özgün işlem tarafından gerçekleştirilen işin yapısını temel alan bir işlem olacaktır.

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 ettiği sırada sistem, her bir adım ve bu adım tarafından gerçekleştirilen işin nasıl geri alınabileceği ile ilgili bilgileri kaydeder. Herhangi bir noktada işlem başarısız olursa, iş akışı tamamladığı adımlar üzerinden geri alınır ve her bir adımı tersine çeviren işler gerçekleştirilir. Telafi işlemlerinin özgün işlemdeki sıralamayı tam olarak tersine çevirmek zorunda kalmayabileceğini ve bazı geri alma adımlarını paralel olarak gerçekleştirmenin mümkün olabileceğini unutmayın.

Bu yaklaşım, Clemens Vasters'ın blog'larında ele alınmıştır.

Telafi işlemleri de birer son tutarlılık işlemidir ve bunlar da 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ın yinelenmesi gerekebileceğinden, telafi işlemlerindeki adımların bir kere etkili olacak komutlar şeklinde tanımlanması gerekir. Daha fazla bilgi için, Jonathan Jonathan'ın blogunda TekLik Düzenleri'ne bakın.

Bazı durumlarda, başarısız olan adımları el ile müdahalede bulunmaksızın kurtarmak mümkün olmayabilir. Bu durumlarda, sistem bir uyarı oluşturmalı ve başarısızlık nedeni hakkında mümkün olduğunca fazla bilgi sağlamalıdır.

Sorunlar ve dikkat edilmesi gerekenler

Bu düzenin nasıl uygulanacağına karar verirken aşağıdaki noktaları göz önünde bulundurun:

Son tutarlılık uygulayan bir işlemdeki bir adımın başarısız olduğunu anlamak kolay olmayabilir. Bir adım hemen başarısız olmamasına rağmen iş akışını engelleyebilir. Bir tür zaman aşımı mekanizması uygulamak gerekli olabilir.

-Telafi mantığı kolayca genelleştirilemez. 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. Bu, telafi işleminin kendisi başarısız olursa adımların yinelenmesine imkan sağlar.

Özgün işlemdeki adımlar ile telafi işlemini işleyen altyapının dayanıklı olması gerekir. Başarısız olan adımın telafi edilmesi için gereken bilgileri kaybetmemesi ve telafi mantığının ilerlemesini güvenilir bir şekilde izleyebilmesi gerekir.

Telafi işlemi, sistemdeki verileri özgün işlemin başlangıcındaki durumuna döndürmek zorunda değildir. Bunun yerine, işlem başarısız olmadan önce başarıyla tamamlanan adımlar tarafından gerçekleştirilen işi telafi eder.

Telafi işlemindeki adımların sırası, özgün işlemdeki adımların tam tersi olmak zorunda değildir. Örneğin, tutarsızlıklar konusunda bir veri deposu diğerinden daha hassas olabileceğinden, telafi işleminde ilk olarak bu depoda yapılan değişiklikleri geri alan adımların gerçekleştirilmesi gerekir.

Bir işlemi tamamlaması gereken her kaynağa kısa vadeli, zaman aşımı temelli bir kilit eklenmesi ve bu kaynakların önceden edinilmesi, genel etkinliğin başarılı olma olasılığının artmasına yardımcı olabilir. İş yalnızca tüm kaynaklar edinildikten sonra gerçekleştirilmelidir. Tüm eylemler kilit süresi sona ermeden önce sonlandırılmalıdır.

Telafi işlemi tetikleyen hataların sayısını en aza indirme konusunda normalden daha esnek olan yeniden deneme mantığını kullanmayı göz önünde bulundurun. Nihai tutarlılık 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 yalnızca art arda veya kurtarılamayacak bir biçimde başarısız olursa durdurarak bir telafi işlemi başlatın.

Telafi işlemi uygulamadaki zorlukların çoğu, son tutarlılık uygulama ile aynıdır. Daha fazla bilgi için Veri Tutarlılığı Temel Bilgileri sayfasının Son Tutarlılık Uygulama Konusunda Dikkat Edilecek Noktalar 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.

Örnek

Bir yolculuk web sitesi, müşterilerin yolculuk programları için rezervasyon yapmasına olanak sağlıyor. Tek bir yolculuk programı, bir dizi uçuş ve otelden oluşabilir. Önce Seattle’dan Londra’ya, sonra da Londra’dan Paris’e seyahat edecek bir müşteri, yolculuk programını çıkarırken boyunca 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 nedenle, sistemin bu adımları gerçekleştirmeye ek olarak müşterinin programı iptal etme ihtimaline karşı her bir adımın geri alınması için gerekli karşı işlemleri de kaydetmesi gerekir. Daha sonra, karşı işlemlerin gerçekleştirilmesi için gerekli adımlar bir telafi işlemi olarak çalıştırılabilir.

Telafi işlemindeki adımların özgün adımların tam tersi olmak zorunda olmadığına ve telafi işlemindeki her bir adımın mantığının işe özgü kuralları hesaba katması gerektiğine dikkat edin. Örneğin, bir uçuştaki rezervasyonun iptal edilmesi, müşteriye ödediği ücreti tam olarak iade alma hakkı vermeyebilir. Şekilde, bir yolculuk programı rezervasyonu için uzun süre çalışan bir işlemin geri alınmasına yönelik bir telafi işlemi oluşturma gösterilmektedir.

Bir yolculuk programı rezervasyonu için uzun süre çalışan bir işlemin geri alınmasına yönelik bir telafi işlemi oluşturma

Not

Her adım için telafi mantığını nasıl tasarladığınıza bağlı olarak, telafi işlemindeki adımların paralel biçimde gerçekleştirilmesi mümkün olmayabilir.

Birçok iş çözümünde tek bir adımın başarısız olması sistemin bir telafi işlemi kullanılarak geri alınmasını gerektirmez. Örneğin, seyahat web sitesi senaryosunda F1, F2 ve F3 uçuşları için rezervasyon yaptıktan sonra müşteri H1 oteldeki bir oda rezervasyonu yapamazsa, müşteriye uçuşları iptal etmek yerine aynı şehrin farklı bir oteldeki odası sunmak tercih edilir. Müşteri yine de iptal etmek isteyebilir (bu durumda, telafi işlemi çalıştırılarak F1, F2 ve F3 uçuşlarından ayırtılan yerler iptal edilir), ancak bu kararı sistem değil müşteri vermelidir.

Bu düzen uygulanırken aşağıdaki düzenler ve yönergeler de yararlı olabilir:

  • Veri Tutarlılığı İlkeleri. Telafi İşlemi düzeni çoğunlukla son tutarlılık modelini uygulamayan işlemlerin geri alınması için kullanılır. Bu temel bilgi kaynağı, son tutarlılığın avantajları ve kısıtlamaları hakkında bilgi sağlar.

  • Scheduler-Agent-Supervisor düzeni. Dağıtılmış hizmet ve kaynaklar kullanan iş işlemleri gerçekleştiren dayanıklı sistemlerin nasıl uygulanacağını açıklar. Bazı durumlarda, bir işlem tarafından gerçekleştirilen bir işin telafi işlemi kullanılarak geri alınması gerekli olabilir.

  • Desenini yeniden deneyin. Telafi işlemlerinin gerçekleştirilmesi pahalı olabilir ve Yeniden Deneme düzenini izleyerek başarısız işlemleri yeniden denemeye yönelik etkili bir ilke uygulanarak bunların kullanımını en aza indirmek mümkün olabilir.