Web Garden/Web Farm

"Web farm" kavramını, IIS ve/veya web yazılım geliştirme işiyle uğraşmış neredeyse herkes duymuştur. IIS 6.0'dan itibaren bir de "web garden" kavramıyla tanışmış olduk. Bu yazımda bu kavramların ne olduğundan ve bunları kullanırken nelere dikkat etmemiz gerektiinden bahsedeceğim.

Web farm

Bu kavram, Türkçe'ye "sunucu çiftliği" olarak çevrilen kavramın bir türüdür. Yani "web sunucusu çiftliği" diyebiliriz. Aynı web uygulamalarını ve/veya web sitelerini, birden fazla makine üzerinde bulundurmak anlamına gelmektedir. Genellikle "Windows Network Load Balance (NLB)" veya başka bir yük dağıtım uygulaması ile, ilgili uygulamaya/siteye gelen istekler bu makinelere pay edilir. Böylece, nispeten daha "zayıf" veya "ucuz" donanımlarla daha çok iş yapılabilir. Ancak daha önemlisi, makinelerden birinde yaşanabilecek sorunlar, kullanıcılar farketmeden, istekler diğer makinelere otomatik olarak yönlendirilerek çözülmüş olacaktır.

Web garden

Bu kavramı Türkçe'ye "web sunucu bahçesi" diye çevirmek yanlış olmayacaktır. Bu kavramla, IIS 6.0'la beraber tanıştık. Bunun nedeni, bu kavramın "uygulama havuzu" (application pool) kavramıyla gelmiş olmasıdır. Biliyorsunuz, IIS 6.0 ve 7.0'de her uygulama için ayrı bir uygulama havuzu tanımlayabiliyoruz.Her bir uygulama havuzu için de - en az - bir tane "worker process", yani w3wp.exe çalışıyor. İşte "web garden" kavramı tam da bu noktada devreye giriyor: Biz istersek, aynı uygulamayı taşıyan birden fazla w3wp.exe çalıştırılmasını sağlayabiliyoruz.

IIS 7.0'de bu ayarı, uygulama havuzu özelliklerinde yapabiliyoruz:

WebGarden

Tıpkı "web farm"da olduğu gibi, "web garden"da da, gelen istekler w3wp.exe'ler arasında pay edilmektedir. Ancak burada birden fazla makine söz konusu olmadığı için, bunu kullanmanın ilk nedeni performans olamayacaktır. Tıpkı “web farm”da olduğu gibi, w3wp.exe’lerden birinde ortaya çıkabilecek bir sorun, diğerlerini etkilememiş olacaktır. “Web garden” kullanmanın bir diğer nedeni de, 32bit ortamlarda hafıza kullanımını artırmaktır. Buradaki yazımda bahsettiğim gibi, 32bit ortamlarda her bir ASP.NET uygulaması en fazla 800MB hafıza kullanabilmektedir. Eğer bizim uygulamamız daha fazlasına ihtiyaç duyuyorsa, “web garden” özelliği ile birden fazla w3wp.exe kullanılmasını sağlayabiliriz.

Dikkat etmemiz gerekenler

Neden “web garden” ve “web farm” kullanmak isteyebileceğimizden bahsettik. Ancak, her zamanki gibi, bunları kullanmamız bazı sorunları da beraberinde getirecektir:

  1. Eğer uygulamamızda “session” kullanıyorsa ve bunu “InProc” yani uygulama üzerinde tutuyorsak sorun yaşayabiliriz: Bir kullanıcıdan gelen ilk istek hangi sunucu ve hangi w3wp.exe tarafından yanıtlanırsa “session” onun üzerinde yaratılacaktır. Eğer aynı kullanıcının sonraki bir isteği, başka bir sunucu veya w3wp.exe’ye denk gelirse, “session” bulunamayacak ve kullanıcı sorun yaşayacaktır. Bu nedenle, “web farm” ve/veya “web garden” kullanacaksak, “session” bilgilerıini başka bir yerde tutmalıyız (state server veya SQL Server gibi).

  2. Eğer sayfalarımızda “viewstate” açıksa, “web farm” ortamında sorun yaşayabiliriz. Yukarıdakine benzer bir şekilde, sunuculardan birinden alınmıs bir “viewstate” bilgisi, başka bir sunucuya gidecek olursa “Invalid ViewState” benzeri bir hatayla karşılaşırız. Aşağıdaki makalelerde bu sorunun detaylarından bahsedilmektedir:

    https://support.microsoft.com/kb/555353
    https://support.microsoft.com/kb/829743

    Çözüm için, aşağıdaki makaledeki yolu izlememiz gerekmektedir:

    https://support.microsoft.com/kb/312906

  3. Bir diğer sorun da, yine sadece “web farm” ortamları için geçerli olan, ağ kullanımının artması sorunudur. Bu, istemci tarafında “caching” yapılamamasıyla ilgili bir durumdur. Aşağıdaki makalede bu durum IIS 5.0 özelinde anlatılmaktadır, ancak diğer versiyonlar için de geçerli bir durumdur:

    https://support.microsoft.com/kb/922733

    Çözüm, IIS 6.0’da oldukça kolaydır. Aşağıdaki makaledeki çözüm önerilerinden bir numaralı olanı uygulamamız yeterli olacaktır:

    https://support.microsoft.com/kb/922703

SONUÇ

Özetlemek gerekirse, hem “web garden” özelliği, hem de “web farm” kullanımı, ihtiyaçlara bağlı olarak bize ciddi faydalar sağlayabilir. Ancak elbette ne yaptığımızı biliyor olmamız koşuluyla.

CENK ISCAN