Bulut yerel teknolojilerine sahip dağıtılmış uygulamalar

Draqon

Aktif Üye
  • Dağıtılmış uygulamalar, farklı sistem ve mimarilere sahip heterojen ortamlara olanak tanır. Avantajları arasında platform bağımsızlığı, kullanılabilirlik ve ölçeklenebilirlik yer alır.
  • Makale, farklı teknikler ve çerçeveler kullanılarak farklı konfigürasyon, mimari ve modüler tasarım olanaklarını göstermektedir. Kubernetes bunun merkezinde yer alıyor.
  • Modüler ağdaki iletişim, sepet modeli olsun veya olmasın servis ağları aracılığıyla izlenebilir, analiz edilebilir ve kontrol edilebilir.
  • Adam Wiggins tarafından öne sürülen iyi bulut uygulamalarına ilişkin on iki ilke, büyük ölçüde dağıtılmış uygulamalar için de geçerlidir.



Dağıtılmış uygulamalar ve dağıtılmış sistemlerin popülaritesi, büyük ölçüde mikro hizmetler ve konteyner teknolojisindeki gelişmeler sayesinde artıyor. Eşlik eden teknik ilerlemeler, özerk ekiplerde bağımsız gelişime, dil ve çerçeve seçme özgürlüğüne ve ölçeklendirme ve yük dengeleme yoluyla dayanıklılığın artırılmasına olanak tanır.


Reklamcılık








Matthias Haeussler, Novatec Consulting GmbH'de Cloud Native'e odaklanan Baş Teknoloji Uzmanıdır. “Dağıtık Sistemler” alanında öğretim görevlisi olarak görev yapmaktadır ve uluslararası BT konferanslarında düzenli olarak konuşmacı olarak yer almaktadır.







Bu makale, modern, bulutta yerel yazılım teknolojilerini kullanarak dağıtılmış uygulama mimarilerini uygulamaya yönelik çeşitli yaklaşımları araştırıyor. Bir yandan bunlar, özellikle Java ortamında yaygın olan programlama dillerine bağlı çerçeveleri içerir. Öte yandan Kubernetes ve hizmet ağları gibi platformlar da var; hem geleneksel tarzda hem de sepetsiz yeni varyantlar.

Her şeyden önce, dağıtılmış bir uygulama mimarisinin neden anlamlı olduğu ve başarılı uygulama için hangi bileşenlerin gerekli olduğu sorusunu açıklığa kavuşturmak önemlidir. Adam Wiggins tarafından 2011 yılında yayınlanan 12 faktörlü uygulamanın ilkeleri aynı zamanda yönlendirme görevi de görmektedir (bkz. “12 faktörlü uygulama konsepti”).



2011 yılında Adam Wiggins 12 faktörlü uygulama konseptini yayınladı. PaaS sağlayıcısı Heroku'nun kurucu ortağı, uygulamaları bulutta verimli bir şekilde çalıştırmak ve olanaklarından en iyi şekilde yararlanmak amacıyla uygulamalar geliştirmeye yönelik kanıtlanmış bir yaklaşımı (en iyi uygulamaları) anlattı. 12 Faktörlü Uygulama, bir uygulama platformundan bağımsız, ölçeklenebilir ve ayrıntılı olarak yapılandırılabilir hale getirmeyi amaçlayan temel ilkeleri tanımlar. Ek olarak, ilkeler yalnızca buluta özgü yönleri değil aynı zamanda iyi yazılım geliştirmenin genel ilkelerini de içerir; örneğin bileşen başına merkezi bir sürüm kontrol sisteminin kullanılması ve kod ile bağımlılıkların temiz bir şekilde ayrılmasıyla ilgili. Geliştiriciler, on iki prensibi takip ederek uygulamalarının bulut altyapısıyla uyumlu olmasını ve platformun avantajlarından yararlanmasını sağlar.

Aşağıdaki faktörler özellikle dikkat çekicidir:

  • Faktör 3: “Yapılandırma” (konfigürasyon ve kodun ayrılması): Yapılandırma ve kodun ayrılması, bir yandan uygulamanın yeniden derleme olmadan esnek bir şekilde uyarlanmasına, diğer yandan farklı ortamlarda farklı konfigürasyonlarla kullanılmasına olanak tanır.
  • Faktör 6: “Süreçler” (Durumsuzluk ve Ölçeklenebilirlik): Durumsuz süreçler, uygulamanın ölçeklenmesini ve yönetilmesini kolaylaştırır çünkü süreçlerin önceki durumları hakkında bilgi depolamasına gerek yoktur.
  • Faktör 7: “Bağlantı noktası bağlama” (bağlantı noktalarına ve ağ iletişimine bağlanma): Standartlaştırılmış ağ protokollerinin kullanılması, bileşenler arasındaki etkileşimi basitleştirir ve farklı ortamlara kolay entegrasyon sağlar.
  • Faktör 11: “Günlükler” (Akış Olarak Günlükler): Günlükleri akış olarak ele almak, dağıtılmış uygulamaları yönetirken daha verimli hata analizi ve sorun giderme sağlar. 12 faktörlü uygulamanın ilkeleri, modern uygulamaları dinamik ve çevik bir ortamda başarıyla çalıştırmak için Heroku'nun ötesinde Cloud Foundry, Spring Boot, Docker ve Kubernetes gibi sistemlerde kullanılır.



Neden dağıtılmış sistemler?


Yazılım mimarisine yönelik geleneksel monolitik yaklaşımın birçok kişi tarafından modası geçmiş olduğu düşünülmektedir. Özellikle dağıtılmış sistemlerin ve mikro hizmet mimarilerinin destekçileri sıklıkla “Büyük Çamur Topu”ndan küçümseyici bir şekilde söz ediyor. Ancak modern kabul edilen dağıtılmış yaklaşımlar bile, Peter Deutsch'un 1994 yılında “Dağıtılmış hesaplamanın yanılgıları” adlı eserinde özetlediği gibi, bugüne kadar geçerliliğini kaybetmemiş, sorunsuz değildir.

Özellikle bir uygulamayı farklı modüllere bölmek, bileşenler arasında ağ bağımlılığına neden olur ve bu da gecikmeyi, yapılandırmayı ve hata işlemeyi etkiler. Ancak bazı senaryolarda bu mantıklıdır, hatta bazen kaçınılmazdır.

Aşağıda avantajlara ve ilgili yönlere daha yakından bakmakla ilgilidir. Dağıtılmış bir uygulamanın temel amacı hem kullanıcılara hem de geliştirme ekiplerine fayda sağlamak olmalıdır. Bunlar öncelikle kullanılabilirlik, güvenilirlik ve ölçeklenebilirlik gibi işlevsel olmayan gereksinimlerde yatmaktadır.

Böyle bir sistem, Andrew Tanenbaum'un “Dağıtılmış Sistemler” kitabında formüle ettiği gereksinimlere uygun olarak kullanıcılar için bir birim gibi hissetmelidir. Google Haritalar'ı kullanan hiç kimse arkasında kaç tane kapsayıcı olduğu veya hangi programlama dillerinin kullanıldığıyla ilgilenmez; Önemli olan tek şey güvenilirlik ve işlevselliktir.

Heterojenlik faktörü


Heterojenlik, örneğin paralellik ve eşzamanlılık açısından, dağıtılmış sistemler teorisinde merkezi bir rol oynar. Şekil 1'de gösterildiği gibi, heterojen görevlerin paralel olarak işlenmesiyle daha yüksek verimlilik elde edilebilir.




Dağıtılmış bir sistemde görevlerin paralel işlenmesi (Şekil 1).



Dağıtılmış bir sistemde görevlerin paralel işlenmesi (Şekil 1).



Heterojenlik aynı zamanda işletim sistemlerine, çalışma zamanlarına, çerçevelere vb. bağımlılıklara da yansır (bkz. Şekil 2). Tüm bu durumlarda, bir uygulamayı monolitik bir yapıya dönüştürmek mümkün değildir ve bu da dağıtılmış bir yaklaşımı zorunlu hale getirir.




İşletim sistemleri ve teknolojilerindeki heterojenlik (Şekil 2).



İşletim sistemleri ve teknolojilerindeki heterojenlik (Şekil 2).



Son olarak genişletilebilirlikten bahsetmek gerekiyor. Dağıtılmış bir mimari, yeni bileşenlerin mevcut modüller üzerinde önemli bir etkisi olmadan bağımsız modüller olarak mevcut bir sisteme entegre edilebilmesi avantajını sunar. Bu nedenle bileşenleri yeniden derlemeye veya paketlemeye gerek yoktur.

Dayanıklılık faktörü


Dayanıklılık faktörü temel olarak uygulamayı yüksek oranda kullanılabilir hale getirmek ve kullanıcı sayısındaki dalgalanmalar veya alt sistemler veya ağ segmentlerindeki arızalar gibi öngörülemeyen olaylara karşı dayanıklı tutmakla ilgilidir. Böyle bir bileşenin arızası kontrol edilebilir olmalı ve hiçbir durumda uygulamanın tamamının arızalanmasına yol açmamalıdır. Tek tek bileşenlerin ölçeklendirilmesi, yedeklilik yoluyla güvenilirliği mümkün kılar. Bir örnek başarısız olursa, hizmetin kesintisiz olarak devam edebilmesi için yeterli sayıda başka örneğin mevcut olması gerekir (bkz. Şekil 3). Bu sadece yedeklilik sağlamakla kalmaz, aynı zamanda örneğin kullanıcı sayısının artması durumunda yükü bireysel bileşenler arasında eşit bir şekilde dağıtmak ve böylece tüm sistemin istenen performansını sağlamak için yük dağıtımına da hizmet eder (bkz. Şekil 4).




Artıklık yoluyla güvenilirlik. Bir bulut sunucusunun arızalanması durumunda hizmet, yedekli bulut sunucuları ile garanti altına alınabilir (Şekil 3).



Artıklık yoluyla güvenilirlik. Bir bulut sunucusunun arızalanması durumunda servis, yedekli bulut sunucuları aracılığıyla garanti edilebilir (Şekil 3).





Kullanıcı sayısındaki dalgalanmalar dengeli yük dağılımı ile dengelenebilmektedir (Şekil 4).



Kullanıcı sayısındaki dalgalanmalar dengeli yük dağılımı ile dengelenebilir (Şekil 4).



Kullanıcı sayısında ani bir artış olursa veya daha kötüsü bir hizmet reddi saldırısı olursa, yük, artık ölçeklendirmeyle dengelenemeyecek kadar hızlı bir şekilde artabilir. Uygulamayı bundan korumak için, gelen trafiği engelleyen veya en azından kısıtlayan bir ağ bileşeni yerleştirilebilir. Bu gibi durumlarda genellikle devre kesiciler veya bölmeler kullanılır.

Esnekliğin bir başka yönü de uygulama güncellemesi sırasında kesintisiz kullanılabilirliktir. Bunu sağlamak için mavi/yeşil dağıtımlar ve kanarya sürümleri de dahil olmak üzere çeşitli dağıtım ve sıfır kesinti süresi teknikleri mevcuttur.

Her iki varyant da temel olarak, eski sürüm hala çalışırken uygulamanın yeni bir sürümünün dağıtılması prensibiyle çalışır. Mavi/yeşil dağıtımlarda değişiklik tek bir adımda gerçekleşirken, kanarya dağıtımında yeni sürüm tam olarak üretime geçmeden önce, başlangıçta sınırlı bir kullanıcı grubuna yavaş yavaş ve seçici olarak yeni sürüm tanıtılır.