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
Genel

İnanıyorum o halde çalışıyorum

Silikon vadisi ve fire & catch dizileri sonrası dünyayı daha iyi bir yer haline getirmek ve projeye inanmakla ilgili söylemler artmaya başladı, proje sahipleri veya İK çalışanları görüşmeler sırasında biz projemize inanıyoruz ve dünyayı daha iyi bir haline getireceğiz, sen de inanıyor musun sorusunu sormaya başladılar. Sanıyorum ki filmlerin ve dizilerin etkisinde kalıyorlar. Bu tür süslü laflar yatırımcıların ilgisini çekmek için işe yarayabilir.

İnanç, fikre/düşünceye dayalıdır, projeye değil projenin temsil ettiği fikre/düşünceye inanırsınız. Ancak projenin temsil ettiği fikir/düşünce ile buna bağlı davranışı değişebilir ve topluluk yeni platformlara kayar veya bölünürler. Bu çalışanlar içinde geçerlidir.

İnsanlar inandığı fikirler ve projeler için ücretsiz çalışıyorlar, kendi kişisel zamanlarını ve hatta kişisel finans kaynaklarını özgür yazılım projeleri veya stk’lar gibi fikir ve düşüncelerini gerçekleştirebilecekleri yerlerde kullanıyorlar. Peki sizin projenizde çalışan bir yazılımcı veya pazarlamacı sizin fikriniz için ücretsiz veya düşük ücretli çalışmayı kabul ediyor mu?

Proje sahiplerinin zihinleri fikirlerine olan bağlılıkları nedeni ile görmeleri gerekenleri değil görmek istediklerini görüyorlar. Bu durum kendilerine ait fikir ve düşüncelere yine kendileri gibi adanmış personel bulamamak ile sonuçlanıyor ve zamanla parası biten girişimci batıyor. Çalışanınızın inancını test etmek istiyorsanız iki ay maaş vermeyin yada maaşlarının yarısını ödeyin, ne kadar inandığını göreceksiniz.

Çalışanlar ise işlerini ve şirketlerini seçerken hedeflerine ve kariyerlerine etkisi ile karar verirler. Herhangi biri uzman niteliğinde bir işe başvuru yapmış ise zaten şirketin kendisine bir değer katacağına inanmıştır bu inancı sorgulamanız kişinin düşüncesini olumsuz olarak değiştirmesine neden olur ki bu zamanla verimsiz bir çalışana dönüşmesinin başlangıcıdır. Sizin sorgulamanız gereken çalışanımın kişisel hedeflerine ulaşmasında yardımcı olabilir miyim sorusundan başka bir şey olmamalıdır. Bunu sağladığınızda kendinize adanmış bir çalışan elde edeceksiniz, hiç bir şey yapmadan projenizi anlatıp ee artık sende benim kadar inanıyor musun diye sormak abeslikden başka bir şey değildir.

Eğer projenizin başarılı bir şekilde yürümesini istiyorsanız çalışanlarınızın kişisel ve kariyer planlarına kulak verin ve onlara yardımcı olun, yaptıkları işi sevmelerini sağlayın, sadece projenizi anlatıp inanmasını beklemeyin. Eğer bu beklenti ile personel alıyorsanız sizi araştıran başvuru sahibi tam olarak size duymanız gerekenleri söyleyerek işi kolayca alabilir.

Standart
Genel

Facebook ve Tor network’ü

Facebook çok yakın bir zamanda (45 dakika önce) facebook’u, tor networkü üzerinden kullanabileceğimizi duyuran bir blog post’u yayınladı. Ancak bu adresin kullanılması mahremiyetinizi ortadan kaldıracaktır.

Facebook artık kimin tor network’ü üzerinden geldiğini biliyor olacak ve hesabınızı tor network’ü ile ilişkilendirebilecek. Bu ilişkilendirmeyi ise daha sonra hükümetler arası istihbarat anlaşmaları uyarınca her hangi bir devlet ile paylaşmakda bir problem görmeyecektir.

Aslına bakarsanız zaten tor browser üzerinden üst seviyedeki siteleri kullanmak bir problem iken facebook pek çok dikkatsiz kullanıcıyı kullanıcının faydası için daha büyük bir tehlikenin içine sokuyor…

Sözün özü, facebook’a ait onion adresinden uzak durun. hatta kaçın.

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
python, tornado

Tornado ve coroutine’ler

Tornado ile uygulamamızı hazırlarken bazen genel asenkron fonksiyonlar yazmamız gerekiyor. örneğin:


BaseHandler(tornado.web.RequestHandler):

    @tornado.gen.coroutine
    def get_user_stats(self, user):
        ...
        stats = yield self.db.user_stats.find_one({"user_id": user})
        return stats

HedeHandler(BaseHandler):
    @tornado.web.asyncronius
    @tornado.gen.corotine
    def get(self, age):
        .....
        users = yield self.db.users.find({"age": age})
        while (yield users.fetch_next):
           user = users.next_obj()
           user_stats = self.get_user_stats(user["_id"])

Buradaki problem içerisinde yield kullandığımız bir method yada fonksiyon içerisinde ne yazık ki return deyimini kullanamayacak oluşumuz, bu kodu çalıştırmayı denediğimiz de python bize generator içerisinde return deyimi kullanamazsınız hatasını verecektir, fonksiyonun birden bire generator’e dönüşmesinin nedeni ise kullandığımız yield deyimi.

Bu problemi aşmak için tornado.gen paketi içerisinde bulunan Return exception’ınını kullanmamız gerekiyor, kodu yeniden düzenlediğimiz de ise son hali şöyle olacak.


BaseHandler(tornado.web.RequestHandler):

    @tornado.gen.coroutine
    def get_user_stats(self, user):
        # bu methodu bir kaç farklı yerde daha kullanıyoruz.
        stats = yield self.db.user_stats.find_one({"user_id": user})
        raise tornado.gen.Return(stats)

HedeHandler(BaseHandler):
    @tornado.web.asyncronius
    @tornado.gen.corotine
    def get(self, age):
        users = yield self.db.users.find({"age": age})
        while (yield users.fetch_next):
           user = users.next_obj()
           user_stats = yield self.get_user_stats(user["_id"])
           # user_stats la bişiyler yap

tornado coroutine içerisinde atılan exception’ları yakalayarak Return sınıfına ait bir exception olup olmadığını kontrol ediyor, eğer Return exception’ı ise sonucu alıp Future sınıfının set_result methoduna veriyor ve future nesnesi yield edilmek üzere return ediliyor. python3 de ise bu exception’a gerek yok, direk return kullanabiliyoruz.

Bu arada tornado çok güzel, gelsenize.

Standart
Genel

Priminizi kahve olarak alırmısınız?

Herkesin hiç bir işe yaramayan, kutular içerisine saklanan ancak atmaya kıyamadığı bazı eşyaları vardır, arada bir yapılan temizlik sırasında bunların atılması gerektiği söylense de bu eşyalar atılmaz ve saklanılmaya devam eder. Bunu nedeni eşya ile kurulan duygusal bağdır. Benzer şekilde şirket içerisinde çalıştığınız projelerde; projeyi hayata geçirmek için harcadığınız zaman ile doğru orantılı olarak projenin fikri veya proje için üretilmiş araçlar ile de aynı duygusal bağı oluşturursunuz. Eğer proje başarılı bir şekilde ilerliyor ise veya geliştirdiğiniz araçlar farklı alanlarda kullanılabilecek çözümler içeriyor ise çalıştığınız birimin sorumluları patronunuza sizin ödüllendirilmenizi önerir.

Ödüllendirme şirketin diğer çalışanları için bir mesaj içerir; “işinizi iyi yapar ve, faydalı olursanız, ödüllendirilirsiniz”. Bu ödüllendirme sizin dahil olmadığınız kapalı toplantılarda konuşulur ve ay başı gelip hesabınızı kontrol ettiğinizde yatan maaşınızda bir fark görürsünüz. Psikolojiden habersiz müdürleriniz, patronlarınız size sürpriz yaptıklarını düşünürken, siz “acaba yanlışlıkmı oldu” diye düşünüp sorduğunuzda “yaptığın işi patronlara anlattım, çok beğendiler, sana prim verdik” diye bir cevap almanız çok olasıdır. Tüm bu olayların neticesinde patronlarınız sizden daha iyi verim beklerken başarınızın habersizliği ve sessizliği sizin projeniz ile olan bağlarınızın incelmesine ve hatta azalmasına neden olur. bunun sonucunda projeye ilginiz kaybolur, çalışma hevesiniz düşer.

Kahve ise 40 yıl hatırı olan, hoş sohbetle beraber iyi giden, samimiyeti sağlayan sıcak bir içecektir. Banka hsaplarında yer alan soğuk, durgun ve sürekli azalan rakamlar yerine 40 yıllık hatırayı tercih etmeyen patronlardan uzak duran çalışanlar, ilk fırsatında (ve belki daha az maaşa) yeni bir şirkete doğru yelken açarken hedefi daha güzel kadınlar/six packli erkekler, daha iyi bir araba, daha fazla para olan patron ve müdürleriniz  ise iskeleden size el sallamaktadır ve hala neden işinizi değiştirdiğiniz hakkında en ufak fikirleri yoktur.

Not: ödülün her zaman nakit olmadığı durumlarda vardır, kadın/araba/telefon vs. de olabilir bunlar.

Standart