Bölme perdesi düzeni

Bölme düzeni, hataya karşı karşı iyi bir uygulama tasarımı t t'dır. Bölme başlığı mimarisinde, bir uygulamanın öğeleri havuzlara yalıtılmıştır, böylece biri başarısız olursa diğerleri çalışmaya devam eder. Bu, bir geminin gövdesinin bölümlenmiş bölümlerine (bölme bölmeleri) göre adlandırılmıştı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.

Bölme Başlığı 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 vePolly gibi projeler tüketici bölme başlıkları oluşturmaya yönelik bir çerçeve sağlar.
  • 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 için her kiracıyı ayrı bir bölüme yer veya birkaç kiracıyı tek bir bölüme koyarak kullanabilirsiniz.
  • Her bölümün performansını ve SLA'sı izleme.

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

Ö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"