Yeni mikro hizmetler arasında tutarlılığı nasıl sağlayabilirim?


10

Kuruluşum bir mikro hizmet patlaması yaşıyor. Şu anda yeni projeleri önyüklemenin resmi bir yolu yok. Bir ekibin dağıtım veya oluşturma sürecinde bir hata ile bana geleceğini ve sadece başka bir projede zaten çözdüğümü fark etmek için zaman harcayacağımı görüyorum. Ayrıca standartlaştırılmış görmek istediğim projeler arasında çok fazla tutarsızlık var.

Değişiklikler genellikle tek bir dosyayı (örn. Serverless.yml veya Makefile) içerir, bu nedenle git submodules gibi paylaşılan kütüphaneleri içeren bir çözüm uygulanabilir görünmez. Her projenin bakımı gereken kendi yapılandırması vardır, örneğin Dockerfiles veya serverless.yml, bu nedenle VM'ler için merkezi yapılandırma yönetimi çözümleri gerçekten uygulanamaz.

Yeni mikro hizmetlerin kuruluş standartlarına uygun olmasını ve yeni projelere başlamak isteyen geliştiriciler için kolay ve sezgisel bir şekilde mevcut projelerin hata düzeltmelerini / özelliklerini dahil etmesini nasıl sağlayabilirim? Bu sorunları çözmek için en iyi uygulamalar nelerdir?

Şu anda sahip olduğumuz iş akışı, yanındaki kişiye "şablon olarak kullanmak için hangi projeden kopyalamalıyım?" Diye sormaktır. ve o proje için gerekli olmayan tüm şeyleri silin.

Yanıtlar:


5

Çözümümün şimdiye kadar ne olduğuna bir cevap ekleyeceğim, ancak hala diğer kuruluşların bu sorunu nasıl çözdüğünü ve sahip oldukları en iyi uygulamaları duymakla ilgileniyorum.

Projeler oluşturmak için tutarlı bir tabana sahip olmama sorununu çözmek için, fikrim kazan plakalarının / şablonlarının bir havuzunu (havuzları?) Oluşturmak ve cookiecutter'ı yeni mikro servisler oluşturmak için bir araç olarak kullanmaktır . Bu şekilde, her proje, entegre bir kuruluş olarak öğrendiğimiz tüm derslerle standart bir temelden oluşturulur. Yaptığımız herhangi bir değişiklik, kalorifer plakası deposuna akış yukarı entegre edilebilir. Sanırım Nodejs Docker görüntüleri, Sunucusuz SPA'lar, Python lambdas, vb. İçin şablonlarımız olacak.

Her projenin akış aşağısında propoge edilen şablonlarda yapılan değişiklik sorununu çözmek için benim çözümüm, mikro hizmet sahiplerinin şablondaki değişikliklerden haberdar edildiği ve daha sonra bu değişiklikleri mikro hizmetlerine yaymaktan sorumlu bir süreç uygulamaktır.


Somut bir örnek olarak en iyi uygulamaları gösteren basit bir merhaba dünya uygulaması ile birlikte yaptığımız şey budur.
Monica Cellio için Boycott SE

4

Bir yapılandırma yönetimi / otomatik dağıtım sistemi kullanın. Bunlar bunun için tasarlandı. Kubernetes, Kukla, Şef, Ansible ve Tuz Yığını gibi şeyler sadece bu amaç için tasarlanmıştır ve Golden Master şablonları, kickstart komut dosyaları, Amazon AMI'ler veya sadece bir Docker konteyneri ile kullanılabilir. Bu, varsayılan temel şablonları kullanmanıza ve ardından ek rollere katman eklemenize olanak tanır. Bu, yapıların tamamen (kod olarak) belgelendirilmesini sağlar ve üretime dağıtımı hızlı ve kolay olur ve ölçeklenebilirlik veya yedeklilik ihtiyacı ortaya çıktığında veya bir şey bozulduğunda ek örneklerin tasarlandığı veya dağıtıldığı gibi tam olarak aynı şekilde dağıtılacaktır. Değişiklikler / güncellemeler de bu şekilde entegre edilebilir. Tıpkı yazılım güncellemelerini yayınladığınız gibi, yapılandırmanızdaki güncellemeleri yayınlayabilirsiniz ve yapılandırma kodu aynı yazılım depolarında ve aynı iş akışlarında yönetilen yazılım koduyla yönetilebilir. Ve yükseltme zamanı geldiğinde, şeyin nasıl inşa edildiğine dair bir gizem yoktur, sadece senaryoya bakın.

Konfigürasyon yönetim sistemlerinin bunu yapmasının bir yolu, konfigürasyon dosyalarınız için yoğun templasyon kullanımıdır. Örneğin, genellikle ortamınızda aynı veya benzer olacak birçok çizgi vardır. SaltStack, jinja şablonlarını, kukla ise Gömülü Ruby şablonlarını kullanır . AWS'yi örnek olarak kullanarak, tüm örneklerde aynı olan bir, api anahtarı, IAM rolü, bölge (veya bölgeler listesinden rastgele bir bölge seçmeniz), bir VPC vb. Ayarlamanız gerekebilir. Ama sonra işlevlerinizin ve çıktılarınızın benzersiz olması gerekir. Ya da daha iyisi, "sözleşmeleri" tanımlayan bir kukla modülü veya tuz formülü yazabilir ve bu sözleşmeleri (api tanımları) kullanarak mikro hizmetlerinizi iki veya üç basamaklı yapılandırmak zorunda kalmazsınız.

Örneğin SaltStack son zamanlarda bu özel senaryoyu tartışmak için bir buluşma gerçekleştirdi . Dahası, SaltStack ayrıca docker konteynerlerini yerel olarak yönetebilir ve dağıtabilir . (Kukla'nın Docker için de bir modülü vardır ) Aynı şekilde Ansible'ın sunucusuz dağıtımlar ve Docker kaplarıyla çalışmak için oyun kitapları ve belgeleri vardır .

Ayrıca, sunucusuz temanıza / paradigmaya devam etmek istiyorsanız, Kukla , Ansible ve tuzluk bu temaya devam etmek istiyorsanız ustasızdır veya ustasız bir modu destekler.


Soruma bazı örnekler ve açıklamalar ekledim. Konfigürasyon yönetimi gerçekten yardımcı olmuyor çünkü her proje kendi konfigürasyonunda kendi kendine yetiyor. Konfigürasyona kod olarak geçişle ilgili herhangi bir sorun yoktur, konfigürasyonu kod olarak korumak ve her biri farklı konfigürasyona sahip 100 mikro hizmetiniz olsaydı, karşılaşabileceğiniz konfigürasyon yayılımı ile ilgilidir. Şu anda tutarlı yapılarla CI / CD kullanıyoruz, bu da endişe verici değil.
user2640621

1
@ user2640621 - Hiç bir yapılandırma yönetim sistemi kullandınız mı? "Yapılandırma genişlemesi" nin merkezileştirilmesi, onu daha kolay ve tek bir yerden (100 farklı yer yerine) yönetmenize yardımcı olur. Her proje kendi içinde yer alsa da, dağıtımları geçici olarak sormak gibi bazı çakışmalar vardır. Onları yazmadan önce nasıl çalıştıklarına dair bir fikir edinmek için bir sanbox'ta bir çift denemeye değer olabilir ... Bu sadece yapılandırma dosyalarınızın yönetimini otomatikleştirmekle kalmaz, bundan çok daha fazlasını yapar.
James Shewey

1
SaltStack, Chef ve Kukla kullandım ama sadece VM'leri yönetmek için kullandım. Cevabınız için teşekkürler, kesinlikle VM'lerin yönetimi dışında yapılandırma yönetiminin nasıl kullanılabileceğini görüyorum.
user2640621

2
@ user2640621: Eğer hepsi farklıysa: "Siz kodlayın, çalıştırın". Ekiplerin hizmetlerini yönetmesine izin verin. Acılarını hissetmelerine izin ver.
Monica'yı eski durumuna getirin - M. Schröder

3

Bu soru geniştir, eğer cevabım biraz temelden uzaksa, daha iyi bir anlayışa sahip olmak için bağlam ve belirli örnekler eklemekten çekinmeyin.

AWS 'AMI gibi bir makine görüntüsünün kullanılması, daha sonra sürekli teslimatınızda koruyabileceğiniz ve dağıtabileceğiniz bir taban veya altın görüntü oluşturmanıza izin verecektir. Bu mimariyi kullanarak, her mikro hizmetin aynı yapılandırmaya sahip tutarlı bir donanıma yerleştirildiğinden emin olursunuz, böylece karşılaştığınız sorunlar mikro hizmet / uygulama yapılandırmasıyla ilgilidir.

Bu değişmezliği Ansible ve Packer gibi yapılandırma araçlarının eklenmesiyle daha da ileriye götürebilirsiniz. Yapılandırma yönetimini kullanarak makine görüntüsünü üzerinde istediğiniz her şeyi (uygulama dahil) sağlayabilirsiniz. Packer daha sonra bu makine görüntüsünün anlık görüntüsünü almanıza izin verir ve her konuşlandırma aynı olur.

Bu örneği kullanarak, Ansible ve Packer'ın yardımıyla doğru paketleri, güncellemeleri ve yapılandırmayı içeren bir temel AMI'yi 'pişirebilirsiniz'. Ayrıca, uygulama kodunu çekerek, herhangi bir değişiklik yaparak ve mikro hizmeti bu temel görüntünün üstüne dağıtarak dağıtımı tamamlamak için 'Ansible-Pull' öğesine bakabilirsiniz.

Ancak verebileceğim en önemli tavsiye, tüm kuruluşun destekleyebileceği ve koruyabileceği bir çözüm bulmaktır. Belirli sorunlarınızı çözen, liderliğin kültürü ve tutumuyla eşleşen ve modern mimari uygulamalarını benimseyen bir SDLC kurmaya değer.

Üç kuruluşla birlikteyim ve üç farklı yaklaşımda bulunduk.

İyi şanslar!


VM tabanlı çözümler (çoğunlukla Sunucusuz ve biraz Docker) kullanmıyoruz, ancak sorunumu örneğinize uygulamayı deneyeceğim. Birisi yeni bir paketleyici görüntüsü oluşturmak istediğinde nereden başlasın? Her proje bağımsızsa ve paketleyici yapılandırması için merkezi bir depo yoksa, görüntü oluşturmak için temel olarak ne kullanırlar? Belki de farklılıklardan biri, birlikte çalıştığım projelerin, Ansible gibi merkezi projelere herhangi bir bağımlılık olmaksızın, tüm projeler için yapılandırmanızı bir kerede güncelleyebileceğiniz, mümkün olduğunca kendi kendine yetmeye çalışmaya çalışmasıdır.
user2640621

Sunucusuz ve Docker tabanlı mimariyle bu temel ilkeleri uygulayabilirsiniz. Bir strateji benim bir temel docker dosyasını korumak için. Her bir mikro hizmette beklediğiniz yapılandırmayı içeren bir centOS tabanlı docker dosyası oluşturabilirsiniz, daha sonra her ekip bu docker dosyasını içeri çekebilir ve bunun üzerine kendi mikro hizmete özel docker dosyasını oluşturabilir. Kapsayıcı yönetimi ve sürekli dağıtım konusunda yardımcı olmak için Kubernetes gibi bir araç kullanabilirsiniz.
Çad
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.