yazılım

Ölçeklenebilirlik, Raft ve Consensus – Bölüm 1

Raft son dönemde pek çok farklı uygulama içerisinde kullanılmaya başlandı, bunun en büyük nedeni çeşitli makale, görselleştirme, demo ile biz yazılımcılara basitçe anlatılabilmesi. Raft’ın bilgisayar bilimindeki  tanımı “bir consensus algoritması”dır ancak bu cümle sizlere hiç bir şey ifade etmeyebilir zira cevaplanması gereken başka sorularınız vardır. Bu sorulardan biri sanırım “iyide, consensus nedir” sorusudur.

Consensus kelimesinin anlamı uzlaşmadır.  Bu bilgi ile yukarıdaki tanımı yeniden oluşturduğumuzda “Raft bir uzlaşma algoritmasıdır” haline geldi değil mi?   Elbette ki bu yeni bir soruyu daha getirdi. Uzlaşma nedir?

Bilgisayar bilimlerinde Uzlaşma farklı anlamlara gelebilir, bu tanım algoritma veya protokol içerisinde kesin ve net olarak tanımlanır. Biz şu aşamada çok geniş bir tanımlama yapacağız, Kabaca Uzlaşma;  kontrol ettiğimiz bilgisayarlar topluluğu içerisinde bizim için yeterli sayıdaki grubun gönderdiğimiz iş veya mesajı işlemesi/kabul etmesidir.

Kabaca örnek vermeye çalışayım; Elimizdeki yazılımımız yedekleme işini yapmak ile sorumlu ve %100 uzlaşmaya ihtiyaç duyuyor.  Elimizde 1gb büyüklüğünde bir dosya  ve grup içerisinde de 10 adet bilgisayar var,  Bu 1gb veriyi 10 bilgisayara gönderdiğimizde, 10 bilgisayardan 10’u da bu veriyi alıp disk’e yazıp bu işlemin başarı ile sonuçlandığını söyler ise uzlaşma sağlanmış demektir. Bu aşamada bu dosyanın kalıcı olarak saklanması gerektiğini söyleyen bir mesaj gönderilerek (commit) işlemi sonladırır.

10 bilgisayardan bir veya daha fazlası bu işlemi yapamayacağını söyler ise (disk üzerinde yeterli alanı yok diyelim) uzlaşma sağlanamaz ve grup içerisindeki bilgisayarlara mevcut dosyanın silinmesi gerektiğini belirten bir mesaj gönderilir (rollback).

Raft bu uzlaşma kuralını %50+1 olarak belirler. Eğer grup içerisindeki toplam bilgisayarların %50+1’i işlemi gerçekleştirebilmiş ise uzlaşma sağlanmış demektir, geriye kalan %50-1 ise uzlaşma sağlanmış olan durumu (yukarıdaki örnekte dosyanın diskde saklanması/yedekleme)  bir ara kendi disklerine alacaklar ve %100 uzlaşma sağlanmış olacak.

Yukarıda bahsi geçen işlemi elbette Raft kullanarak gerçekleştirmek zorunda değilsiniz. Kendi çözümlerinizi geliştirmekte özgürsünüz ancak unutmayın ki her çözüm kendi problemlerini getirecektir.

Yukarıda Raft’ın uzlaşma için %50+1 kuralına sahip olduğunu belirttik, peki geriye kalan %50-1’in durumu ne olacak? Bu noktada yazılımınız bu tür durumları göz ardı edebilecek bir uygulama değil ise başka çözümler bulmak zorundasınız.

Yukarıdaki bilgiler ışığında şunu rahatlıkla söyleyebiliriz; Consensus algoritmaları eninde sonunda istikrarlı bir yapı oluşturulmasını sağlar.

Standart
yazılım

İşinizin ne olduğunun farkında mısınız?

Teknolojinin henüz gelişmediği dönemlerde iş yapan firmaların pek çoğu teknolojinin gelişmesine ayak uyduramayıp kısa zaman içerisinde battılar. Hataları aslında teknolojiye ayak uyduramamak değil hangi işin içinde olduğunu anlayamamaktı.

İş sahipleri çoğu zaman kimin, hangi sorununu çözebildikerinin farkında değillerdir, buna rağmen işini genişletebilmek, daha çok müşteriye ulaşabilmek için çalışıyor, yerel yada ulusal reklam kampanyaları, iş ortaklığı anlaşmaları düzenliyor. Tüm bu çabalara rağmen çoğunlukla istediği büyümeyi yakalayamıyor. Bunun en büyük nedeni benim işim ve ben müşterimi bilirim düşüncesi.

Bir girişimin neye ne zaman ne kadar büyüklükte bir hacim için iş ortaklığına ihtiyacı olacağı belli olmaz, genellikle bu kullanıcıların ihtiyaçları doğrultusunda ortaya çıkar ve yolun daha başında iken henüz hacmi bilinmeyen ihtiyaçlar için iş ortaklığı anlaşmaları imzalamak her iki taraf içinde oldukça mesai harcayan bir süreçtir. Oysa Api’lar ile bütün bu süreçleri geçerek iş hacmimizi daha hızlı arttırabilir ve geliri arttırabiliriz.

Örneğin bir sosyal ağ’da kayıtlı olan bir fotoğrafçı yakın zamanda doğum günü gelen bir arkadaşı için sosyal ağ’a yüklediği ve arkadaşının beğendiği bir fotoğrafı baskıya vermesi için fotoğrafı indirmesi (bulut dedikleri bir şey var atıyorsun böyle gelen ihtiyacını alıp gidiyor) başka bir siteye kaydolması fotoğrafı yüklemesi ve ödemeyi yapması gerekiyor. Baskı firması hali hazırda bu işler yapılmışken sadece bir api ucu açarak sosyal ağın işini genişletmesinde yardımcı olacağı gibi, sosyal ağa eklenen bu özelliği kullanmak isteyecek olan diğer kişiler ile kendi işinide genişletebilir. Bu api sayesinde sosyal ağda kullanıcı olan kişi yeni bir yere kaydolmak vs. gibi sıkıcı işler yerine fotoğrafını seçecek ve baskıya gönder butonuna basacak. Sosyal ağ seçilen fotoğrafı offset baskı firmasının api’ına adres bilgisi ile gönderecek, firma sosyal ağın fatura bilgisine ilgili ücreti düşecek, ve ertesi gün fotoğraf sosyal ağ kullanıcısına ulaşmış olacak. Tüm bunların implementasyonu ise sosyal ağ tarafında sadece 1 gün sürecek.

İşinizi genişletmenin en kolay yolu.

İşinizi genişletmenin en kolay yolu.

Bu günlerde konuştuğum girişimlerin pek çok kişi hizmet/servis satın aldığı üçüncü parti şirketleri sadece api’ları olmadığı yada yetersiz olduğu için değiştirmek istiyor ve yeni alternatifler arıyor. Sözün özü, ne iş yapıyorsanız yapın mutlaka api’larınız olsun. Bu api’lar sayesinde yeni iş kollarının oluşmasını sağlayabilir, kolayca ve zahmetsizce işinizi genişletebilir ve müşterilerinizi elinizde tutmaya devam edebilirsiniz.

Standart
yazılım

backbone, angularjs, emberjs, gwt ve diğerleri

Bir backend yazılımcısı ve proje yöneticisi olarak yukarıda saydığım javascript framework’lerinin pek çoğu ile daha önce hiç çalışmadım ve  web sitesi yapmayalı da oldukça uzun zaman oldu açıkcası.

Bu framework’ler ile hiç çalışmamış olabilirim ancak bu tür framework’lerin varlığının bizlerin işini oldukça kolaylaştırdığını göremeyecek kadar eblek değilim. Hayır css/html/Javascript ile uğraşmıyoruz zaten, bu başkasının işi ancak zaman içerisinde proje büyüdükçe ve arka planda yapılacak işler artmaya başladıkça veya projeyi yeni bir dil/teknoloji ile tekrar yazmaya karar verdiğimizde yapmamız gereken sadece arka plan ile ilgilenmek. Ön taraf kesintisiz olarak hizmet vermeye devam ederken biz arka tarafta her bir endpoint’i yeniden yazıp yayına alabiliyoruz, zira bizler bu iş için ön taraftaki css/html/js karmaşına girmeden bir önceki yazılım ile aynı cevapları döndürdüğümüz sürece daha önce php ile yazdığımız bir web uygulamasını örneğin python/java/rails vb. bir dil/teknolojiye çevirebiliyoruz.

Benzer şekilde sadece tasarımı değiştirmek için de yazılımcıyı meşgul etmiyoruz, zira ön yüzün tamamı bir kaç js ve css dosyasından oluşmakta, bu dosyaların ön yüz geliştiricisi tarafından güncellenmesi yeterli, js ve kullandığı template kütüphanesini bilmesinden başka bir şey gerekmiyor, ne template’i açtığında karşısında abuk subuk bir template dili nede php kodlarını görüyor. Herkesin kafası rahat, herkes mutlu.

Bu tür framwork’ler ile çalışmak başlangıç için maliyeti arttırsa da ileriye dönük olarak maliyetlerden oldukça fazla kazanç sağlanıyor. teknoloji/dil değişiminde iş gücünün tamamını meşgul etmediğiniz gibi projede çalışanların konsatrasyonunu bir tık sağa iki tık yukarı çekmek için bölmüyoruz, verim artarken maliyetlerde düşüyor.

Maliyet düşürmek derken sadece iş/kişi ilişkisinden bahsetmiyorum, kullanıcı tarafından istenen verinin bir html sayfası olarak karşıya döndürülmesi işlemci  ve bandwith maliyeti demektir. Sadece ön yüzün backbone veya angular ile yeniden yazılması bile şirket sahibine aynı donanım üzerinde daha fazla kişiye aynı anda hizmet vermesini sağlarken (cpu’dan kazanım) aynı zamanda bandwith maliyetinide düşürür (json, html’e karşı).

Sözün özü, kullanın, kullandırın, maliyetinizi düşürün.

Standart