Saga dağıtılmış işlemler düzeni

Azure

Saga tasarım düzeni, dağıtılmış işlem senaryolarında mikro hizmetler genelinde veri tutarlılığını yönetmenin bir yoludur. Saga, her hizmeti güncelleştiren ve bir sonraki işlem adımını tetikleyen bir ileti veya olay yayımlayan bir işlem dizisidir. Bir adım başarısız olursa, destan önceki işlemleri engelleyen telafi işlemlerini yürütür.

Bağlam ve sorun

İşlem, bazen birden çok işlemden oluşan tek bir mantık veya iş birimidir. bir işlem içinde olay, bir varlıkta gerçekleşen bir durum değişikliğidir vekomut bir eylem gerçekleştirmek veya daha sonraki bir olayı tetiklemek için gereken tüm bilgileri kapsüller.

İşlemler atomik, tutarlı, yalıtılmış ve dayanıklı (ACID) olmalıdır. Tek bir hizmet içindeki işlemler ACID'tir, ancak hizmetler arası veri tutarlılığı için hizmetler arası işlem yönetimi stratejisi gerekir.

Çok hizmetli mimarilerde:

  • Bölünmezlik , tümünün gerçekleşmesi veya hiç olmaması gereken bölünemez ve inrreducible işlem kümesidir.
  • Tutarlılık , işlemin verileri yalnızca bir geçerli durumdan başka bir geçerli duruma getirdiği anlamına gelir.
  • Yalıtım , eşzamanlı işlemlerin sıralı olarak yürütülen işlemlerin üreteceği veri durumunun aynısını üretmesini garanti eder.
  • Dayanıklılık , sistem arızası veya güç kesintisi durumunda bile taahhüt edilen işlemlerin devam etmesini sağlar.

Mikro hizmet başına veritabanı modeli, mikro hizmet mimarileri için birçok avantaj sağlar. Etki alanı verilerini kapsüllemek, her hizmetin en iyi veri deposu türünü ve şemasını kullanmasına, gerektiğinde kendi veri deposunu ölçeklendirmesine ve diğer hizmetlerin hatalarından yalıtılmasına olanak tanır. Ancak hizmete özgü veritabanlarında veri tutarlılığının sağlanması güçlüklere neden olabilir.

İki aşamalı işleme (2PC) protokolü gibi dağıtılmış işlemler, işlem devam etmeden önce bir işlemdeki tüm katılımcıların işlemesini veya geri almayı gerektirir. Ancak NoSQL veritabanları ve ileti aracısı gibi bazı katılımcı uygulamaları bu modeli desteklemez.

Diğer bir dağıtılmış işlem sınırlaması da işlemler arası iletişim (IPC) eşzamanlılığı ve kullanılabilirliğidir. İşletim sistemi tarafından sağlanan IPC, ayrı işlemlerin veri paylaşmasına olanak tanır. Dağıtılmış işlemlerin işlemesi için tüm katılan hizmetlerin kullanılabilir olması gerekir ve bu da genel sistem kullanılabilirliğini azaltabilir. IPC veya işlem sınırlamaları olan mimari uygulamalar, Saga deseni için adaylardır.

Çözüm

Saga deseni, bir dizi yerel işlem kullanarak işlem yönetimi sağlar. Yerel işlem, bir destan katılımcısı tarafından gerçekleştirilen atomik çalışma çabasıdır. Her yerel işlem veritabanını güncelleştirir ve destandaki bir sonraki yerel işlemi tetikleyen bir ileti veya olay yayımlar. Yerel bir işlem başarısız olursa, destan önceki yerel işlemler tarafından yapılan değişiklikleri geri alan bir dizi telafi işlemi yürütür.

Saga'ya genel bakış.

Saga desenlerinde:

  • Telafi edilebilir işlemler , ters etkiyle başka bir işlem işlenerek tersine çevrilebilecek işlemlerdir.
  • Özet işlem, bir destandaki go/no-go noktasıdır. Özet işlem işlemeye devam ederse, saga tamamlanıncaya kadar çalışır. Özet işlem, telafi edilemeyen veya yeniden denenemeyen bir işlem olabileceği gibi, son telafi edilebilir işlem veya destandaki ilk yeniden denenebilir işlem de olabilir.
  • Yeniden denenebilir işlemler , özet işlemi izleyen ve başarılı olması garanti edilen işlemlerdir.

Koreografi ve düzenleme olmak üzere iki yaygın destan uygulaması yaklaşımı vardır. Her yaklaşımın iş akışını koordine etmek için kendi zorlukları ve teknolojileri vardır.

Koreografi

Koreografi, katılımcıların merkezi bir kontrol noktası olmadan olayları değiştirdiği destanları koordine etmenin bir yoludur. Koreografi ile her yerel işlem, diğer hizmetlerde yerel işlemleri tetikleyen etki alanı olaylarını yayımlar.

Koreografiye Genel Bakış

Avantajlar

  • Az katılımcı gerektiren ve koordinasyon mantığı gerektirmeyen basit iş akışları için iyidir.
  • Ek hizmet uygulaması ve bakımı gerektirmez.
  • Sorumluluklar saga katılımcılarına dağıtıldığı için tek bir hata noktası sunmaz.

Dezavantaj -ları

  • Yeni adımlar eklerken iş akışı kafa karıştırıcı olabilir çünkü hangi destan katılımcılarının hangi komutları dinlediğini izlemek zor olabilir.
  • Saga katılımcıları arasında döngüsel bağımlılık riski vardır çünkü birbirlerinin komutlarını kullanmaları gerekir.
  • Tümleştirme testi zordur çünkü bir işlemin benzetimini yapmak için tüm hizmetlerin çalışıyor olması gerekir.

Düzenleme

Düzenleme, merkezi bir denetleyicinin destan katılımcılarına hangi yerel işlemlerin yürütülmesi gerektiğini söylediği destanları koordine etmenin bir yoludur. Destan düzenleyicisi tüm işlemleri işler ve katılımcılara olaylara göre hangi işlemi gerçekleştireceklerini söyler. Düzenleyici saga isteklerini yürütür, her görevin durumlarını depolar ve yorumlar ve telafi işlemleriyle hata kurtarmayı işler.

Düzenlemeye Genel Bakış

Avantajlar

  • Zaman içinde eklenen birçok katılımcıyı veya yeni katılımcıyı içeren karmaşık iş akışları için iyidir.
  • Sürecin her katılımcısı üzerinde denetim ve etkinlik akışı üzerinde denetim olduğunda uygundur.
  • Düzenleyici tek taraflı olarak destan katılımcılarına bağlı olduğundan döngüsel bağımlılıklar sunmaz.
  • Saga katılımcılarının diğer katılımcılara yönelik komutlar hakkında bilgi sahibi olması gerekmez. Endişelerin net bir şekilde ayrılması iş mantığını basitleştirir.

Dezavantaj -ları

  • Ek tasarım karmaşıklığı için koordinasyon mantığının uygulanması gerekir.
  • Düzenleyici iş akışının tamamını yönettiğinden ek bir hata noktası vardır.

Sorunlar ve dikkat edilmesi gerekenler

Saga desenini uygularken aşağıdaki noktaları göz önünde bulundurun:

  • Birden çok mikro hizmeti kapsayan bir iş süreci için bir işlemi koordine etme ve veri tutarlılığını koruma konusunda yeni bir düşünme yöntemi gerektirdiğinden Saga deseni başlangıçta zorlayıcı olabilir.
  • Saga deseninin hata ayıklaması özellikle zordur ve katılımcılar arttıkça karmaşıklık artar.
  • Saga katılımcıları değişiklikleri yerel veritabanlarında işlediği için veriler geri alınamaz.
  • Uygulama bir dizi olası geçici hatayı işleyebilmeli ve yan etkileri azaltmak ve veri tutarlılığını sağlamak için bir kez daha etkili olmalıdır. Bir kez etkili olması, aynı işlemin ilk sonucu değiştirmeden birden çok kez tekrar edilebileceği anlamına gelir. Daha fazla bilgi için, iletileri işlerken ve durumu birlikte güncelleştirirken bir kez daha etkili olmasını sağlama yönergelerine bakın.
  • Saga iş akışını izlemek ve izlemek için gözlemlenebilirliği uygulamak en iyisidir.
  • Katılımcı veri yalıtımının olmaması dayanıklılık sorunlarına neden olabilir. Destan uygulaması anomalileri azaltmak için karşı önlemler içermelidir.

Aşağıdaki anomaliler uygun ölçüler olmadan gerçekleşebilir:

  • Bir saga, başka bir destan tarafından yapılan değişiklikleri okumadan yazdığında güncelleştirmeleri kaybetti.
  • Bir işlem veya bir destan, bu güncelleştirmeleri henüz tamamlamamış bir destan tarafından yapılan güncelleştirmeleri okuduğunda kirli okumalar.
  • Okumalar arasında bir veri güncelleştirmesi gerçekleştiğinden, farklı saga adımları farklı verileri okuduğunda belirsiz/güncelleştirilemeyen okumalar.

Anomalileri azaltmak veya önlemek için önerilen karşı önlemler şunlardır:

  • Semantik kilit, bir saga'nın telafi edilebilir işleminin bir güncelleştirmenin devam ettiğini belirtmek için semafor kullandığı uygulama düzeyinde bir kilittir.
  • Herhangi bir sırada yürütülebilen ve aynı sonucu veren commutative güncelleştirmeler.
  • Kötümser görünüm: Bir destan kirli verileri okurken, başka bir destan işlemi geri almak için telafi edilebilir bir işlem çalıştırıyor olabilir. Kötümser görünüm, destanı yeniden sıralar, böylece temel alınan veriler yeniden denenebilir bir işlemde güncelleştirilir ve bu da kirli okuma olasılığını ortadan kaldırır.
  • Yeniden okuma değeri , verilerin değişmediğini doğrular ve ardından kaydı güncelleştirir. Kayıt değiştiyse, adımlar durdurulabilir ve destan yeniden başlatılabilir.
  • Sürüm dosyası, kayıttaki işlemleri geldikçe kaydeder ve sonra bunları doğru sırada yürütür.
  • Değere göre , eşzamanlılık mekanizmasını dinamik olarak seçmek için her isteğin iş riskini kullanır. Düşük riskli istekler destanları desteklerken, yüksek riskli istekler dağıtılmış işlemleri destekler.

Bu düzenin kullanılacağı durumlar

Aşağıdakileri yapmanız gerektiğinde Saga desenini kullanın:

  • Sıkı bağlama olmadan dağıtılmış bir sistemde veri tutarlılığı sağlayın.
  • Dizideki işlemlerden birinin başarısız olup olmadığını geri alma veya dengeleme.

Saga deseni aşağıdakiler için daha az uygundur:

  • Sıkı bir şekilde bağlanmış işlemler.
  • Önceki katılımcılarda gerçekleşen telafi işlemleri.
  • Döngüsel bağımlılıklar.

Örnek

Sunucusuz'da düzenleme tabanlı Saga , başarılı ve başarısız iş akışlarıyla bir para aktarımı senaryosu simülasyonu oluşturan düzenleme yaklaşımını kullanan bir destan uygulama başvurusudur.

Sonraki adımlar

Bu düzeni uygularken aşağıdaki düzenler de kullanışlı olabilir:

  • Koreografi , merkezi bir denetim noktasına güvenmek yerine, sistemin her bileşeninin bir iş işleminin iş akışı hakkındaki karar alma sürecine katılmasını sağlar.
  • Telafi işlemleri , bir dizi adım tarafından gerçekleştirilen işleri geri alır ve sonunda bir veya daha fazla adım başarısız olursa tutarlı bir işlem tanımlar. Karmaşık iş süreçleri ve iş akışları uygulayan bulutta barındırılan uygulamalar genellikle bu nihai tutarlılık modelini izler.
  • Yeniden deneme , uygulamanın başarısız işlemi saydam bir şekilde yeniden deneyerek bir hizmete veya ağ kaynağına bağlanmaya çalıştığında geçici hataları işlemesine olanak tanır. Yeniden deneme, uygulamanın kararlılığını artırabilir.
  • Devre kesici , uzak bir hizmete veya kaynağa bağlanırken kurtarılması uzun zaman alacak hataları işler. Devre kesici, bir uygulamanın kararlılığını ve dayanıklılığını artırabilir.
  • Sistem durumu uç noktası izleme , dış araçların belirli aralıklarla kullanıma sunulan uç noktalar üzerinden erişebildiği bir uygulamada işlevsel denetimler uygular. Sistem durumu uç noktası izleme, uygulamaların ve hizmetlerin doğru performans sergilediğini doğrulamaya yardımcı olabilir.