Düzenle

Aracılığıyla paylaş


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

Azure

Saga tasarım deseni, birden çok hizmette işlemleri koordine ederek dağıtılmış sistemlerde veri tutarlılığının korunmasına yardımcı olur. Saga, her hizmetin kendi işlemini gerçekleştirdiği ve olaylar veya iletiler aracılığıyla bir sonraki adımı başlattığı yerel işlemler dizisidir. Dizideki bir adım başarısız olursa, destan tamamlanan adımları geri almak için telafi işlemleri gerçekleştirir. Bu yaklaşım, veri tutarlılığının korunmasına yardımcı olur.

Bağlam ve sorun

işlem birden çok işlem içerebilen bir iş birimini temsil eder. bir işlem içinde, olay bir varlığı etkileyen durum değişikliğine başvurur. bir komutu bir eylem gerçekleştirmek veya sonraki bir olayı tetiklemek için gereken tüm bilgileri kapsüller.

İşlemler, bölünmezlik, tutarlılık, yalıtım ve dayanıklılık (ACID) ilkelerine uymalıdır.

  • Bölünmezlik: Tüm işlemler başarılı olur veya hiçbir işlem başarılı olmaz.
  • Tutarlılığı: Veriler geçerli bir durumdan başka bir geçerli duruma geçer.
  • Yalıtımı: Eşzamanlı işlemler sıralı işlemlerle aynı sonuçları verir.
  • Dayanıklılık: Değişiklikler, hatalar oluştuğunda bile işlendikten sonra da devam eder.

Tek bir hizmette işlemler ACID ilkelerini izler çünkü bunlar tek bir veritabanında çalışır. Ancak, birden çok hizmette ACID uyumluluğu elde etmek daha karmaşık olabilir.

Mikro hizmet mimarilerindeki zorluklar

Mikro hizmet mimarileri genellikle her mikro hizmete ayrılmış birveritabanı atar. Bu yaklaşım çeşitli avantajlar sağlar:

  • Her hizmet kendi verilerini kapsüller.
  • Her hizmet, özel ihtiyaçları için en uygun veritabanı teknolojisini ve şemasını kullanabilir.
  • Her hizmetin veritabanları bağımsız olarak ölçeklendirilebilir.
  • Bir hizmetteki hatalar diğer hizmetlerden yalıtılır.

Bu avantajlara rağmen, bu mimari hizmetler arası veri tutarlılığını karmaşıklaştırır. ACID gibi geleneksel veritabanı garantileri, bağımsız olarak yönetilen birden çok veri deposu için doğrudan geçerli değildir. Bu sınırlamalar nedeniyle, işlemler arası iletişime veya iki aşamalı işleme protokolü gibi geleneksel işlem modellerine dayanan mimariler genellikle Saga deseni için daha uygundur.

Çözüm

Saga deseni, yerel işlemler dizisine bölerek işlemleri yönetir.

Bir destan genel bakış gösteren Diyagramı.

Her yerel işlem:

  1. Tek bir hizmet içinde atomik olarak çalışmasını tamamlar.
  2. Hizmetin veritabanını güncelleştirir.
  3. Bir sonraki işlemi bir olay veya ileti aracılığıyla başlatır.

Yerel bir işlem başarısız olursa, destan önceki yerel işlemlerin yaptığı değişiklikleri tersine çevirmek bir dizi telafi işlemi gerçekleştirir.

Saga düzenindeki temel kavramlar

  • Telafi edilebilir işlemler ters etkiye sahip diğer işlemler tarafından geri alınabilir veya telafi edilebilir. Destandaki bir adım başarısız olursa telafi işlemleri telafi edilebilir işlemlerin yaptığı değişiklikleri geri alır.

  • Pivot işlemleri destanda geri dönüş olmamasının bir noktası olarak görev görür. Özet işlem başarılı olduktan sonra telafi edilebilir işlemler artık uygun olmaz. Sistemin tutarlı bir son duruma ulaşması için sonraki tüm eylemlerin tamamlanması gerekir. Özet işlem, destan akışına bağlı olarak farklı roller üstlenebilir:

    • geri alınamaz veya telafi edilemeyen işlemler geri alınamaz veya yeniden denenemez.

    • Geri alınabilen ve işlenen arasındaki sınır, özet işlemin son geri alınabilen veya telafi edilebilir işlem olabileceği anlamına gelir. Ya da destandaki ilk yeniden denenebilir işlem olabilir.

  • Yeniden denenebilir işlemleri özet işlemi izleyin. Yeniden denenebilir işlemler bir kez etkili olur ve geçici hatalar olsa bile destan'ın son durumuna ulaşabilmesine yardımcı olur. Destanın sonunda tutarlı bir duruma ulaşmasına yardımcı olurlar.

Saga uygulama yaklaşımları

İki tipik destan uygulama yaklaşımı koreografi ve düzenleme. Her yaklaşımın iş akışını koordine etmek için kendi zorlukları ve teknolojileri vardır.

Koreografi

Koreografi yaklaşımında hizmetler olayları merkezi bir denetleyici olmadan değiştirir. Koreografi ile her yerel işlem, diğer hizmetlerde yerel işlemleri tetikleyen etki alanı olaylarını yayımlar.

koreografi kullanarak bir destan gösteren Diyagramı.

Koreografinin faydaları Koreografinin dezavantajları
Az sayıda hizmeti olan ve koordinasyon mantığı gerektirmeyen basit iş akışları için iyidir. Yeni adımlar eklediğinizde iş akışı kafa karıştırıcı olabilir. Her bir saga katılımcının hangi komutlara yanıt verdiğini izlemek zordur.
Koordinasyon için başka hizmet gerekmez. Saga katılımcıları arasında döngüsel bağımlılık riski vardır çünkü birbirlerinin komutlarını kullanmaları gerekir.
Sorumluluklar saga katılımcıları arasında dağıtıldığından tek bir hata noktası sunmaz. Tümleştirme testi zordur çünkü tüm hizmetlerin bir işlemin benzetimini yapmak için çalıştırılması gerekir.

Orkestrasyon

Düzenlemede, merkezi bir denetleyici veya düzenleyici tüm işlemleri işler ve katılımcılara olaylara göre hangi işlemin gerçekleştirileceklerini bildirir. Düzenleyici, saga istekleri gerçekleştirir, her görevin durumlarını depolar ve yorumlar ve telafi işlemlerini kullanarak hata kurtarmayı işler.

Düzenleme kullanarak bir destan gösteren Diyagramı.

Düzenlemenin avantajları Düzenlemenin dezavantajları
Karmaşık iş akışları veya yeni hizmetler eklediğinizde daha uygundur. Diğer tasarım karmaşıklığı için koordinasyon mantığının uygulanması gerekir.
Orchestrator akışı yönettiğinden döngüsel bağımlılıklardan kaçınıyor. Düzenleyici iş akışının tamamını yönettiğinden hata noktasına neden olur.
Sorumlulukların net bir şekilde ayrılması hizmet mantığını basitleştirir.

Sorunlar ve dikkat edilmesi gerekenler

Bu düzenin nasıl uygulaneceğine karar velarken aşağıdaki noktaları göz önünde bulundurun:

  • Tasarım düşüncesinde Shift: Saga desenini benimsemek farklı bir düşünce yapısı gerektirir. Birden çok mikro hizmette işlem koordinasyonu ve veri tutarlılığı üzerinde odaklanmanızı gerektirir.

  • Hata ayıklama destanlarının karmaşıklığı: Hata ayıklama destanları, özellikle katılan hizmetlerin sayısı arttıkça karmaşık olabilir.

  • Geri alınamaz yerel veritabanı değişiklikleri: Veriler geri alınamıyor çünkü saga katılımcıları ilgili veritabanlarında değişiklikler işliyor.

  • Geçici hataları ve idempotence'ı işleme: Sistem, geçici hataları etkili bir şekilde işlemeli ve aynı işlemi yinelerken sonucu değiştirmediğinden bir kez daha kalıcılık sağlamalıdır. Daha fazla bilgi için bkz.etkili ileti işleme.

  • Destanları izleme ve izleme gereksinimi: Bir destan'ın iş akışını izleme ve izleme, operasyonel gözetim sağlamak için temel görevlerdir.

  • Telafi işlemlerinin sınırlamaları: Telafi işlemleri her zaman başarılı olmayabilir ve bu da sistemi tutarsız bir durumda bırakabilir.

Destanlardaki olası veri anomalileri

Veri anomalileri, destanlar birden çok hizmette çalıştığında ortaya çıkabilecek tutarsızlıklardır. Her hizmet katılımcı verileri olarak adlandırılan kendi verilerini yönettiğinden, hizmetler arasında yerleşik yalıtım yoktur. Bu kurulum, kısmen uygulanan güncelleştirmeler veya hizmetler arasındaki çakışmalar gibi veri tutarsızlıklarına veya dayanıklılık sorunlarına neden olabilir. Tipik sorunlar şunlardır:

  • Kayıp güncelleştirmeleri: Bir destan başka bir destan tarafından yapılan değişiklikleri dikkate almadan verileri değiştirdiğinde, üzerine yazılan veya eksik güncelleştirmelere neden olur.

  • Dirty şunu okur: Bir destan veya işlem başka bir destanın değiştirdiği verileri okuduğunda, ancak değişiklik tamamlanmamışsa.

  • Belirsiz veya güncelleştirilemeyen okumalar: Bir destandaki farklı adımlar tutarsız verileri okuduğunda çünkü okumalar arasında güncelleştirmeler gerçekleştiğinden.

Veri anomalilerini ele almak için stratejiler

Bu anomalileri azaltmak veya önlemek için aşağıdaki karşı önlemleri göz önünde bulundurun:

  • Anlam kilidi: Bir destan'ın telafi edilebilir işlemi bir güncelleştirmenin devam ettiğini belirtmek için semafor kullandığında uygulama düzeyi kilitleri kullanın.

  • Commutative güncelleştirmeleri: Tasarım güncelleştirmeleri, aynı sonucu üretmeye devam ederken herhangi bir sırayla uygulanabilmesini sağlar. Bu yaklaşım, destanlar arasındaki çakışmaları azaltmaya yardımcı olur.

  • Kötümser görünüm: Kirli okumaları ortadan kaldırmak için veri güncelleştirmelerinin yeniden denenebilir işlemlerde gerçekleşmesi için destan sırasını yeniden sıralar. Aksi takdirde, bir destan kirli verileri okuyabilir veya kaydedilmemiş değişiklikleri, başka bir destan da güncelleştirmelerini geri almak için aynı anda telafi edilebilir bir işlem gerçekleştirir.

  • Yeniden okuma değerlerini : Güncelleştirmeleri yapmanızdan önce verilerin değişmeden kaldığını onaylayın. Veriler değişirse geçerli adımı durdurun ve gerektiğinde saga'yı yeniden başlatın.

  • Sürüm dosyaları: Bir kayıtta gerçekleştirilen tüm işlemlerin günlüğünü koruyun ve çakışmaları önlemek için bunların doğru sırada gerçekleştirildiğinden emin olun.

  • Değere göre Risk tabanlı eşzamanlılık: Olası iş riskine göre uygun eşzamanlılık mekanizmasını dinamik olarak seçin. Örneğin, düşük riskli güncelleştirmeler için destanları ve yüksek riskli güncelleştirmeler için dağıtılmış işlemleri kullanın.

Bu desen ne zaman kullanılır?

Şu durumlarda bu düzeni kullanın:

  • Sıkı bir bağlama olmadan dağıtılmış bir sistemde veri tutarlılığı sağlamanız gerekir.
  • Dizideki işlemlerden birinin başarısız olup olmadığını geri almanız veya telafi etmeniz gerekir.

Bu düzen aşağıdaki durumlarda uygun olmayabilir:

  • İşlemler sıkı bir şekilde eşlenir.
  • Telafi işlemleri önceki katılımcılarda gerçekleşir.
  • Döngüsel bağımlılıklar vardır.

Sonraki adım

  • Bulutta yerel veri desenlerini

Bu deseni uyguladığınızda aşağıdaki desenler uygun olabilir:

  • Koreografi düzeni, merkezi bir denetim noktasına güvenmek yerine sistemin her bileşeni bir iş işleminin iş akışıyla ilgili karar alma sürecine katılır.

  • Telafi İşlemi düzeni bir dizi adım tarafından gerçekleştirilen işleri geri alır ve 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 genelliklebu nihai tutarlılık modelini izler.

  • Yeniden Deneme düzeni, 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. Bu desen, uygulamanın kararlılığını artırabilir.

  • Devre Kesici düzeni uzak bir hizmete veya kaynağa bağlandığınızda kurtarılması değişken bir süre alan hataları işler. Bu düzen, bir uygulamanın kararlılığını ve dayanıklılığını artırabilir.

  • Sistem Durumu Uç Noktası İzleme düzeni, dış araçların belirli aralıklarla kullanıma sunulan uç noktalar üzerinden erişebildiği bir uygulamada işlevsel denetimler uygular. Bu düzen, uygulamaların ve hizmetlerin doğru performans sergilediğini doğrulamanıza yardımcı olabilir.