Dağıtık sistemler

Dağıtık sistemler, sanal ve/veya fiziksel ağlar ile birbirine bağlanmış sistemler üzerinde çalışan yazılımların bütün olarak bir yazılımın yürütülmesine imkân verecek şekilde kullanılmasıdır. Dağıtık sistemler, bir yazılımın kesintisiz ve maliyeti az bilişim altyapılarına ihtiyaç duyulması ile ortaya çıkmış bir konudur. Temel olarak bir yazılımın birden fazla bilgisayar üzerinde koşturulması, nasıl ne şekilde koşturulacağının tasarlanması dağıtık sistemler altında incelenir.

İlgilendiği konular yazılımın ihtiyaç duyduğu tüm bileşenlerin;  kesintisiz, istenen durumda, yüksek kaynak gereksinimlerine cevap vermesi ve maliyetlerini düşürmek  amaçlanarak şekillendi. Şuan merkeziyetsiz uygulamalar üzerindede bu konseptleri görüyoruz. Büyük miktarda işi işleyebilme ihtiyacından, internetin gelişmesine ihtiyaçlar katlanarak artmış ve dağıtık sistemler konseptleride üzerine eklenerek ilerlemiştir.

Dağıtık sistemlerin tasarlanmasında olduğu gibi, Cluster'lar üzerinde çalışan dağıtık bir uygulamanın tasarımı ile gelen zorlukların çözümlenebilmesi için, bugüne kadar birçok gelişim sağlanmış ve bu gelişimler akademisyeneler ve şirketler tarafından desteklenmiştir.

Dağıtık sistemlerin konseptleri 
Dağıtık sistemler tasarlarken ihtiyaca göre kullanılabilecek bileşenler;

 Orkestrasyon yazılımları : Sanal makine veya conteyner'leri cluster veya single node bilgisayar üzerinde
 Mesaj kuyrukları
 Veritabanları
 DNS
 Cache
 Firewall
 VPN

Dağıtık sistemler tasarlarken bu bileşenlerin belirli konseptler ve yöntemler ile çalıştırılması gerekir. Bu konseptleri ihtiyaca uygun şekillendirerek tasarlarız.Genel olarak şunlara dikkat ederiz; erişilebilir konumların sayısına(ülkeler,bölgeler), uygulamaya gelen isteklere ne kadar hızlı cevap vermemiz gerektiğine, kritik verilerin olup olmamasına, kesinti konusunda ne kadar hassas olduğumuza göre tasarlayacağımız altyapılar ve kullancağımız bileşenlerde değişir.

Dağıtık sistemler tasarlanırken ve bileşenleri kullanırken hatta yazılımlarımızı tasarlarken göz önünde bulundurmamız gereken bazı konseptler vardır.

Temel olarak;
 High Availability : Yüksek erişilebilirlik, bir yazılımın altyapısının yazılımı her zaman kullanıma hazır tutmayı amaçlaması
 Consistency : Verilerin dağıtıldığında çoğaltılmış verilerin heryerde aynı olması
 Fault Tolerance : Bir hata ya da beklenen durumun dışında bir olay yaşanırsa altyapının bu durumlara karşı tölaransını arttırmak amaçlanır

bunların yanında cluster şeklinde çalışan orkestrasyon yazılımları, veritabanları ve cache'lerin kendilerine özgü kavramları vardır. Bunların hepsi temel bu üç kavrama bağlanmaktadır.

Kaynaklar 
 Distributed Systems: Principles and Paradigms,  Andrew S. Tanenbaum
 AWS Builders Library

Bilgisayar sistemleri