Ganipara STACK

Merhabalar,

Tamamen sıfırdan geliştirdiğimiz Ganipara 3. yaşına giriyor ve bu serüvende o kadar çok şey öğrendik ki, gururla sunduğumuz altyapının yanısıra birçok teknolojiyi de bilgi birikimimize kattık.

Hem yaptıklarımızı daha iyi anlatmak hem de SaaS (Software As A Service) geliştirimi yapan diğer arkadaşlarımızla bilgi paylaşımı yapabilmek için bu yazıyı yazmak istedim.

Multi-tenant bir sistem geliştirmek ve sunmak birçok zorlukları da beraberinde getiriyor. Bunlardan birisi kaynak yönetimi. Sunucu kaynaklarının verimli bir şekilde yönetilebilmesi için çözümler üretmek başarılı bir SaaS için en temel yetenek, çünkü maliyetlerinizin çoğu buraya dayanıyor. Her dara düştüğünüzde elinizde sunuculara daha fazla RAM ya da disk eklemek, işlemci gücünü arttırmak hızlı ancak yanlış bir çözüm. Çünkü maliyetleriniz bir süre sonra altından kalkılmaz hale gelebiliyor.

Multi-tenant bir servis olan Ganipara’da milyonlarca sayfa gösterimi ve ödeme işleminin sorunsuz olarak gerçekleşmesi için tamamen kendi geliştirdiğimiz altyapımızı kullandığımızı söylemek isterim. Hazır bir e-ticaret altyapısının modifiye edilmiş bir versiyonu olmadığından, Ganipara’yı geliştirirken çok daha özgür davranabildik.

Türkiye’deki e-ticaret’in gerçeklerinin, dünyadakilerden çok farklı olduğu önemli bir gerçek. Özellikle alışverişteki gereksinimler ve karmaşık ödeme seçenekleri bizi aynı anda birçok sorunu çözmek zorunda bıraktı.

Bu aslında dışarıdan bakıldığında çok kolay gibi gözüken ancak birbiriyle senkron çalışması gereken onlarca servisin geliştirilmesini gerektiren oldukça çetin bir süreçti. Bu yüzden ilk versiyonumuzu sıfırdan tekrar yazdık.

Bu süreçte Redis, Elastic Search gibi birçok açık kaynaklı sunuculardan yararlandık. Sunucularımızın sağlıklı işlemesi için kendi izleme uygulamamazı geliştirdik.

Phil Karlton’ın o meşhur sözündeki durumu çok yaşadık: “There are only two hard things in Computer Science: cache invalidation and naming things”. Neredeyse çerçeveletip duvara bile asabiliriz.

Bu yazının amacı benzer geliştirim yapan diğer meslektaşlarımızla iletişim halinde olabilmek ve bilgi paylaşımında bulunabilmek için bir başlangıç yapmak.