Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bulkhead deseni, hataya dayanıklı bir uygulama tasarımı türüdür. Hücre tabanlı mimari olarak da bilinen bir bölme mimarisinde, bir uygulamanın öğeleri havuzlar halinde yalıtılır, böylece biri başarısız olursa diğer öğeler çalışmaya devam edilir. Bulkhead deseni, bir geminin gövdesindeki bölümlenmiş bölmelerden adını alı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 çok hizmet içerebilir ve her hizmetin bir veya daha fazla tüketicisi olabilir. Bir hizmetteki aşırı yük veya hata, hizmetin tüm tüketicilerini etkiler.
Ayrıca bir tüketici aynı anda birden çok hizmete istek gönderebilir ve her istek için kaynakları kullanabilir. Tüketici yanlış yapılandırılmış veya yanıt vermeyen bir hizmete istek gönderdiğinde, istemcinin isteğinin kullandığı kaynaklar uzun süre kullanılamaz durumda kalabilir. Hizmete yönelik istekler devam ettikçe, bu kaynaklar tükenmiş olabilir. Ö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 özgün yanıt vermeyen hizmete değil, diğer hizmetlere de istek gönderemez.
Kaynak tükenmesi, birden çok tüketicisi olan hizmetleri etkiler. Bir istemciden gelen birçok istek, hizmetteki kullanılabilir kaynakları tüketebilir. Kaynak tükenmesi, diğer tüketicilerin hizmeti kullanamaması anlamına gelebilir ve bu da basamaklı bir hata etkisine neden olur.
Çözüm
Hizmet örneklerini tüketici yükü ve kullanılabilirlik gereksinimlerine göre farklı gruplara bölümleyin. Bu tasarım hataları yalıtmada yardımcı olur. Bir hata sırasında bile bazı tüketiciler için hizmet işlevselliğini sürdürebilirsiniz.
Tüketici ayrıca, bir hizmeti çağırmak için kullanılan kaynakların başka bir hizmeti çağırmak için kullanılan kaynakları etkilemediğinden emin olmak için 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 olursa, yalnızca o hizmet için atanan bağlantı havuzunu etkiler. Tüketici diğer hizmetleri kullanmaya devam edebilir.
Bu düzen aşağıdaki faydaları sağlar:
Tüketicileri ve hizmetleri zincirleme hatalara karşı korur. Bir tüketiciyi veya hizmeti etkileyen bir sorun, tüm çözümün başarısızlığını önlemek için kendi bölmesinde yalıtılabilir.
Bir hizmet hatası oluşursa bazı işlevleri korur. Uygulamanın diğer hizmetleri ve özellikleri çalışmaya devam eder.
Uygulamaların kullanımı için farklı hizmet kalitesi seviyeleri sağlar. Yüksek öncelikli hizmetleri kullanmak için yüksek öncelikli bir tüketici havuzu yapılandırabilirsiniz.
Aşağıdaki diyagramda, hizmetleri tek tek çağıran bağlantı havuzları etrafında yapılandırılmış engelleyiciler gösterilmektedir. Hizmet A başarısız olursa veya bir soruna neden olursa, bağlantı havuzu yalıtılır, bu nedenle yalnızca Hizmet A'ya atanan iş parçacığı havuzunu kullanan iş yükleri etkilenir. Hizmet B ve C kullanan iş yükleri etkilenmez ve kesintisiz olarak çalışmaya devam edebilir.
İki iş yükünü gösteren diyagram: İş Yükü 1 ve İş Yükü 2 ve üç hizmet, Hizmet A, Hizmet B ve Hizmet C. İş Yükü 1, Hizmet A'ya atanmış bir bağlantı havuzu kullanır. İş yükü 2, iki bağlantı havuzu kullanır. Bir bağlantı havuzu Hizmet B'ye, diğeri de Hizmet C'ye atanır. İş Yükü 1'in kullandığı bağlantı havuzu yalıtılmış. İş Yükü 2'nin kullandığı bağlantı havuzları Hizmet B ve Hizmet C'yi çağırmaya devam edebilir.
Aşağıdaki diyagramda tek bir hizmeti çağıran birden çok istemci gösterilmektedir. Her istemci ayrı bir hizmet örneğine atanır. İstemci 1 çok fazla istekte bulunarak örneğini aşırı yükler. Her hizmet örneği diğerlerinden yalıtılmış olduğundan, diğer istemciler çağrı yapmaya devam edebilir.
İstemci 1, İstemci 2 ve İstemci 3 olmak üzere üç istemciyi ve her biri Hizmet A'nın bir parçasını oluşturan üç hizmet örneğini gösteren diyagram. Her istemci kendi hizmet örneğine bağlanır. Hizmet örnekleri izole edilmiştir. Eğer İstemci 1 örneği aşırı yüklenirse, İstemci 2 ve 3 etkilenmez.
Sorunlar ve dikkat edilmesi gerekenler
Bu düzenin nasıl uygulaneceğine karar velarken aşağıdaki noktaları göz önünde bulundurun:
Uygulamanın kurumsal ve teknik gereksinimleri çerçevesinde bölümler tanımlayın.
Mikro hizmetler tasarlamak için taktik etki alanı odaklı tasarım kullanıyorsanız, bölüm sınırları sınırlanmış bağlamlarla uyumlu olmalıdır.
Hizmetleri veya tüketicileri bölme başlıklarına bölerken, teknoloji tarafından sunulan yalıtım düzeyini ve maliyet, performans ve yönetilebilirlik açısından ek yükü göz önünde bulundurun.
Daha gelişmiş hata işleme sağlamak için bölmeleri yeniden deneme, devre kesici ve kısıtlama desenleriyle birleştirmeyi göz önünde bulundurun.
Tüketicileri farklı bölümlere ayırırken, işlemleri, iş parçacığı havuzlarını ve semaforları kullanmayı göz önünde bulundurun. Resilience4j ve Polly gibi projeler, tüketici bölme noktaları oluşturmaya yönelik bir çerçeve sunar.
Hizmetleri bölme bölmelerine ayırdığınızda, bunları ayrı sanal makinelere, kapsayıcılara veya işlemlere dağıtmayı göz önünde bulundurun. Kapsayıcılar oldukça düşük yük ile kaynak ayırma konusunda iyi bir denge sağlar.
Zaman uyumsuz iletiler kullanarak iletişim kuran hizmetler farklı kuyruk kümeleri aracılığıyla yalıtılabilir. Her kuyrukta, kuyrukta iletileri işleyen ayrılmış bir örnek kümesi veya işlemeyi sıralamak ve göndermek için algoritma kullanan tek bir örnek grubu 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 ve hizmet düzeyi sözleşmesini (SLA) izleyin.
Azure Kubernetes Service (AKS) veya Azure Container Apps'te Azure API Management hız sınırları, Azure Cosmos DB istek birimi (RU) yalıtımı ve kaynak sınırları gibi yerleşik platform denetimlerini kullanın. Uygulama kodunuzda bu kısıtlama ve yalıtım mekanizmalarını yeniden oluşturmayın.
Yapay zeka ve çıkarım iş yükleri genellikle dağıtım düzeyi kotaları ve eşzamanlılık sınırları nedeniyle katı bölme noktaları gerektirir. Örneğin, iş yükü başına veya kiracı başına Azure OpenAI dağıtımlarını yalıtma.
Bu desen ne zaman kullanılır?
Bu düzeni aşağıdaki durumlarda kullanın:
- Bir hizmetteki kesintinin uygulamanın tamamını etkilememesi için kaynakları belirli bağımlılıklar için yalıtmak istiyorsunuz.
- Kritik tüketicileri standart tüketicilerden yalıtmak istiyorsunuz.
- Uygulamayı basamaklı hatalardan korumanız gerekir.
Bu düzen aşağıdaki durumlarda uygun olmayabilir:
- Kaynakların daha az verimli kullanımı projede kabul edilebilir olmayabilir.
- Eklenen karmaşıklık gerekli değildir.
İş yükü tasarımı
Azure Well-Architected Framework temellerindeki hedefleri ve ilkeleri karşılamak için iş yükü tasarımında Bulkhead desenini nasıl kullanacağınızı değerlendirin. Aşağıdaki tabloda, bu desenin her bir sütunun hedeflerini nasıl desteklediği hakkında rehberlik sağlanmaktadır.
| Ana Direk | Bu desen sütun hedeflerini nasıl destekler? |
|---|---|
| Güvenilirlik tasarımı kararları, iş yükünüzün hatalı çalışmaya dayanıklı olmasına ve bir hata oluştuktan sonra tamamen çalışır duruma geldiğinden emin olmasına yardımcı olur. | Bileşenler arasındaki kasıtlı ve tam segmentasyona yoluyla tanıtılan hata yalıtım stratejisi, sorunu deneyimleyen bölmedeki hataları sınırlandırmayı amaçlar ve böylece diğer bölmeler üzerindeki etkiyi ö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, bölmede kapsüllenmiş olan görevin gereksinimlerini verimli bir şekilde karşılamak amacıyla ayrı ayrı ölçeklenebilir. - PE:02 Kapasite planlaması - PE:05 Ölçeklendirme ve bölümleme |
Bu model bir sütun içinde dengeleri ortaya çıkartıyorsa, bunları diğer sütunların hedeflerine karşı değerlendirin.
Example
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
- İstemci başına istek aktarım hızını denetlemek için API Management hız sınırı ilkelerini kullanın.
- Paralel yürütmeleri sınırlamak için Azure İşlevleri eşzamanlılık denetimlerini kullanın.
- İş yükü başına CPU ve belleği denetlemek için Container Apps kaynak sınırlarını ayarlayın.
- Tahmin edilebilir yalıtım için kapsayıcı başına Azure Cosmos DB RU aktarım hızı atayın.