• 06-11-2017, 11:54:44
    #1
    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.
  • 06-11-2017, 13:05:52
    #2
    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.
  • 06-11-2017, 14:01:51
    #3
    Ambassador adlı üyeden alıntı: mesajı görüntüle
    Ö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.
    Her bir cümlenize ayrı ayrı katılıyorum hocam.
    Ambassador adlı üyeden alıntı: mesajı görüntüle
    Ö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.
    Ambassador adlı üyeden alıntı: mesajı görüntüle
    Birde işin NoSQL tarafı var. Örneğin; Amazon Dynamodb, MongoDB veya Redis.
    Aslında Amazon'un Dynamodb servisi çok ilgimi çekiyor. Ancak şöyle bir şey kafamı kurcalayıp kurcalayıp duruyor. Şimdi bu servis Amazon'a özel bir servis. Benim bu servisi kullanacak olmam, Amazon'a bir ömür bağlı kalacak olmam manasına gelir. (Yanlış mı düşünüyorum?) Ben ilerleyen zamanlarda Amazon'dan başka bir yere geçmek istediğimde başıma neler gelecek? Tahmin bile edemiyorum. O yüzden, mümkün mertebe firmaların ürünlerine bağlı kalmak istemiyorum, umarım doğru düşünüyorumdur. Diğer veritabanları hakkında ise çok bir fikrim yok. Aralarında tanıdığım en iyi veritabanı MySQL.
    Ambassador adlı üyeden alıntı: mesajı görüntüle
    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.
    Belki de 2 ayda yapacağım bir projeyi 1 yıl oldu hâlen yapamadım. Nedeni ise projenin her bir kolunu en detayına kadar düşünmemden kaynaklanıyor. Ama en çok düşündüren ise veritabanı. Çünkü web projesinde bir terslik olsa bile bir şekilde belki hallolur ama veritabanında yanlış başlayan bir işin ilerleyen zamanlarda düzeltilmesi, toparlanması belki de kolay kolay yapılamayacak bir şey. Bu nedenle kıymetli hocam, sizlerin de dediği gibi şu an takıldığım noktaların en başında veritabanı geliyor.
    Yukarıda yaptıklarımdan, öğrendiklerimden bahsettim. Lütfen kimse yanlış yorumlamasın, bilgiçlik taslamak kibir yapmak değil amacım. Sadece geçtiğim aşamaları, öğrendiğim şeyleri sizlerle paylaşmak istiyorum. Bu yola yeni girişecek değerli ülkemizin yazılım yolcularına bir ilham olsun, onların da araştırmalarına bir vesile olsun diye yazıyorum.
    Emek verip, emeklerinizi bizimle paylaştığınız için çok teşekkür ederim. Tavsiyelerinizi kesinlikle göz önünde bulunduracağım. Özellikle veritabanı için daha fazla vakit ayıracağım.
  • 06-11-2017, 14:21:31
    #4
    OrhanBilge adlı üyeden alıntı: mesajı görüntüle
    Her bir cümlenize ayrı ayrı katılıyorum hocam.


    Hocam bundan bir süre önce bu teknolojilerin hiç birisi hakkında neredeyse hiç bilgim yoktu. Ancak derin araştırmalarım neticesinde henüz tam anlamıyla olmasa da çok şey öğrendiğimi söyleyebilirim. Projemi Symfony3 ile geliştiriyorum. Geliştirmeye başlayınca işin içinde bir terslik hissettim. Derin düşündüm. Bir proje büyürse başıma gelebilecek felaket senaryolarını düşündüm. Bu işi yapan diğer insan/firmaların geleceklerini nasıl inşaa ettiklerini araştırdım. Bulut teknolojileri öğrendim. Önceden Amazon veya benzeri bir siteye girdiimde, oradaki ürünleri gördüğümde hiç bir şeye anlam veremezdim. Bugün ise bir çoğunu araştırıp öğrendim. Sizin de bahsettiğiniz gibi projemi katmanlara hem de mümkün mertebe fazla katmanlara ayırmam gerektiğini anladım. Şu an projemi github hesabımda gizli bir depoda tutuyor, buradan da sunucuma aktarım yapıyorum. Sunucularımı Amazon üzerinde barındırıyorum. Tabi Amazon doğru bir tercih mi henüz bunu da bilmiyorum, zamanla öğreneceğim inşallah.

    Aslında Amazon'un Dynamodb servisi çok ilgimi çekiyor. Ancak şöyle bir şey kafamı kurcalayıp kurcalayıp duruyor. Şimdi bu servis Amazon'a özel bir servis. Benim bu servisi kullanacak olmam, Amazon'a bir ömür bağlı kalacak olmam manasına gelir. (Yanlış mı düşünüyorum?) Ben ilerleyen zamanlarda Amazon'dan başka bir yere geçmek istediğimde başıma neler gelecek? Tahmin bile edemiyorum. O yüzden, mümkün mertebe firmaların ürünlerine bağlı kalmak istemiyorum, umarım doğru düşünüyorumdur. Diğer veritabanları hakkında ise çok bir fikrim yok. Aralarında tanıdığım en iyi veritabanı MySQL.

    Belki de 2 ayda yapacağım bir projeyi 1 yıl oldu hâlen yapamadım. Nedeni ise projenin her bir kolunu en detayına kadar düşünmemden kaynaklanıyor. Ama en çok düşündüren ise veritabanı. Çünkü web projesinde bir terslik olsa bile bir şekilde belki hallolur ama veritabanında yanlış başlayan bir işin ilerleyen zamanlarda düzeltilmesi, toparlanması belki de kolay kolay yapılamayacak bir şey. Bu nedenle kıymetli hocam, sizlerin de dediği gibi şu an takıldığım noktaların en başında veritabanı geliyor.
    Yukarıda yaptıklarımdan, öğrendiklerimden bahsettim. Lütfen kimse yanlış yorumlamasın, bilgiçlik taslamak kibir yapmak değil amacım. Sadece geçtiğim aşamaları, öğrendiğim şeyleri sizlerle paylaşmak istiyorum. Bu yola yeni girişecek değerli ülkemizin yazılım yolcularına bir ilham olsun, onların da araştırmalarına bir vesile olsun diye yazıyorum.
    Emek verip, emeklerinizi bizimle paylaştığınız için çok teşekkür ederim. Tavsiyelerinizi kesinlikle göz önünde bulunduracağım. Özellikle veritabanı için daha fazla vakit ayıracağım.
    Amazon tabi ki doğru bir tercih bir önceki mesajımda da bahsettim çünkü Cloud teknolojisini ele aldığınızda geleceğin teknolojisi günümüzde ve IaaS, PaaS, SaaS ın kalbi Cloud tarafında atıyor. Bu bağlamda Cloud tarafında ön sıralarda hatta öncülerinden olan Amazon ile çalışmak hem güvenilir hemde gelişim açısından çok güzel.
    Amazon'a bir ömür bağlı kalmak olarak bakmayın olaya. Neden derseniz? Olayın özünde şu var veritabanı olarak ele alırsak;
    Veritabanı yapısı ne şekilde? Yani nosql mi ilişkisel mi? Siz amazon dynamodb deki verilerinizi nosql olarak mongodb ye geçirebilirsiniz örneğin.
    Olayı firmaya bağlımlı kalmak olarak ele alırsanız yanlış olarak ele almış olursunuz. Cloud hızla gelişen ve büyüyen bir alan bu aşamada hem güvenli, hem hız, hem esneklik, hem teknoloji gibi durumların hepsini bir arada ve en iyi şekilde bulabilmeniz için bu sektörde bir firma ile çalışmalısınız
    Keza kendiniz bir sunucu alıp en basidinden sanallaştırma teknolojisi ile bunu "basit anlamda" yapabilirsiniz. Ama olay katman yapısını kullanmaya geldiğinde tek bir sunucu ile bitmeyecek bunların yedeklemesi, donanım maliyetleri, yönetimi v.s gibi bir çok durumda çıkacak ortaya.
    Projenizi tek başına mı geliştiriyorsunuz? Eğer öyle ise bu durumda biraz sıkıntı aslına bakılırsa. Çünkü SaaS tarzı projelerde esas alınacak en temel şey ekip çalışması ve ekibin çalışırken çıkarımlarda bulunması. Veritabanı bu tarz veya bir çok ciddi proje için "her şey"dir. Bundan dolayı çok iyi kurgulanıp çok iyi tasarlanması gerekir. Hatta kurguladığınız veritabanını workbench dediğimiz tarafta test etmenizde büyük fayda var.
    Ayrıca Symfony3 güçlü bir framework ancak benim size tavsiyem her zaman yeniliklere açık olun mutlaka yedek bir silahınız olsun. Yani 2. bir framework bilin ve lazım olduğunda kullanmaktan çekinmeyin.