Karınca ve Arı Kolonisi: Yazılımcı gözünden
Doğadaki koloni sistemleri, yazılım mimarisini anlamak için sade ama güçlü metaforlar sunar.
Karınca ve arı kolonileri; karar alma, ölçeklenme ve kırılma noktaları açısından iki farklı mimariyi temsil eder.
Karınca Kolonisi: Dağıtık Sistem Mantığı
Karınca kolonisinde:
-
Merkezi otorite yoktur
-
Her birim basit kurallarla hareket eder
-
Düzen, merkezden değil etkileşimden doğar
Yazılımdaki karşılığı:
-
Microservices
-
Event-driven yapı
-
Self-organizing sistem
Bir parça kopar:
-
Sistem durmaz
-
Diğerleri boşluğu doldurur
Bu yapı yüksek hata toleransı üretir.
Arı Kolonisi: Merkez Odaklı Sistem Mantığı
Arı kolonisinde:
-
Roller nettir
-
Akış merkezden belirlenir
-
Kraliçe kritik noktadır
Yazılımdaki karşılığı:
-
Monolith
-
Role-based workflow
-
Merkezi orkestrasyon
Merkez zarar görürse:
-
Sistem aksar
-
Yeniden yapılanma gerekir
Bu yapı tek hata noktası taşır.
Client – Server Perspektifi
Burada fark daha net görünür.
Karınca Mantığında Client–Server
-
Client daha akıllıdır
-
Kararların bir kısmı client’ta alınır
-
Server daha çok veri toplayıcı ve senkronize edicidir
Sonuç:
-
Offline çalışabilir
-
Gecikmelere dayanıklıdır
-
Ama veri tutarlılığı ve güvenlik zorlaşır
Karınca modeli:
“Client düşünebilir, server yetişemezse beklemez.”
Arı Mantığında Client–Server
-
Server akıllıdır
-
İş kuralları server’dadır
-
Client sadece arayüzdür
Sonuç:
-
Veri tutarlılığı yüksektir
-
Güvenlik merkezidir
-
Server çökerse client anlamsızlaşır
Arı modeli:
“Client uygular, server karar verir.”
Risklerin Doğal Dağılımı
-
Karınca yapısı:
-
Client riski yüksek
-
Server riski düşük
-
-
Arı yapısı:
-
Server riski yüksek
-
Client riski düşük
-
Yanlış denge kurulduğunda:
-
Ya client çok şey bilip kontrol dışına çıkar
-
Ya server her şeyi yüklenip sistemi boğar
Sonuç
İlk bakışta karınca daha kaotik, arı daha düzenli görünür.
Ama yazılımda dayanıklılık karıncadan, kontrol arıdan gelir.
İyi mimari:
-
Karınca kadar dağıtık
-
Arı kadar organize
olan yapıdır.
Eee böyle basit bir şeyi neden yazdım? Basit örnekler aslında çok karmaşık projelerin içinden çıkmamızı kolaylaştırıyor.
Bir video gördüm karıncalar ortalama bir insanın çözemediği problemi çözebiliyordu. Sistemi server tarafında sıkı tutmanın client kullanıcılarını değersizleştiridiğini ve çözüm üretme isteğini körelttiğini gördüm. Bence bu çok önemli bir nokta. Sistem ve hata ayıklma elbette ki önemli ama fazla sıkı olursa, client kullanıcılarını sistemden uzaklaştırır, gelişimin önünü keser diye düşünüyorum.