OrhanBilge adlı üyeden alıntı: mesajı görüntüle
Merhabalar,
SaaS modeline dayanan bir web uygulaması geliştirmede kafama takılan bir takım sorular bulunmakta. Sorularımdan bazıları aşağıda yer almaktadır. Gönlüm ister ki bu konu altında SaaS model ile ilgili tüm sorular yanıt bulsun, herkes faydalansın. Çünkü yurtdışında çok popüler bir hizmet modeli olmasına rağmen ülkemizde maalesef hâlen eski ticari modellerle iş yapılmaya çalışılıyor. Yine de bilgisini herkesle paylaşmak istemeyen olursa bana ücretli veya ücretsiz destekte bulunursa çok minnettar olurum.
  1. Veritabanı konusunda en net olmasa bile en iyi çözüm nedir? Tüm müşteri verilerini aynı veritabanında tutmak bence mantıklı değil. Bana göre en iyi çözüm, müşteri başına veritabanı sunmaktır. Azure SaaS için bu konuda çok iyi bir çözüm öneriyor: Elastik Havuz. 100 tane müşterin bile olsa hepsinin veritabanını güzel bir şekilde her anlamda yönetebiliyorsunuz (kaynak kullanımı, maliyet vs.). Ancak web sunucumu farklı bir serviste tutacağım ve web projemi de PHP diliyle yazacağım için Azure'a çok bulaşmak istemiyorum, hele ki PHP'de SQL'e. (Yanlış mı düşünüyorum?).
  2. Ayrıca müşterimin veritabanında bir tablo çok şişse, nasıl bir çözüm üreteceğim?
    MySQL kullanımı doğru bir tercih midir? MySQL kullanırsam, bir kaç yıl sonra müşterilerimin verileri artınca problem yaşar mıyım?
  3. Müşteri başına bir veritabanı kullandığımızı varsayalım. Şu an normal bir web sitenizin olduğunu düşünün. Geceleri çalışması için cron ekliyorsunuz vs. Peki SaaS modelinde bu iş nasıl yürüyor? Yani 50 tane müşterim oldu, 50 tane veritabanı. 1 tane web sunucum. Nasıl her müşteri için günün belli saatlerinde müşterinin veritabanını baz alarak bir takım işlerin yapılması sağlanacak?
Bu ve bu gibi bir takım ince konular kafamı çok kurcalıyor.
Desteklerinizi beklemekteyim.

Herkese iyi çalışmalar dilerim.
Merhaba,
Öncelikle r10 da bu tarz konular görmek beni sevindiriyor. Dünyada bir çok ülkenin yazılım ve teknoloji alanındaki gelişmelerini takip edip yeniliklere açık olup ve bunları hayata geçirmek güzel bir durum. SaaS konusu başlı başına ele alındığında her tarafından detaylı bir konu bana göre.
İşin algoritması, veritabanı kurgusu sonrasında yazılım tarafı, sunucu tarafı v.s v.s gibi bir çok durum söz konusu. Sorularınızı kendime göre yanıtlayacak olursam;
1-) Bu tamamen en basit şekilde sizin yapacağınız yazılımın ne kadar veri barındıracağına, ne kadar veriyi yöneteceğine bağlı kısacası.
Öncelikle şunu tavsiye edeceğim kesinlikle SaaS projenizde katman bölümleri olmasında büyük fayda var. Yani veritabanınız ayrı bir sunucuda yazılımınız ayrı bir sunucuda hatta mümkünse cache sistemini ayrı bir sunucuda tutmanız olacaktır. Örneğin; Redis (memory ve key value tarzı cache) cache.
Hatta işin alt katmanlarına inersek yazılımınızdaki "login" tarafına bağlı veritabanını ayrı bir sunucuda tutmanız hem güvenlik açısından hemde Cloud ve SaaS anlamında efektif bir işlem olacaktır. Bu aşamada veritabanı ne şekilde seçeceğiniz çok önemli. MySQL çok detaylı ve sağlam bir veritabanıdır. Bu anlamda cluster yapısını, bilhassa index olayını ne kadar düzgün ve kontrol edebilir şekilde yapılandırırsanız bir çok aşamada problem yaşamaz ve performans olarak ise alacağınız yanıt süreleri kısa ve şaşırtıcı olacaktır. Ancak veritabanını kurgularken tabi ki hem cluster hem index hemde tablo yapı ve alanlarını çok iyi kurgulamanız gerekmektedir. Nedeni ise MySQL tarafındaki ilişkisel veritabanı olayıdır.
Birde işin NoSQL tarafı var. Örneğin; Amazon Dynamodb, MongoDB veya Redis. Redis diyorum dikkat edin yukarıda cache olarak bahsettim ama Redis aynı zamanda memory tabanlı bir veritabanı olarakta kullanılıyor ve revaşta.
https://speakerdeck.com/lautis/archi...a-saas-startup
Gördüğünüz gibi detaylar çok. Burada önemli olan SaaS projesinin detayları buna bağlı veritabanı kurgusudur. Yani iyi kurgulanmış ilişkisel veritabanı ile iyi kurgulanmış nosql bir veritabanı arasındaki fark sizin verilerinizin kullanımı,büyüklüğü hangi platformlara hükmedeceksiniz v.s.
PHP tarafında yazılım geliştirecekseniz kesinlikle bir framework ile bunu yapmanız ve versiyon güncellemeleri için ise ekstra servis kullanmanızı tavsiye ederim. Ayrıca PHP tabanında yer alacaksanız Amazon veya Google Cloud yapısını her anlamda önerebilirim. Aynı durumlar bura da mevcut sonuç olarak. Yani Azure konusunda bana göre yanlış düşünmüyorsunuz. Çünkü burada da detay çok fazla amazonun sağladığı servisler ile azure in sağladığı servisler arasında taktir edersiniz ki fark var.
2-) İşte yukarıda bahsettiğim MySQL ile alakalı tüm durumların sonuçlarından bir tanesi bahsettiğiniz tablo şişmesidir. İyi bir index ve cluster yapısına bağlı olarak Mysql Garbage Collection ile bu durumun önüne rahatça geçebilirsiniz. Ki tablo şişmesini dediğim gibi mysql içerisinde alt katmanlara ayırarakta giderebilirsiniz.
MySQL kullanımı doğru bir terchi mi sorunuza ise yukarıda belirttiğim gibi bu tamamen aslında sizin SaaS tarafında nasıl bir proje geliştireceğinize ve hangi platformlara hükmedeceğinize bağlı.
Cloud yapısının en büyük özelliği esnek olmasıdır bu yüzden veritabanı verilerinizin boyutunu cloud tarafında yönetebilir buna göre bir çok çözüm üretebilirsiniz.
3-) MySQL tarafında bu işleri kısaca bahsetmek gerekirse; MySQL Event Scheduler ile çözebilirsiniz en basidinden buna bağlı yine Cluster yapısı kurarak farklı şekilde de çözebilirsiniz veya NoSQL tarafında da bu işi rahat bir şekilde çözebilirsiniz. Ama bunların yanı sıra Cloud tarafında bu işleri hem yönetip hemde uygulayabildiğiniz bir çok çözüm mevcut;
https://aws.amazon.com/products/databases/
https://aws.amazon.com/rds/
Kısacası yazılmınızı hayata geçirmeden önce veritabanını çok iyi kurgulayın ve kesinlikle kurgunuza en uygun çözümleri araştırın.