Bölme perdesi düzeni

Azure

Bulkhead deseni, hataya dayanıklı bir uygulama tasarımı türüdür. Bölme mimarisinde, bir uygulamanın öğeleri havuzlar halinde yalıtılır, böylece biri başarısız olursa diğerleri çalışmaya devam eder. Bir geminin gövdesinin bölümlenmiş bölümlerinden (bölme bölmelerinden) sonra adlandırılır. Bir geminin gövde kısmı hasar görürse yalnızca hasarlı bölüm suyla dolar, bu da geminin batmasını önler.

Bağlam ve sorun

Bulut tabanlı bir uygulama birden fazla hizmet içerebilir ve bu hizmetlerden her birinin bir veya daha fazla tüketicisi bulunur. Bir hizmette aşırı yük veya hata bulunması, hizmetin tüm tüketicilerini etkiler.

Ayrıca bir tüketici her istek için kaynakları kullanarak aynı anda birden fazla hizmete istek gönderebilir. Tüketici, yanlış yapılandırılmış veya yanıt vermeyen bir hizmete istek gönderdiğinde istemcinin isteği tarafından kullanılan kaynaklar zamanında serbest bırakılamayabilir. Hizmete yönelik istekler devam ettikçe bu kaynaklar tükenebilir. Örneğin, istemcinin bağlantı havuzu tükenmiş olabilir. Bu noktada, tüketicinin diğer hizmetlere yönelik istekleri etkilenir. Sonunda tüketici, yalnızca başlangıçtaki yanıt vermeyen hizmete değil, diğer hizmetlere de istek gönderemez.

Aynı kaynak tükenmesi sorunu birden çok tüketicinin bulunduğu hizmetleri de etkiler. Bir istemciden gelen çok sayıda istek, hizmetteki kullanılabilir kaynakları tüketebilir. Diğer tüketiciler artık hizmeti kullanamaz, bu da zincirleme bir hata etkisi yaratır.

Çözüm

Bölüm hizmeti tüketici yüküne ve kullanılabilirlik gereksinimlerine bağlı olarak farklı gruplar halinde örneklenir. Bu tasarım, hataların ayrılabilmesine yardımcı olur ve bazı tüketiciler için hata sırasında bile hizmet işlevselliğini sürdürmenize olanak sağlar.

Bir hizmetin çağrılması için kullanılan kaynakların başka bir hizmetin çağrılması için kullanılan kaynakları etkilememesini sağlamak için tüketiciler de kaynakları bölümleyebilir. Örneğin, birden çok hizmeti çağıran bir tüketiciye her hizmet için bir bağlantı havuzu atanabilir. Bir hizmet başarısız olmaya başlarsa bu, yalnızca söz konusu hizmet için atanan bağlantı havuzunu etkiler; böylece tüketici diğer hizmetleri kullanmaya devam edebilir.

Bu düzenin avantajları şunlardır:

  • Tüketicileri ve hizmetleri zincirleme hatalara karşı ayırır. Bir tüketiciyi ya da hizmeti etkileyen bir sorun kendi bölme perdesi içinde ayrılabilir, bu da çözümün tamamının başarısız olmasını önler.
  • Bir hizmet hatası durumunda bazı işlevleri korumanıza olanak tanır. Uygulamanın diğer hizmetleri ve özellikleri çalışmaya devam eder.
  • Uygulamaların kullanımına yönelik farklı bir hizmet kalitesi sunan hizmetler dağıtmanızı sağlar. Yüksek öncelikli bir tüketici havuzu, yüksek öncelikli hizmetleri kullanacak şekilde yapılandırılabilir.

Aşağıdaki diyagramda, hizmetleri tek tek çağıran bağlantı havuzları temelinde yapılandırılmış bölme perdeleri gösterilmektedir. A Hizmeti başarısız olursa veya başka bir soruna neden olursa bağlantı havuzu ayrılır, böylece yalnızca A Hizmetine atanmış iş parçacığı havuzlarını kullanan iş yükleri etkilenir. B ve C Hizmetini kullanan iş yükleri etkilenmez ve kesinti olmadan çalışmaya devam eder.

Bulkhead deseninin ilk diyagramı

Bir sonraki diyagramda tek bir hizmeti çağıran birden çok istemci gösterilmektedir. Her istemciye ayrı bir hizmet örneği atanır. 1. İstemci çok fazla istekte bulunmuş ve kendi örneğini sonuna kadar doldurmuştur. Her bir hizmet örneği diğerlerinden ayrılmış olduğu için diğer istemciler çağrı yapmaya devam edebilir.

Tek bir hizmeti çağıran birden çok istemciyi gösteren diyagram.

Sorunlar ve dikkat edilmesi gerekenler

  • Uygulamanın kurumsal ve teknik gereksinimleri çerçevesinde bölümler tanımlayın.
  • Hizmetleri veya tüketicileri bölme perdelerine ayırırken maliyet, performans ve yönetilebilirlik açısından yükün yanı sıra teknoloji tarafından sunulan ayırma düzeyini de göz önünde bulundurun.
  • Daha gelişmiş bir hata işleme düzeyi sağlamak için yeniden deneme, devre kesici ve azaltma düzenleriyle bölme perdelerini birleştirmeyi deneyin.
  • Tüketicileri bölme perdelerine ayırırken işlemleri, iş parçacığı havuzlarını ve semaforları kullanmayı deneyin. Resilience4j ve Polly gibi projeler, tüketici bölme noktaları oluşturmaya yönelik bir çerçeve sunar.
  • Hizmetleri bölme perdelerine ayırırken ayrı sanal makinelere, kapsayıcılara veya işlemlere dağıtmayı deneyin. Kapsayıcılar son derece düşük yüklerle kaynak ayırma konusunda iyi bir denge sağlar.
  • Zaman uyumsuz iletileri kullanarak iletişim kuran hizmetler farklı sıra kümeleri aracılığıyla ayrılabilir. Her sıra, söz konusu sıra üzerinde iletileri işleyen ayrılmış bir örnek kümesine veya sıradan çıkarmaya ve dağıtım işlemeye yönelik bir algoritma kullanan tek bir örnek grubuna sahip olabilir.
  • Bölme perdeleri için taneciklik düzeyini belirleyin. Örneğin, kiracıları bölümler arasında dağıtmak istiyorsanız, her kiracıyı ayrı bir bölüme yerleştirebilir veya birkaç kiracıyı tek bir bölüme yerleştirebilirsiniz.
  • Her bölümün performansını ve SLA'sını izleyin.

Bu düzenin kullanılacağı durumlar

Bu düzeni kullanarak:

  • Özellikle hizmetlerden biri yanıt vermediğinde bile uygulama belirli bir düzeyde işlev sağlayabiliyorsa sağlayabilen bir arka uç hizmetleri kümesinin kullanımında yararlanılan kaynakları ayırın.
  • Kritik önem taşıyan tüketicileri standart tüketicilerden ayırın.
  • Uygulamayı zincirleme hatalardan koruyun.

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

  • Kaynakların daha verimsiz bir şekilde kullanılması projede kabul edilebilir olmayabilir.
  • Eklenen karmaşıklık gerekli değildir

İş yükü tasarımı

Mimar, Azure İyi Tasarlanmış Çerçeve yapılarında ele alınan hedefleri ve ilkeleri ele almak için Bulkhead deseninin 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. Bileşenler arasındaki kasıtlı ve tam segmentlere ayırma yoluyla ortaya atılan hata yalıtımı stratejisi, yalnızca sorunla karşılaşan bölmeye yönelik hatalar içermeye çalışır ve diğer bölme uçlarına etkisini önler.

- RE:02 Kritik akışlar
- RE:07 Kendini koruma
Güvenlik tasarımı kararları, iş yükünüzün verilerinin ve sistemlerinin gizliliğini, bütünlüğünü ve kullanılabilirliğini sağlamaya yardımcı olur. Bileşenler arasındaki segmentasyon, güvenlik olaylarının güvenliği aşılmış bölmeyle sınırlandırılmasına yardımcı olur.

- SE:04 Segmentlere Ayırma
Performans Verimliliği , ölçeklendirme, veri ve kod iyileştirmeleri aracılığıyla iş yükünüzün talepleri verimli bir şekilde karşılamasını sağlar. Her bölme parçası, bölme bölmesinde kapsüllenmiş olan görevin gereksinimlerini verimli bir şekilde karşılamak için ayrı ayrı ölçeklenebilir.

- PE:02 Kapasite planlaması
- PE:05 Ölçeklendirme ve bölümleme

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

Aşağıdaki Kubernetes yapılandırma dosyası kendi CPU ve bellek kaynakları ile sınırlarını kullanarak tek bir hizmeti çalıştırmak için ayrılmış bir kapsayıcı oluşturur.

apiVersion: v1
kind: Pod
metadata:
  name: drone-management
spec:
  containers:
  - name: drone-management-container
    image: drone-service
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "1"

Sonraki adımlar