Yalıtım ve kapsülleme sağlamak için uygulamanın bileşenlerini ayrı işleme veya kapsayıcıya dağıtın. Bu düzen aynı zamanda uygulamaların heterojen bileşenlerden ve teknolojilerden oluşmasına da olanak tanır.
Düzen, motosikletlere eklenen sepetlere benzediğinden sepet olarak adlandırılmıştır. Düzende sepet bir üst uygulamaya eklenir ve uygulamaya destekleyici özellikler sağlar. Sepet, üst uygulama ile birlikte oluşturulduğundan ve birlikte kullanımdan kaldırıldığından, üst uygulama ile aynı yaşam döngüsünü de paylaşır. Sepet düzeni zaman zaman yardımcı düzen olarak adlandırılır ve bir ayrıştırma düzenidir.
Bağlam ve sorun
Uygulamalar ve hizmetler için genellikle izleme, günlüğe kaydetme, yapılandırma ve ağ hizmetleri gibi ilgili işlevler gerekir. Bu çevre birimi görevleri ayrı bileşenler veya hizmetler olarak uygulanabilir.
Uygulamayla sıkı bir şekilde tümleştirilmişse, uygulamayla aynı işlemde çalıştırılabilir ve paylaşılan kaynakları verimli bir şekilde kullanabilirler. Ancak bu, iyi yalıtılmadıkları ve bu bileşenlerden birinde oluşan bir kesintinin diğer bileşenleri veya uygulamanın tamamını etkileyebileceği anlamına da gelir. Ayrıca, genellikle üst uygulama ile aynı dil kullanılarak uygulanmaları gerekir. Bu nedenle, bileşen ve uygulama birbirine yakın bir şekilde bağlıdır.
Uygulama hizmetlere ayrılmışsa her bir hizmet farklı diller ve teknolojiler kullanılarak oluşturulabilir. Bu, daha fazla esneklik sağlasa da her bileşenin kendi bağımlılıklarına sahip olduğu ve temel alınan platforma ve üst uygulamayla paylaşılan herhangi bir kaynağa erişim için dile özgü kitaplıklar gerektirdiği anlamına gelir. Ayrıca bu özelliklerin ayrı hizmetler olarak dağıtılması uygulamaya gecikme ekleyebilir. Dile özgü bu arabirimler için kodun ve bağımlılıkların yönetilmesi, özellikle barındırma, dağıtım ve yönetim konularında karmaşıklığı da büyük ölçüde artırabilir.
Çözüm
Bir dizi bütünsel görevi birincil uygulamayla birlikte bulundurun, ancak bunları kendi işlemine veya kapsayıcısına yerleştirerek platform hizmetleri için dillerde homojen bir arabirim sağlayın.
Sepet hizmeti mutlaka uygulamanın bir parçası değildir, ancak buna bağlıdır. Üst uygulamanın gittiği her yere bu hizmet de gider. Sepetler birincil uygulama ile dağıtılan destekleyici işlemler veya hizmetlerdir. Motosikletlerde, sepet tek bir motosiklete bağlıdır ve her motosikletin kendi sepeti olabilir. Aynı şekilde sepet hizmeti de üst uygulamayla birlikte hareket eder. Uygulamanın her örneği için sepetin de bir örneği dağıtılır ve uygulama örneğiyle birlikte barındırılır.
Sepet düzeni kullanmanın avantajları şunlardır:
Sepet, çalışma zamanı ortamı ve programlama dili açısından birincil uygulamasından bağımsızdır; bu nedenle, her dil için bir sepet geliştirmeniz gerekmez.
Sepet birincil uygulama ile aynı kaynaklara erişebilir. Örneğin, bir sepet, hem sepet hem de birincil uygulama tarafından kullanılan sistem kaynaklarını izleyebilir.
Birincil uygulamaya yakınlığı nedeniyle, bunlar arasında iletişim kurarken önemli bir gecikme yoktur.
Genişletilebilirlik mekanizması sağlamayan uygulamalarda bile, birincil uygulamayla aynı konakta veya alt kapsayıcıda kendi işlemi olarak ekleyerek işlevselliği genişletmek için sepet kullanabilirsiniz.
Sepet düzeni genellikle kapsayıcılarla birlikte kullanılır ve sepet kapsayıcısı veya yardımcı kapsayıcı olarak adlandırılır.
Sorunlar ve dikkat edilmesi gerekenler
- Hizmetleri, işlemleri veya kapsayıcıları dağıtmak için kullanacağınız dağıtım ve paketleme biçimini gözden geçirin. Kapsayıcılar sepet düzeni için son derece uygundur.
- Sepet hizmeti tasarlarken işlemler arası iletişim mekanizması konusunda dikkatli bir şekilde karar verin. Performans gereksinimleri nedeniyle kullanışsız olmayacaksa dilden veya çerçeveden bağımsız teknolojileri kullanmayı deneyin.
- Bir sepete işlev eklemeden önce bunun ayrı bir hizmet olarak mı yoksa daha geleneksel bir daemon olarak mı daha iyi çalışacağını göz önünde bulundurun.
- Ayrıca işlevin kitaplık olarak veya geleneksel genişletme mekanizması kullanılarak uygulanıp uygulanamayacağını da dikkate alın. Dile özgü kitaplıkların daha ayrıntılı bir tümleştirme düzeyi ve daha az ağ ek yükü olabilir.
Bu düzenin kullanılacağı durumlar
Bu düzeni aşağıdaki durumlarda kullanın:
- Birincil uygulamanız heterojen bir dil ve çerçeve kümesi kullanıyor. Sepet hizmetinde bulunan bir bileşen farklı çerçeveler kullanılarak farklı dillerde yazılmış uygulamalar tarafından kullanılabilir.
- Bir bileşenin uzak bir takıma veya farklı bir kuruluşa ait olması durumunda.
- Bir bileşen veya özellik, uygulamayla aynı konakta birlikte bulunmalıdır.
- Ana uygulamanızın genel yaşam döngüsünü paylaşan ancak bağımsız olarak güncelleştirilebilen bir hizmete ihtiyaç duymanız durumunda.
- Belirli bir kaynak veya bileşen için kaynak sınırları üzerinde ayrıntılı denetime ihtiyaç duymanız durumunda. Örneğin, belirli bir bileşenin kullandığı bellek miktarını sınırlamak isteyebilirsiniz. Bileşeni sepet olarak dağıtabilir ve bellek kullanımını ana uygulamadan bağımsız olarak yönetebilirsiniz.
Bu düzen şu durumlarda uygun olmayabilir:
- İşlemler arası iletişimin en iyi duruma getirilmesi gerektiğinde. Üst uygulama ile sepet hizmetleri arasındaki iletişim bir miktar ek yük (özellikle çağrılarda gecikme) içerir. Bu, sık iletişim kuran arabirimler için kabul edilebilir bir dengeleme biçimi olmayabilir.
- Her örnek için bir sepet hizmeti dağıtmanın kaynak maliyetinin, yalıtım avantajına değmeyeceği küçük uygulamalar için.
- Hizmetin ana uygulamalardan farklı şekilde veya bağımsız olarak ölçeklendirilmesi gerektiğinde. Böyle bir durum söz konusuysa özelliği ayrı bir hizmet olarak dağıtmak daha kullanışlı olabilir.
İş yükü tasarımı
Bir mimar, Azure İyi Tasarlanmış Çerçeve yapılarında ele alınan hedefleri ve ilkeleri ele almak için sepet 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ü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. | Bu görevi kapsülleyerek ve işlem dışı olarak dağıtarak, hassas işlemlerin yüzey alanını yalnızca görevi gerçekleştirmek için gereken koda azaltabilirsiniz. Ayrıca, bu işlevsellikle yerel olarak tasarlanmamış bir uygulama bileşenine çapraz kesme güvenlik denetimleri eklemek için sepetleri de kullanabilirsiniz. - SE:04 Segmentlere Ayırma - SE:07 Şifrelemesi |
Operasyonel Mükemmellik, standartlaştırılmış süreçler ve ekip uyumu aracılığıyla iş yükü kalitesinin sunulmasına yardımcı olur. | Bu düzen, doğrudan uygulama bağımlılıkları almasına gerek kalmadan uygulamanın gözlemlenebilirliğini geliştirebilecek araç tümleştirmesinde esneklik uygulamaya yönelik bir yaklaşım sağlar. Sepet işlevselliğinin bağımsız olarak gelişmesine ve uygulamanın yaşam döngüsünden bağımsız olarak korunmasına olanak tanır. - OE:04 Araçlar ve işlemler - OE:07 İzleme sistemi |
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. | Çapraz kesme görevlerini ana işlemin birden çok örneğinde ölçeklenebilen tek bir işleme taşıyabilirsiniz ve bu da uygulamanın her örneği için yinelenen işlevleri dağıtma gereksinimini azaltır. - PE:07 Kod ve altyapı |
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
Sepet düzeni birçok senaryo için geçerlidir. Sık karşılaşılan senaryo örneklerinden bazıları şunlardır:
- Altyapı API’si. Altyapı geliştirme takımı, altyapıya erişim için dile özgü bir istemci kitaplığı yerine her uygulamayla birlikte dağıtılan bir hizmet oluşturur. Hizmet sepet olarak yüklenir ve günlüğe kaydetme, ortam verileri, yapılandırma deposu, bulma, sistem durumu denetimleri ve izleyici hizmetleri de dahil olmak üzere altyapı hizmetleri için ortak bir katman sağlar. Sepet aynı zamanda üst uygulamanın ana bilgisayar ortamını ve işlemini (veya kapsayıcısını) izleyerek bilgileri merkezi bir hizmete kaydeder.
- NGINX/HAProxy yönetimi. NGINX’i ortam durumunu izleyen ve sonra NGINX yapılandırma dosyasını güncelleştirip, durum değişikliği gerektiğinde işlemi geri dönüştüren bir sepet hizmetiyle dağıtın.
- Temsilci sepeti. Sepet olarak bir temsilci hizmeti dağıtın. Uygulama, günlüğe istek kaydetme, yönlendirme, devre kesme ve bağlantıyla ilgili diğer özellikleri işlemesi için temsilciye çağrı yapar.
- Ara sunucuyu boşaltma. Hizmet için statik dosya içeriği sunumunu işlemek üzere bir node.js hizmet örneğinin önüne NGINX ara sunucusu yerleştirin.