yüksek trafikli web siteleri için server tercihleri

1

merhabalar,

anlık ziyaretçi sayısının 10-20 bin civarı olduğu ve veritabanı işlemlerinin gerçekleştiği(ekleme,çıkarma,okuma vb) web sitelerinde (örneğin ekşisözlük, incisözlük gibi), server tercihleri nasıl olmalı?

 

Cloud mu? Dedicated mı? Ram kapasiteleri, cpu sayıları, hangi server şirketi(radore, natro, turhost), server'a performans artırımı için kurulabilecek tool'lar hakkında bilgi verebilir misiniz?

 

Yazılım dili olarak ne hangisi tercih edilmeli? kod yazarken nelere dikkat edilmeli? 

 

Bu konuda Türkiye'de ciddi kaynak eksikliği bulunuyor bence. Tüm developer'lar kod yazıyor, projeyi ayağa kaldırabiliyor. Fakat, hiç kimse 'bu uygulamaya aynı anda 10.000 kişi girerse ne olur?' sorusunun cevabını düşünmüyor, kendisine sormuyor.

 

Sizin görüşleriniz nelerdir bu konuda?

developerkafasi developerkafasi (61)
7 yıl önce sordu

    Toplam 3 Cevap


    0

    Merhaba,

    Sorularınızı teker teker yanıtlamaya çalışacağım.

    1- Anlık ziyaretçi sayıları bu denli fazla olan web sitelerinin sunucularını seçme konusunda direkt olarak gerekli sunucu sağlayıcı firmalarla konuşmanızı öneririm(Radore,Natro vb.). Size uygun sunucu detaylarını hazırlayıp geri gönüş yapacaklardır. İnci Sözlük, eksisözlük gibi web siteleri ise tüm bilgilerini tek bir sunucu firmasında sağlıyacağını sanmıyorum. Veritabanını her gün yedeğini alıp farklı sunuculara aktarabilirler. Böylece olası veri kaybında en son alınan veri tabanı üzerinden işlemleri gerçekleştirebilirler.

    2- Bu sorunuz için gerekli olan bilgileri yukarıda zaten verdim. Ama yine de hangi firmayı tercih etmeliyim diyorsanız arama motorlarında  gerekli firmaların şikayet ve önerilerini aratarak gerekli bilgilere ulaşabileceğinizi umuyorum.

    3- Yazılım dili olarak hangi dili tercih etmeliyim sorusu ise tam bi muamma. Yıllardır tartışılan bir konu. Hangi veritabanı üzerinde çalışacağına karar verdiğinizde hangi yazılım dilini kullanmanız gerektiğini belirlemiş olursunuz. Yani Mysql ise php, Mssql ise .Net gibi. Örneğin türkiyenin teknoloji devleri olan sahibinden.com php ve Mysql kullanırken yemeksepeti.com ise Asp.Net ve Mssql kullanıyor.

    notify notify (538)
    7 yıl önce cevaplandı

      1

      Cloud ortamı Dedicated ortamlara göre daha esnektir. Anlık sunucu donanım gereksinimleri bir kaç saat içinde (duruma göre çok daha kısa sürede) aktif edilebilir. 

      Dedicated sunucunun yükseltilmesi daha zahmetli bir iştir. Örneğin Cloud ortamında Ram arttırmak bir kaç dakikalık bir işlemdir, Dedicated sunucularda bu işlem çok daha uzun sürer ve sunucunun yeniden başlatılması gerekir.

      Çok büyük trafik gereken uygulamalarda Azure, Amazon gibi servisler kullanılabilir. 

      Text tabanlı sistemlerde (örnegin uzmanim.net'te bunlardan biri) video,ses grafik ağrılıklı uygulamalardan daha az gereksinime ihtiyaç duyar.

      Eğer yerli bir servis sağlayıcı ile çalışmak isterseniz Radore Türkiye'deki en kurumsal ve işini düzgün yapan veri merkezidir. Radore'nin hizmetlerine bakabilirsiniz. Aynı zamanda uzmanim.net'in hosting sponsorudur.  Daha önce Natro ile çalışıyorduk. Natro da iyi bir servis sağlayıcıdır.

      Anlık 10K kullanıcı bir anda tesadüfen gelmez. Eğer uygulamanız normalde de anlık 10K trafik alıyorsa yapılandırmayı ona göre yapmak gerekir ama anlık 10K yine uygun hosting ortamını oluşturmak için uygun bir veri değil.

      Cloud ortamı yine bu tür anlık trafik yükselmelerinin beklendiği durumlarda iyi çözümler sunar. Örneğin sınav sonucu açıklanacak bir uygulamanın sınav sonucu açıklandığında alacağı trafik ile normal rutin trafiği bir değildir.  Eğer siz yapılandırmayı sürekli anlık 100K karşılayacak şekilde hazırlarsanız sadece 1-2 günlük yoğun trafik için ciddi maliyeti boşuna oluşturmuş olursunuz. Bu gibi durumlarda dinamik çözümler gereklidir. Sınav sonucu açıklanmadan önce günlük rutin trafik ve sunucu gereksinimlerine, trafiğe bakarak sunucu ortamını yeniden yapılandırmak ve gelecek trafiği bu şekilde karşılamak gerekir. Aksi halde çok ciddi hosting masrafları ile karşı karşıya kalırsınız.

      Uygulamaya uygun hosting ortamını oluşturabilmek için uygulamanın iyi analiz edilmesi gerekli. Standart CRUD işlemleri çok fazla yük getirmezken kompleks sorgular sunuculara binen yükü arttıracaktır. Bu sebepten uygun hosting ortamını oluşturmak için şunu alın bunu yapın gibi net ifadeler kullanmak imkansız.

      Hatalı yazılan kodlar sunucunun RAM ve işlemci kulanımını ve hatta trafiği olumsuz etkiler. Burada uygulamayı geliştiren kişiye ve ekibe ciddi görevler düşer.  

      Uzmanim.net'ten örnek vermek gerekirse anlık 8K kullanıcı 1CPU, 2GB gibi düşük bir cloud ortamında sitenin ayakta kaldığını gördüm.

      Yazılım dili konusunda kafalar hep karışık olur. Ben her zaman bildiğiniz ve hakim olduğunuz dilin en iyi dil olduğuna inarım. Dil konusunda fanatiklik yapmak mantıklı değil. Bir C# ile bir kod yazar kağnı gibi çalışır başka bir aynı kodu yazar uygulama uçar gider. Hangi dile hakimseniz o dil en iyisidir. Siz bakmayın forumda yazan "PHP çok iyi yeaaa" ," "PHP de dil mi C# kraldır" yazan tiplere. Bu geyik her zaman vardır ve olacaktır.  Her dilin, teknolojinin kendine has performans ip uçları vardır. Bunlara dikkat etmek gerekir. Yine dil bağımsız programlamaya dair genel kurallar vardır. Bunlara dikkat ederseniz hiç bir sorun yaşamazsınız.

      Yine büyük sistemler için "Facebook PHP ile yazıldı," Twitter Ruby ile kodlandı", Stackoverflow C#, Asp.net ile geliştirildi" gibi dönen geyiklere dikkat etmeyin.  Bu tür büyük sistemler fazlasıyla özelleştirişmiştir. Facebook'un kullandığı sizin kullanacağınız PHP ile aynı değildir. Kendilerine haz framework, dil geliştirirler bunu kullanırlar.  Yine bu tür sistemlerde sunucu tarafında ve kullanıcı tarafında pek çok dil, teknoloji kullanılır.

      Bir programala dili öğrenecekseniz, hangi dil size daha anlaşılır geliyor ve o dil konusunda destek bulabiliyorsunuz ona bakın. Gerisi teferruattır. 

       

      alattin alattin (17125)
      7 yıl önce cevaplandı

        0

        @alattin @notify çok teşekkür ederim cevaplarınız için.

        geliştirmek istediğimiz uygulama bir nevi sözlük uygulaması. ekşisözlük benzeri. yani ortada dönen data tipi her zaman text. Görsel veya video uploadı bulunmayacak. Radore'nin cloud sunucuları oldukça maliyetli (gerçi düşük maliyetli cloud server bulmak pek mümkün değil). Azure ve Amazon ile ilgili biraz araştırma yapacağım.

        Hedeflediğimiz bir kitle var ve elimizde reklam ağı bulunuyor. Bu yüzden günlük 5-10.000 kullanıcı olacağını tahmin ediyoruz (yaptığımız araştırmalar sonucu).

        Yapılan işlemler sadece okuma-yazma-ekleme üzerine. Asp.net MVC 5.0 ve Dapper kullandık. İlk etapta veritabanı olarak Mysql seçtik, ilerleyen zamanlarda MSSQL'e taşınabiliriz.

        Mysql tarafında bir performans sorunu hissetmedik, gayet stabil çalışıyor. 

        Ekip olarak tek çekincemiz, yoğunluk yaşandığı anda sunucunun cevap verememesi, çünkü böyle bir durumda kullanıcının gözünde eksi puan alırız ve bir daha o kullanıcıyı kazanmak çok zorlaşacaktır.

        Yüksek trafikli web sitelerinin yönetimi ile ilgili Türkçe içerik bulmakta zorlandık, genellikle yabancı kaynaklar bulunuyor. O yüzden bu soruyu sormak istedim. uzmanim.net'te ciddi bir kullanıcı kitlesine sahip, bildiğim kadarıyla arkada IIS ve .Net çalışıyor. Radore'den hangi sunucu paketini kullanıyorlar merak ediyorum açıkçası.

        Bakalım zamanla göreceğiz; nerelerde hata yapmışız, nereleri düzeltmemiz gerekiyor:)

        İyi günler,

         

        developerkafasi developerkafasi (61)
        7 yıl önce cevaplandı

        • Merhaba, Alaatin bey radore ile ilgili sizi bilgilendirecektir. Yukarıda bahsettiğim büyük sitelerin yöntemini kendi kullandığım yol ile yorumlayayım. Kısacası şöyle çalışıyor. İlk olarak internet kontrolü yapıyoruz. Eğer internet yoksa zaten sunucuya doğal olarak bağlanamaz ama internet olduğu halde bağlanamıyorsa bu veritabanı bağlantısı yapılamadığındandır. Bunun içinde aşşağıda kısaca bahsettiğim gibi deneyebilirsiniz. Umarım faydalı olur. bool netvarmi() { try { System.Net.Sockets.TcpClient clnt = new System.Net.Sockets.TcpClient("www.google.com", 80); clnt.Close(); return true; } catch { return false; } } bool sonuc = netvarmi(); if (sonuc) { MessageBox.Show("İnternet kontrolü başarılı!"); //Bu bölümden sonra ise veritabanından veri çekmeye çalışırsınız. } else { //Eğer internet olduğu halde veri çekemiyorsanız veritabanınızda bir sıkıntı var demektir. Bu kısımdan sonra ise farklı bir sunucuda ki en son alınan veritabanı yedeğinize yönlendirirsiniz. } notify 7 yıl önce
        • Maliyet başlangıçta önemliyse Azure ve Amazon'a hiç bakma. Başlangıç veritabanı için MS SQL EXPRESS dahi kullanabilirsiniz. Bunu da bir düşünün. İyi yapılandırılmış bir sunucuda doğru şekilde geliştirilmiş uygulamada sorun yaşamazsınız. Günlük 5.-10k kullanıcı için bence şu konfigürasyonlu bir Cloud sunucu ile başlayın: 2GB RAM, 40GB disk alanı(SSD), 1 CPU. Böyle bir sunucunun maliyeti size aylık 35$ -50$civarında olur. Trafiğiniz ve yükünüz arttıkça artırıma gidersiniz. alattin 7 yıl önce
        üyelik gerektirir

        Cevap yazabilmek için üye girişi yapmalısınız.

        Eğer uzmanim.net üyesiyseniz giriş yapabilirsiniz: üye girişi yap
        uzmanim.net'e üye olmak çok kolaydır: hemen kayıt ol