10-09-2012 22:33 tarihinde, Hakan Yalçın yazdı:
Merhabalar.
Bir server-multiclient uygulaması (masaüstü uygulaması) yazıyorum.
Client'lar Server'da bulunan serverScript'e bağlanıp -serverScript
mysql'e bağlanıyor çalıştığında- veritabanından gerekli bilgileri çekiyor.
Problem çok fazla kullanıcı bağlandığında - 1000-10000 arası kullanıcı
- performans açısından program yetişemiyor. Bunun için birkaç çözüm
düşündüm. Tabi bunlardan bazılarını güvenlik sebebi ile eledim fakat
yine de hepsini burada yazıyorum.
Aşağıdaki çözümlerden başka bu iş için bir yol var mı? Örneğin msn
tarzı masaüstü uygulmaları bu işi nasıl yapıyorlar?
Çözüm önerileriniz ve fikirleriniz için herkese teşekkürler şimdiden.
Çözümler
--------------
Çözüm 1: Clientlar direk olarak Server Mysql portuna bağlanıp sql
komutlarını çalıştırırlar.
Sorun: Problem mysql_max_connection değeri ile bağlantı sayısının
sınırlanması. Arttırılsa bile bir yere kadar. Performans düşüyor.
Sorun 2: Güvenlik problemi var. Çünkü mysql'e bağlanmak için
uygulamanın içine mysql şifresini yazıyorum. Fakat reverse eng. ile
şifre okunabiliyor binary dosyadan.
Çözüm 2: Clientlar http-request ile Servar'da index.php'den
istedikleri bilgiye ulaşılar. Server'da Apache üzerinde bir php
script'i olacak. Bu script mysql'e bağlı ve kendisine yapılan
isteklerden postData'ları alıp veritabanı üzerinde çalıştırıp geri
bilgi dönecek.
Sorun: Bir tane php dosyası her seferinde mysql'e bağlanıp sql
komutunu çalıştırıp veriyi gönderiyor request eden client'a ve
kapanıyor. Tekrar istek geldiğinde yine bağlanıyor. Bir süre sonra
max_connection problemi yine çıkıyor. Normalde bu şekilde mi çalışıyor
yoksa ben mi yanlış tasarladım script'i.
Çözüm 3: Server üzerinde bir python scripti ile gelen istekler (soket
programlama ile) alınıp mysql'de çalıştırılıp geri cvp dönerek.
Çalışan script her bağlantı için bir thread oluşturuyor.
Sorun: Çok fazla kullanıcı bağlanınca bir süre sonra thread
oluşturulamadı diye hata veriyor.
Çözüm 4: Çözüm 3'deki script'in thread olmaksızın hali yani gelen her
istek için çalıştırp geri dönme olayı.
Sorun: Bu çözümde ise yine çok fazla kullanıcı bağlanınca programlara
cvp'lar geç gitmeye başlıyor.
Merhabalar,
Öncelikle programcı değilim mantık hatası veya başka bir hata yapıyor
olabilirim.
Affınıza sığınarak şunu önerebilir miyim:
web sunucular, yoğun istekleri karşılamada nasıl davranıyorlar. Mesela
apache bu işi nasıl yapıyor acaba incelediniz mi?
Sorunuzun yanıtını burada bulma ihtimaliniz yüksek gibi.
saygılar
_______________________________________________
Linux-programlama mailing list
[email protected]
https://liste.linux.org.tr/mailman/listinfo/linux-programlama
Liste kurallari: http://liste.linux.org.tr/kurallar.php