Sepet düzeni

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.

Bunlar uygulama ile sıkı bir şekilde tümleştirilmişse uygulamayla aynı işlemde çalışarak, paylaşılan kaynakların verimli bir şekilde kullanılmasını sağlayabilir. Ancak bu, yeterli düzeyde yalıtılmış olmadıkları ve bu bileşenlerden birinde oluşan kesintinin diğer bileşenleri veya tüm uygulamayı 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 deseninin diyagramı

Sepet hizmeti, uygulamanın bir parçası olmayabilir ancak uygulamaya 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 uygulamayla olan yakınlık nedeniyle aralarında iletişim kurulurken önemli bir gecikme yoktur.

  • Genişletilebilirlik mekanizması sağlamayan uygulamalar da dahil olmak üzere, aynı konağa veya alt kapsayıcıya birincil uygulamayla kendi işlemi olarak ekleyerek işlevselliği genişletmek için bir 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ılması gerektiği durumlar

Bu düzeni aşağıdaki durumlarda kullanın:

  • Birincil uygulamanız heterojen bir diller ve çerçeveler kümesi kullanır. 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şenin veya özelliğin uygulama ile aynı ana bilgisayarda birlikte bulunması gerektiğinde.
  • 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.

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