none
C# Multi-Client Per Multi-Server-Database ? RRS feed

  • Genel Tartışma

  • Herkese Merhabalar,

    Bağlığı nasıl açacağımı bilemedim, google da nasıl arayacağımıda bilemedim. Uzun bir süredir server/client üzerinde çalışmaktayım. Çok başarılı birşekilde şifreli (Blowfish-3DES) bağlantı kurarak haberleşme sağlıyorum, ağ, android vs. Yaptığım Multi-Threaded server birden çok client ile çok iyi senkronize çalışmaktadır. Sorun yok fakat bilmek istediğim birkaç şey var ;

    Şimdi ben tek server kullanırsam, belirli bir bağlantı sayısı port'ları dolduracak ve limite ulaşacak. Bu yüzden 2 veya daha fazla server ile tek veritabanı kullanarak (ID,PW,vs.) yada çoklu veritabanı kullanarak veritabanı saldırılarına karşı koruma için nasıl bir yol izlemeliyim ? Örnek verecek olursam, büyük online oyunlar, lol, coc binlerce sunucusu var ve veritabanı tek bir sunucuda kurulu değil. Öyle olsa çoktan çökertirlerdi. Çok senkronize çalışma sergiliyor, bunu tek server ile yapmıyorlar, tek veritabanı ile yapmıyorlar, nasıl oluyorda birden çok server yazılımını senkronize çalıştırıyorlar ? Hepsine tek tek sql kurup tek tek güvenlik ayalarını mı yapıyorlar ? O kadar kişi bağlanıyor TCP limit hiç geçilmiyor, milyonlarca kişiyi kaldırıyor. Bunu detaylı bir şekilde anlamam gerekiyor, bütün sorularıma cevap aramam gerekiyor. En ince ayrıntısına kadar anlatabilirmisiniz ?


    Şimdiden çok teşekkür ederim, iyi forumlar...
    15 Ekim 2015 Perşembe 08:36

Tüm Yanıtlar

  • Bağlantıyı kapatmıyor sanız mecburen sunucu artması gerekiyor. En kötü ihtimalle 64K limit olduğunu düşünsek, bunu sayı ile doldurmak çok zordur. Tamam oyunu milyonlarca kişi oynuyor ama hepsi aynı anda online olmuyor, hepsi aynı serverda da oynamıyor. 

    Bağlantıyı sağlayan tek sunucu oluyor (handshake, loginserver, ne dersen adına). Yine veri tabanı tek oluyor(donanımsal ya da yazılsal RAID olabilir). Birden fazla database olması için bir server uygulaması da database'de ki verileri erişmek, değiştirmek kısaca birleştirmek için çalışması gerekir. Bir Mssql'den, Oracle'dan daha hızlı çalışacak db'yi yazabileceğimizi zannetmiyorum.

    Bazen her server'ın kendi database'i olduğu da oluyor. Burada bir serverdaki kullanıcı diğer serverdakinden bağımsız oluyor. Bariz bir şekilde fark ediliyor. Aynı oyunda aynı yere gidince bir birinizi görmüyorsanız bu farklı db'den kaynaklanıyordur. Yine public mesajı oyuncuların bir bölümü görmüyorsa db farklıdır. Örn: WOW Ama artık bilgisayarlara ve parasına güvenen şirketler hepsini aynı çatı altında topluyor. Örn: WOT. Oynanan sunucu farklı ama db tek.

    Serverlar loginserver'a, dbserver'a  bağlanıp verisini çekiyor. Kullanıcıya gönderiyor. Tabi her server farklı bir yerde olsa bile VPN kullanılarak aynı çatıya toplanıyor. 

    Güvenlik olarak genel cisco yöntemleri kullanılır veri tabanı sunucusu VPN dışına kapatılır. Sadece serverların IP'si ile iletişim kurar. Server kullanıcılarla kurduğu iletişimde gereksiz, fazladan veri göndermediği sürece geri kalan tüm ayarları firewall halleder. 

    Tabi bunların dışında'da websunucu'da olması gerekiyor. Oyun db'sine erişim yetkili bir web sunucusu, içerisinde her türlü tehlikeyi barındırır. Saldırıların genel yoğunluğu da web sunucu üzerinedir. Çünkü siz server-client iletişiminde bir standart kullanmazsanız, bir şifreleme yaparsanız, saldırganlar bildiği yerden(HTTP) girmek zorunda kalıyor. 

    Genel olarak problem mantıksal hata yapmamak gerekiyor. Örneğin kullanıcının Z'si map'ın  yüzey düzleminin Z'sinden küçük olmak zorundadır. Sen normalde client ile izin vermiyorsun duvardan geçmeyi ama adam kırıyor onu eğer server bunu kontrol ederse bir problem olmaz. 

    Yine para tutmak yerine muhasebe kaydı tutmak gerekebiliyor. Parada giren toplamı - çıkan toplamı şeklinde hesaplanmalı. Veya ikisi de tutulup arada kontrol edilebilinir. 

    Her değişken olması gerektiği gibi tanımlanmalı, eğer bir değer sıfırdan küçük olmayacaksa uint olmalı ya da her bilgide her zaman sıfırdan büyük mü diye kontrol edilmeli.

    15 Ekim 2015 Perşembe 09:27
  • Sanirim oncelikle MS SQL server kullanmiyorlar (kullanan da vardir). Nasil yaptiklari cok da sir degil, kullanilan databaselerin hepsi degilse de cogunlugu open source. Kodlarini alip kendin inceleyebilirsin. Ornegin PostgreSQL ve PostgreSQL XL. Veya MySQL'u dusunecek olursak, google Vitess projesini youtube icin yapti ve open source (dil olarak Go kullaniyor).

    Go Vitess

    MongoDb desen yine open source ve tek makineden onbinlerce makineye dagitilmak uzere tasarlanmis bir database (NoSQL database klasigi).  

    Cok sayida kisiyi kaldirma acisindan Go'yu incelemelisin diye dusunuyorum (network ustasi bir devden, Google'dan gelen bir dil). 

    En ince ayrintisina kadar, oncelikle bilmedigimden, anlatamam. Kimse de bu forum gibi kisitli yerde anlatamaz sanirim. 

    15 Ekim 2015 Perşembe 09:44
    Yanıtlayıcı
  • Konu oyun olunca TCP soru işareti olabilir. UDP protokolü hala online oyunlar için geçerli.

    Server mimarisine gelince; çoğu oyunda Amerike, Asya, Avrupa serverleri diye serverlerin ayrıldığını görürürz. Bir login serveri kullanıcının bölgesine göre ilgili servere yönlendirir. Bölge server'lerinde ise load balancing ile cluster server'lere dağılım yapılır. En basit sistemi bu bence.


    www.mvcblog.org
    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    15 Ekim 2015 Perşembe 10:11
    Moderatör
  • Herkese yorumları için teşekkür ediyorum. Login Server ve Game Server bulunuyor, login server girişleri ve client kontrolü yapıp game server'a yönlendirmekte. Game server ise oyunu kontrol etmekte. TCP/IP kullandım, turn based tarzı oyun yapmaya çalışıyorum, 5+ yıllık deneyimim mevcut tabiki yetmemekte.

    Şuan 10k kullanıcı kaldıracak, tek mssql ile istediğim kadar server açabiliyorum fakat 15k+ olduğunda tcp port hatası veriyor. Oracle kullanmama sebebim mssql daha gelişmiş, daha güvenli, daha düzenli olması. Zaten bilgiler game server'da duruyor, belirli aralıklarla veritabanına geçiyor.

    En basitinden agar,io sitesi 500bin kişi varken görmüştüm. Adamda 1 adet master server varmış ve arttırıp azaltıyormuş server sayısını ama çok fazla sunucusu varmış yamamış. Nasıl yapmış hala anlamıyorum. Tek veritabanı sunucusuda riskli değilmi ? Eğer ip adresini bulurlarsa saldırı gelecektir.

    Whatsapp 2 milyon tcp bağlantısını tek sunucuya yapabilmiş ; blog.whatsapp.com/196/1-million-is-so-2011
    Bende diyelim 100 sunucu var hepsine tek tek server kurup veritabanı kurmak mantıklı gelmiyor. +1 Sunucu'ya gameserver kurup extradan +10k kişi kaldırabilmeli, ama aralarında senkronize çalışmalı.

    Dediğimi anladınız sanırım. Nasıl bir yol izlemeliyim ? Ya da google da nasıl bir araştırma yapmalıyım bunun için ?

    Şimdiden teşekkürler...
    16 Ekim 2015 Cuma 09:40
  • Valla yazdik ama okumuyorsun gibi geldi. 

    "Oracle kullanmama sebebim mssql daha gelişmiş, daha güvenli, daha düzenli olması. " Nerden nasil bu kaniya vardin merak ettim.

    16 Ekim 2015 Cuma 10:22
    Yanıtlayıcı
  • Cisco standartları hakkında bir bilginiz var mı ? 

    Şu anda aslında siz yazılımsal bir şey sormuyorsunuz, donanımsal olarak nasıl yapılacağını bilmediğiniz için olayın çözümünün yazılımsal olduğunu düşünüyorsunuz. 

    Ben teorik olarak tcp connection limit olarak bir şey bilmiyorum, normalde öyle bir limit yok, güvenlik sebebiyle koyulan yerleri gördüm. Yani normalde öyle 15k gibi bir limit yok. int ayrılmışsa int kadar long ayrılmışsa long kadar bağlantı olur. 

    Ama işletim sistemi ne kadar izin veriyor, rooter ne kadar izin veriyor, ram işlemci ne kadar izin veriyor, ISP ne kadar izin veriyor onu bilemem. Ama biraz araştırdım XP'lerde 16milyon gibi bir limit gördüm. Şu an var mı öyle bir şey bilmiyorum.

    Yani teorik olarak bir taşıma problemi yok. RAM yetmeyebilir işlemci yetmeyebilir ama cihazlarınız standartlara uygunsa bağlantı sayısında problem olmamalı diye düşünüyorum.

    Yine güvenlik konusu.

    Yazılımsal firewall ilede engellenebilir ama rooter ve switch ayarlarını tam teşekküllü yaparsanız, kimseye yeterinden fazla yetki ve bilgi vermezseniz, hiç bir şekilde hiç bir saldırgan o servera internet üzerinden ulaşamaz.

    Bir dbserver'a httpserver, ve sizin serverlarınız dışında kimse girmesine gerek yoktur, ve kapatılır zaten. Bunu ilk kez siz düşünmediniz, Türkiye'de bile bir çok şirket vpn bir ağ yapısına sahip devlet dairelerinin büyük bölümünde var, (askeri bölgeler hariç, onlar intranet kullanıyor)

    Siz bile giremiyorsunuz, ben borusan'ın ve medaş'ın ağ yapısını gördüm vpn'yi açtıktan sonra anca bize ayrılmış server'a erişiyoruz, sonrasında rdp ile oradan sql server management studio kullanarak dbserver'a kullanacağımız bize ayrılmış server üzerinden açılıyoruz. 

    16 Ekim 2015 Cuma 12:07
  • Database Server ları sürekli ayakta tutmak, Server saldırı alsa da devam edebilmesi için SQL Server AlwaysOn kullanılıyor. Birden fazla Server olmasına rağmen database tek ve olası bir saldırıda devam edebiliyor. Client-Server haberleşmeleri hızlı olabilmesi için UDP kullanılması daha mantıklı geliyor ki öyle yapıyorlar. TCP aldığı datayı aktarana kadar bekler. UDP de bu olmadığı için daha hızlı çalışacaktır ki siz zaten 5 yıldır bu alanda geliştirmişsiniz. UDP için mimarı düzenlerseniz TCP ye göre daha fazla performans alırsınız. 

    Barış Ceviz - Software Developer
    Blog'um
    World Of You is Peace Of World

    16 Ekim 2015 Cuma 17:19
    Moderatör
  • Valla yazdik ama okumuyorsun gibi geldi. 

    "Oracle kullanmama sebebim mssql daha gelişmiş, daha güvenli, daha düzenli olması. " Nerden nasil bu kaniya vardin merak ettim.


    Öncelikle hocam açık konuşayım. Tamamen kendi göre dedim. Bize çok fazla ayar seçeneği sunuyor, çok yardım ediyor, çok güzel ve pratik bir arayüzü mevcut, kullanıcı sistemi var, daha gelişmiş (GUI) konusunda hala haklı olduğumu düşünüyorum. Daha düzenli de de öyle. Ama birkaç ayar yaparak güvenli hale getirebiliriz. 3 yıldan fazladır MSSQL kullanıyorum. Prosedure ile son derece hızlı işlemleri yapıyor. Büyük MMORPG oyunlarda genelde MSSQL kullanılıyor çok araştırma yaptım. Ha oracle da da çalıştım, nedense tarafım MSSQL, alışkanlıklarını bırakamıyor insan. :)
    17 Ekim 2015 Cumartesi 08:11
  • Cisco standartları hakkında bir bilginiz var mı ? 

    Şu anda aslında siz yazılımsal bir şey sormuyorsunuz, donanımsal olarak nasıl yapılacağını bilmediğiniz için olayın çözümünün yazılımsal olduğunu düşünüyorsunuz. 

    Ben teorik olarak tcp connection limit olarak bir şey bilmiyorum, normalde öyle bir limit yok, güvenlik sebebiyle koyulan yerleri gördüm. Yani normalde öyle 15k gibi bir limit yok. int ayrılmışsa int kadar long ayrılmışsa long kadar bağlantı olur. 

    Ama işletim sistemi ne kadar izin veriyor, rooter ne kadar izin veriyor, ram işlemci ne kadar izin veriyor, ISP ne kadar izin veriyor onu bilemem. Ama biraz araştırdım XP'lerde 16milyon gibi bir limit gördüm. Şu an var mı öyle bir şey bilmiyorum.

    Yani teorik olarak bir taşıma problemi yok. RAM yetmeyebilir işlemci yetmeyebilir ama cihazlarınız standartlara uygunsa bağlantı sayısında problem olmamalı diye düşünüyorum.

    Yine güvenlik konusu.

    Yazılımsal firewall ilede engellenebilir ama rooter ve switch ayarlarını tam teşekküllü yaparsanız, kimseye yeterinden fazla yetki ve bilgi vermezseniz, hiç bir şekilde hiç bir saldırgan o servera internet üzerinden ulaşamaz.

    Bir dbserver'a httpserver, ve sizin serverlarınız dışında kimse girmesine gerek yoktur, ve kapatılır zaten. Bunu ilk kez siz düşünmediniz, Türkiye'de bile bir çok şirket vpn bir ağ yapısına sahip devlet dairelerinin büyük bölümünde var, (askeri bölgeler hariç, onlar intranet kullanıyor)

    Siz bile giremiyorsunuz, ben borusan'ın ve medaş'ın ağ yapısını gördüm vpn'yi açtıktan sonra anca bize ayrılmış server'a erişiyoruz, sonrasında rdp ile oradan sql server management studio kullanarak dbserver'a kullanacağımız bize ayrılmış server üzerinden açılıyoruz. 


    Hocam doğru, değişkene kadar kullanıcı alabilmemiz lazım. Ama port olayı yüzünden bağlayamıyorum, ki adamlar 10 Milyon kişiyi tek veritabanı ile nasıl kontrolde tutuyor onuda anlamıyorum. Yoksa 10k kişi kaldıracak server yaparım sorun yok da fazlasını istemek varken ? VPN kullanarak SQL servere bağlanmak süper fikir, ama olduda birisi IP'i buldu, o zaman sunucu değiştiririm. :) Basit oyun yapımcılarına söyledim reddit üzerinden nasıl  500k + kişiyi onlarca server üzerinden kaldırıyorsun diyorum fakat cevap vermiyorlar, verenler söylemiyor. En az 10 kişiye söylemişimdir. Bu olayı çözemezsem anca 3 ayda yazdığım paket transfer kütüphanesiyle kalacağım. :( Tekrardan teşekkürler...
    17 Ekim 2015 Cumartesi 08:14
  • Database Server ları sürekli ayakta tutmak, Server saldırı alsa da devam edebilmesi için SQL Server AlwaysOn kullanılıyor. Birden fazla Server olmasına rağmen database tek ve olası bir saldırıda devam edebiliyor. Client-Server haberleşmeleri hızlı olabilmesi için UDP kullanılması daha mantıklı geliyor ki öyle yapıyorlar. TCP aldığı datayı aktarana kadar bekler. UDP de bu olmadığı için daha hızlı çalışacaktır ki siz zaten 5 yıldır bu alanda geliştirmişsiniz. UDP için mimarı düzenlerseniz TCP ye göre daha fazla performans alırsınız. 

    Barış Ceviz - Software Developer
    Blog'um
    World Of You is Peace Of World


    Merhabalar,

    AlwaysOn konusunu bilmiyordum bunun için teşekkürler... Ben client'e paket gönderiyorum, daha sonra geri yanıt paketi bekliyorum sonra tekrar gönderiyorum gerçek client'i anlamak için. Büyük oyun şirketlerinden bazıları MMORPG tarzı genelde TCP kullanıyor. Sitelerine yazıyorlar ya da ayarlarda tcp port diye geçiyor. Bazı FPS tarzı oyunda çoğu UDP ile oluyor, turn based tarzı oyun yapmaya çalışıyorum hız pek lazım değil TCP ile garantiye almak istiyorum. UDP 'e bek güvenemiyorum. Bilemiyorum paket yarım kalır bug oluşur belki ? Ya da olmaz kafam çok karıştı şimdi ya.

    Teşekkürler tekrardan...
    17 Ekim 2015 Cumartesi 08:19
  • Evet UDP ide paketi gönderir gerisini düşünmez fakat UDP için mimari tasarlanır. Tasarlanan mimari ile bunu sağlama alman gerek. TCP de paketin gidişi, paketin timeout süresi kadar bekler. Oyuncunun bağlantı problemleri oyunu yavaşlamasına sebep olabilir. O aradaki ince çizgiyi yakalayıp sağlama alınırsa iş çözülür. 

    Barış Ceviz - Software Developer
    Blog'um
    World Of You is Peace Of World

    17 Ekim 2015 Cumartesi 09:30
    Moderatör
  • Tekrardan Merhabalar,

    Bir türk online oyun şirketiyle konuştum. Bana server yazılımının Go ile yazıldığını, arka planda ise distributed MySQL, Redis ve TSDB gibi farklı veritabanları kullandıklarını, DNS-based ve oyun sunucuları içinde her oyuna özel bir load-balance yazılımı olduklarını söylediler. Go ile çok kaynak da yok, yukarıda arkadaş da yazmıştı. Ben C# ile yazdım amacım tek veritabanı sunucusu olması, tek server yazılımı ile hosting api yardımı ile sunucu arttırıp azaltmak duruma göre. Her sunucuya server kurduğumu düşünemiyorum, 100 sunucu olsa, basit bir hata yüzünden hepsi ile yapmam. Genelde tek server programı oluyormuş. Amazon Web Service kullanmayı düşünüyorum, tek server programı ile gelen kullanıcıları aynı ayrı yoğunluğa göre farklı sunuculara yönlendirmek istiyorum. Fakat DDOS gelse tek sunucuda var server programı. Bu olayda kafamı karıştırdı. Sanırım benim ilacım load-balancing sanırım, terimi yeni öğrendim. Mesela Agar,io tek master server yazılımı varmış ve c++ ile yazılmış. 500k+ kişi kaldırabiliyormuş, ihtiyaca göre sunucuyu otomatik arttırıyormuş. Sadece bunu öğrendim, hala yardımınıza ihtiyacım var. Şimdiden teşekkürler tekrardan.

    21 Ekim 2015 Çarşamba 19:26
  • Amazon Cloud Server konusunda pek bir bilgim yok ama Azure VM ler konusunda Scaling özelliği var. Sunucuyu arttırıp azaltabiliyorsun duruma göre. Ek Diskler vs de takabiliyorsun. Azure VM leri yönetim için ise Powershell üzerinden basit bir şekilde yönetebiliyorsun. Scale etmek için bir Powershell script yazıp çalıştırarak scale edebilirsin. Bir araştır incele ama tam olarak oyun için ne kadar optimizedir ve fiyat konusunda ne kadar seni tatmin edebilir bilemem.

    Barış Ceviz - Software Developer
    Blog'um
    World Of You is Peace Of World

    21 Ekim 2015 Çarşamba 19:43
    Moderatör
  • Hocam, teşekkürler. C++ Server ve linode hosting kullanarak tek server programı ile 1 milyon kişiye kadar kaldırabiliyor adamın oyunu. Ve tek başına yapmış. Nasıl yaptığı konusunda ise en ufak bir fikrim yok. Sizin fikir de güzel fakat çok kaynak rehber yok. Benim aradığım sistem nedir onuda bilmiyorum sanırım load-balancing fakat o mu ondanda emin değilim. Direkt hosting tarafından sağlanan api ile halletmem gerekli. 100 sunucuya birden server kurup, en ufak sorunda hepsine tek tek girmek hiç akıl kârı değil. Master server - Child server olayı diyebiliriz sanırım. Araştırmalarım son hız devam etmekte. C10k problemi buldum bu da tek sunucuda 1 milyon kişiye kadar kaldırma olayı felan vs. Bilmiyorum, tekrardan teşekkürler...
    21 Ekim 2015 Çarşamba 20:06
  • Bulduğun sonuçları da buradan paylaşırsan sevinirim. Açıkçası benim çok oyun server ları bunun için IT tarafta ne yapıldığını pek bilmem sadece işte Veritabanı sunucusu nasıl ayakta kalır veya Server donanımlarının nasıl azaltıp arttırılacağı ile ilgili bilgi/fikir sahibiyim ama o tarafta ne yapılıyor tam olarak bende merak ettim. Bu arada Azure Powershell SDK ile ilgili MSDN de kaynak var. Cidden basit. Bende pek Powershell ile uğraşmadım ama bir kaç deneme yaptım cidden basit. Rahatça script yazabiliyorsun. Sonrası da zaten kodlarla Powershell script i çalıştırma işi.

    Barış Ceviz - Software Developer
    Blog'um
    World Of You is Peace Of World

    21 Ekim 2015 Çarşamba 20:30
    Moderatör
  • Azure Powershell SDK ile biraz araştırma yaptım, sitesinde "Windows Azure™, Windows Azure platformunda geliştirme, hizmet barındırma ve hizmet yönetim ortamı olarak çalışan bir bulut hizmetleri işletim sistemidir. Windows Azure, geliştiricilere Microsoft® veri merkezleri aracılığıyla İnternet'te web uygulamalarını barındırmak, ölçeklendirmek ve yönetmek için isteğe bağlı işlem ve depolama hizmetleri sağlar. " yazmış.

    Linode şirketine ait nodebalancers diye birşey buldum. Sanki bu olacakmış gibi gözüküyor. Denemek için belki para veririm tek client ile binlerce client bağlantısı yaparım da bilemiyorum yani. Ama ben kurduğum işletim sistemlerini mi klonlayacak yoksa ip:port yönlendirmesi mi yapacak, yoksa boş sunucuya o programı kendi mi atacak hiçbir fikrim yok gerçekten. Adam tek başına bunu tek master-server kullanarak ihtiyaca göre artıp azalan şeklinde yapmış ve 382 serverdan 121'i aktifmiş. Adam server-side update yaparsa her sunucuya uzak bağlantı ile girip hepsine ayrı ayrı ayar çekip yüklemesi gerekir. Böyle birşey ile tek başına kimse uğraşmaz. Bir hinlik varda...

    Amazon Web Service'de Elastic olarak ismi geçmekte. NetScaler diye birşey keşfettim, üstte yazmıştınız scaler aynı şey olabilirmi ?

    Load Balance Broadband Router diye birşey buldum ve özelliklerini okudum. Tam istediğim şeyi belirtiyor. Super-Computing ??? CPU Çekirdek Sayısı x Toplam Server Sayısı = Toplam Çekirdek Sayısı ???

    Birde C# ile geliştirdiğimden dolayı Windows'a bağlı kaldım. Java'a çevirebilirim, C'de çeviremem çünkü çok fazla bilgim yok. Linux öneriyorlar hep, MSSQL ağır diyorlar. Bunu Xenon E5 E7 gibi işlemcilerle kapatabilirmiyim ? Windows'da güvenlik sorunu olduğu zaman programdan kontrol edip açılan zararlı portları kapatıp, kapanan güvenlik duvarını hemen açabiliyorum. Linux'da böyle bir şansım varmı ? i7 4720HQ bir işlemcide son derece akıcı windows 10 sunucuda sanki çok yavaşlayacak, MSSQL sorun çıkaracak, ve bu iki hosting firmasının windows sistemi yoksa mecburen değiştireceğim. Java'da bir hata olduğunda çözmesi biraz daha zor, visual studio gibi derleyici yok tabi. Ayrıca Java'dan güzel server olurmu, C#'e göre ? Linux'da çalışır zaten ?

    22 Ekim 2015 Perşembe 08:35

  • Birde C# ile geliştirdiğimden dolayı Windows'a bağlı kaldım. Java'a çevirebilirim, C'de çeviremem çünkü çok fazla bilgim yok. Linux öneriyorlar hep, MSSQL ağır diyorlar. Bunu Xenon E5 E7 gibi işlemcilerle kapatabilirmiyim ? Windows'da güvenlik sorunu olduğu zaman programdan kontrol edip açılan zararlı portları kapatıp, kapanan güvenlik duvarını hemen açabiliyorum. Linux'da böyle bir şansım varmı ? i7 4720HQ bir işlemcide son derece akıcı windows 10 sunucuda sanki çok yavaşlayacak, MSSQL sorun çıkaracak, ve bu iki hosting firmasının windows sistemi yoksa mecburen değiştireceğim. Java'da bir hata olduğunda çözmesi biraz daha zor, visual studio gibi derleyici yok tabi. Ayrıca Java'dan güzel server olurmu, C#'e göre ? Linux'da çalışır zaten ?

    İngilizce kaynak okumuşsanız muhtemelen Hintli birisi yazmış olmalı, onlar her şeyi Java'ya bağlıyor. Ben paket program yapıyorsam kesinlikle C# yaparım, sistem programlama oluyorsa bile artık C# yapmaya çalışıyorum. Pointer olaylarını bir çözebilsem daha C++ bile kullanmam.

    Java her platformda çalışıyormuş, ona bakarsan Xamarin, yada Unity'den çıkmış bir C# kodu da her platformda çalışıyor. İllaki Java olsun dediklerinde Java yapıyorum, ama karar veren kişi ile görüşmem mümkünse her seferinde fikrini değiştirmesini sağlamışımdır. Zaten bu her platformda çalışıyor da yüzde yüz doğru değil, öyle genel geçer standartların küçücük bir dışına çıksanız çalışmıyor. 

    MSSQL konusunu fazla büyütüyorsunuz, ben şu ana kadar database'in server uygulamasını aksattığını hiç görmedim. Tamam milyon kişinin oyun oynadığı bir database'ide görmedim ama ben onu hiç bir zaman benim işim olarak görmedim. Database'i Microsoft, Oracle yapar biz kullanırız. Ben onlardan daha iyi bir database olabileceğini düşünmüyorum. Yine illaki farklı bir database istiyorsanız Çetin hocamın yukarıda verdiği örnekleri kullanabilirsiniz. MongoDB tavsiye edebilirim. 

    22 Ekim 2015 Perşembe 08:58

  • Birde C# ile geliştirdiğimden dolayı Windows'a bağlı kaldım. Java'a çevirebilirim, C'de çeviremem çünkü çok fazla bilgim yok. Linux öneriyorlar hep, MSSQL ağır diyorlar. Bunu Xenon E5 E7 gibi işlemcilerle kapatabilirmiyim ? Windows'da güvenlik sorunu olduğu zaman programdan kontrol edip açılan zararlı portları kapatıp, kapanan güvenlik duvarını hemen açabiliyorum. Linux'da böyle bir şansım varmı ? i7 4720HQ bir işlemcide son derece akıcı windows 10 sunucuda sanki çok yavaşlayacak, MSSQL sorun çıkaracak, ve bu iki hosting firmasının windows sistemi yoksa mecburen değiştireceğim. Java'da bir hata olduğunda çözmesi biraz daha zor, visual studio gibi derleyici yok tabi. Ayrıca Java'dan güzel server olurmu, C#'e göre ? Linux'da çalışır zaten ?

    İngilizce kaynak okumuşsanız muhtemelen Hintli birisi yazmış olmalı, onlar her şeyi Java'ya bağlıyor. Ben paket program yapıyorsam kesinlikle C# yaparım, sistem programlama oluyorsa bile artık C# yapmaya çalışıyorum. Pointer olaylarını bir çözebilsem daha C++ bile kullanmam.

    Java her platformda çalışıyormuş, ona bakarsan Xamarin, yada Unity'den çıkmış bir C# kodu da her platformda çalışıyor. İllaki Java olsun dediklerinde Java yapıyorum, ama karar veren kişi ile görüşmem mümkünse her seferinde fikrini değiştirmesini sağlamışımdır. Zaten bu her platformda çalışıyor da yüzde yüz doğru değil, öyle genel geçer standartların küçücük bir dışına çıksanız çalışmıyor. 

    MSSQL konusunu fazla büyütüyorsunuz, ben şu ana kadar database'in server uygulamasını aksattığını hiç görmedim. Tamam milyon kişinin oyun oynadığı bir database'ide görmedim ama ben onu hiç bir zaman benim işim olarak görmedim. Database'i Microsoft, Oracle yapar biz kullanırız. Ben onlardan daha iyi bir database olabileceğini düşünmüyorum. Yine illaki farklı bir database istiyorsanız Çetin hocamın yukarıda verdiği örnekleri kullanabilirsiniz. MongoDB tavsiye edebilirim. 

    Peki işletim sisteminin Windows veya Linux olması bir sorun olurmu ? C# kullanıyorum, mono ile yavaşlatmak da istemiyorum. Client olsa önemli değil, server'in çok stabil olması ve bolca Try-Catch yapısı kullanarak tasarladım.

    Testlerde hep MSSQL açık ara önde kazanmış. Server'in sadece paket haberleşme kütüphanesini yazdım, 10bin satırdan fazla sürdü. Şuan gayet güzel çalışıyor fakat dediğim load-balancing olayı yüzünden başka bir dile geçmek istemiyorum, Linux diyorlar hep. Kaldım ortada. (:

    22 Ekim 2015 Perşembe 09:57
  • Hangi testlerde MSSQL acik ara onde kazanmis, neyi kazanmis, kime karsi kazanmis? Pek inandirici gelmedi bana. Linux hakli bir tavsiye bence.

    Satir sayisi hic bir seyin belirleyicisi degildir. 

    Load-balancing yuzunden baska dile gecmek istemiyorsun da (ne alaka anlamadim aslinda), sen yine de Go'ya baktin mi? Baska dile gecmek istememenin asil nedeni sanirim o dili ogrenmek icin gececek suredir.


    22 Ekim 2015 Perşembe 10:44
    Yanıtlayıcı
  • Hangi testlerde MSSQL acik ara onde kazanmis, neyi kazanmis, kime karsi kazanmis? Pek inandirici gelmedi bana. Linux hakli bir tavsiye bence.

    Satir sayisi hic bir seyin belirleyicisi degildir. 

    Load-balancing yuzunden baska dile gecmek istemiyorsun da (ne alaka anlamadim aslinda), sen yine de Go'ya baktin mi? Baska dile gecmek istememenin asil nedeni sanirim o dili ogrenmek icin gececek suredir.


    Başka dile geçmemem değil, C/C++ 'ya geçmek istemiyorum. Yazdıklarımı Java ile de yapabilirim. Go'yu bilmiyorum.

    Satır sayısını verme sebebim ne kadar uzun sürede ve ne kadar uğraştırıcı olduğunu söylemem, bunu başka bir dile geçirmemin zor olduğunu belirtmemdi.

    MSSQL de hep performans da önde sonuçlar mevcut, string olsun tablo olsun vs. Mssql vs ... yazınca çıkıyor zaten ne kadar güvenilir kaynak bilemem.

    22 Ekim 2015 Perşembe 12:38
  • Hangi vendorun kaynaklarini okursan o acik ara ondedir :) Onun yerine open source kaynaklara itibar et, hatta hic itibar etme kendi problemine uyarlayip kendin dene.

    22 Ekim 2015 Perşembe 13:09
    Yanıtlayıcı
  • Tekrardan rahatsız ediyorum,

    Linode şirketinde Windows server yokmuş. Ubuntu gibi işletim sistemleri mevcut.

    AWS'de sanırım var ama biraz tuzlu fiyatları var. Linode gibi fiyat/performans değil.

    Benim server ise C# ile yazıldı. Ubuntu'da mono olmadan çalışmaz, mono gibi bir tünel de kullanmak istemiyorum, client olsa tamam da, sıkıntı olacak.

    Ayrıca ServerLoadBalancerEngine diye birşey buldum, rastgele list item alma basit birşey ;

    http://www.codeproject.com/Articles/37976/Writing-Thread-Safe-Code-in-C

    Bu mantıkla geliştirerek birşey yapsam, o ip:port larda da server programı olmadığı için bir işe yaramaz. Yani tek server kullanarak çözülemiyor.

    Yukarıda Abdullah hocam yazmıştı : "Şu anda aslında siz yazılımsal bir şey sormuyorsunuz, donanımsal olarak nasıl yapılacağını bilmediğiniz için olayın çözümünün yazılımsal olduğunu düşünüyorsunuz. "

    23 Ekim 2015 Cuma 10:55
  • Linode, adi ustunde Linux bazli zaten, ben onu bilerek yaziyorsun sanmistim.

    Sen desteklemedigi seyler mi kullaniyorsun ki monoya guvenmiyorsun?

    Sen biraz nefes alsan, herseyi unutup biraz etrafi dolassan, open source projelere goz atsan? CoreOS, Go, Docker, PostgreSQL XL, Vitess ...

    Yok ben C# biliyorum, windows ve SQL server kullanmak istiyorum,  onlara da sadakatle bagliyim dersen kolay gelsin.

     


    23 Ekim 2015 Cuma 11:12
    Yanıtlayıcı
  • Linode, adi ustunde Linux bazli zaten, ben onu bilerek yaziyorsun sanmistim.

    Sen desteklemedigi seyler mi kullaniyorsun ki monoya guvenmiyorsun?

    Sen biraz nefes alsan, herseyi unutup biraz etrafi dolassan, open source projelere goz atsan? CoreOS, Go, Docker, PostgreSQL XL, Vitess ...

    Yok ben C# biliyorum, windows ve SQL server kullanmak istiyorum,  onlara da sadakatle bagliyim dersen kolay gelsin.

     



    Hepsine göz attım biraz, istediğim gibi değil. Mono kullanarak neden performans kaybı yapayım ki ? 10ms bile benim için önemli. İşlemi çok hızlı gerçekleştirip kullanıcıya vermesi gerekiyor. Şuan veritabanı benim için önemli değil, isterse en yavaşı olsun, gerçek zamanlı olmayacak zaten. Benim sıkıntım şu : Tek server programı kullanarak, binlerce kişiyi kaldıracak sistemi yapmak. Kimisi Go ile yapmış, kimisi C++ server yazarak yapıyor ama söylemedikleri nokta şu : Tek server yazılımı ile nasıl milyonlarca kişiyi kaldırıyor ? Bu load balancing olayı mı oluyor, başka birşey mi ? Benim asıl sorum bu.
    23 Ekim 2015 Cuma 11:26
  • Hepsine "biraz" degil iyice goz at, cevaplar orada. Soylemedikleri hicbir nokta yok, cok uzun yillardir soyleniyor. Load balancing dedigin server OS'in ozelliklerinden birisi. 

    Mono ile performans kaybi olacagini sana kim soyledi? Sonunda oyle ya da boyle JIT ile calisan bir dil kullaniyorsun, native kod kullanmiyorsun. Madem o kadar performans ihtiyacin var Fortran ya da core C kullan. Ikisini de performansta gecen yok.

    23 Ekim 2015 Cuma 11:52
    Yanıtlayıcı