Bildiğiniz gibi geçen günlerde Build’de Windows Server 2012 R2′yi tanıtmışlardı. Hyper-V’nin yeni sürümü ile beraber mimaride performans’a dayalı bir çok iyileştirme ve yenilik hayatımıza girmiş oldu.
Server 2012 R2 ile birlikte yeni bir IIS sürümüne de kavuştuk. IIS 8.5!
IIS 8.5′e gelen özellikler az ama öz olmuş. MaestroPanel ile birlikte Hoster’ların IIS 8.5 nimetlerinden maksimum yararlana bilmesi için detaylı bir inceleme ve entegrasyon sürecine girmeden neler varmış bir bakalım.
Dynamic Site Activation
Windows’un şu meşhur http.sys’si vardır hani protokolü handle edip kuyruklayıp ilgili process’lere gönderen.
IIS 8.5 ile birlikte mimari değişmiş. Eski versionlarda her IIS binding’i için sistemde yani Kernel seviyesinde bir http socket ayrılıp istek gelse de gelmese de bekletiliyordu arkasından Worker Process’lere ilerliyordu. Buda kullanılmayan web sitelerinde gereksiz kaynak tüketimine neden oluyordu.
IIS 8.5 ile birlikte major bir mimari değişiklik yapılmış. Bu sefer http.sys’de tüm binding’ler için tek bir socket açılıyor bu soket’ten gelen istekleri alıyor ve kendi içinde yeni bir istek oluşturup ilgili Worker Process’e aktarılıyor böylelikle ilgili vhost’a yeni bir istek gelmeden http.sys’de kaynak ayırmaya gerek kalmıyor. IIS takımı buna Dynamic Site Activation ismini koymuş. WAS ile karıştırılmasın. Yüksek yük altında IIS’e büyük performans sağlayacak iyi bir ilerleme.
Not: netsh http show servicestate diyerek test edebilmeniz mümkün.
Şöyle somutlaştıralım olayı:
10.000 web sitesi IIS 7.5′de toplamda 338.847 MB Ram ve 7.76 saniye’de UP olurken IIS 8.5′de 20.582 MBRam ve 2.61 saniye’de UP oluyor. Aradaki fark muazzam!
Cold Start Time
IIS 7.0 ile gelen Idle Time-Out özelliği vardı hatırlarsanız. Default olarak 20 dakika’da web sitesinde herhangi bir hareket olmazsa WAS (Windows Activation Service) application pool’u yani uygulamayı shutdown ediyordu taki bir sonraki istek olana dek. IIS 8.5′deki iyileştirme uyglamaya ilk istek geldiğinde ayağa kalkma süresinde olmuş. Buna Cold Response Time deniyor.
Statik içerik host eden bir web sitesi düşündüğümüzde IIS 7.5′in duran uygulamayı yeniden ayağa kaldırması IIS’deki site sayısına göre artıyor. 433 web sitesinde 2.000 ms. IIS 8.5′de ise 421 site için 300 ms.
Fakat!
IIS 7.5 1.000 site civarına ulaştığında olay biraz değişiyor ve Cold Response Time 10.000 ms’ye çıkıyor ama IIS 8.5′de 1.000 sitede 400 ms’de kalıyor. Stabilite sağlanmış yani.
Yeri gelmişken söyleyeyim bu Cold Response Time mevzusuna müşteriler çok takıyor. Özellikle Webmaster’lar. Haklılar da.
Örneğin sitesi WAS tarafından durdurulmuş bir müşteri sitesini ilk istediğinde 10 saniyede açıldığını farkediyor ve hosting firmasını arayıp “Sitem bir yavaş, bir hızlı açılıyor kardeşim” diyebiliyor fakat IIS 8.5 bu farkı hissetirmediğinden müşteride tabiri caiz ise cavlamıyor. Buda firmaya sakinlik ve verimlilik olarak geri dönüyor.
Idle Time-Out Action
Yukarıdaki özelliğe paralel olarak yeni bir özellik gelmiş Idle Time-Out Action. İki değer alabiliyor Terminateve Suspend. Terminate zaten IIS 7.5′de vardı ama yönetilemiyordu. Yanına Suspend durumu eklenince mecbur arayüz’de bir alan eklemişler. Application Pool’un Advanced Setting’in den ulaşabiliyorsunuz. Aşağıda.
Yukarıdaki ayara göre Web sitesi Idle Time-Out’u geçtiği zaman (Biz MaestroPanel’de defaylt 5 dakika olarak ayarlıyoruz.) WAS tarafından durduruluyor demiştik yani Terminate oluyor.
Buradaki espiri ise action’ı Suspend’e çekerseniz Worker Process sonlandırılmadan Windows Process’lerinde kalıyor yani sitenin w3svc.exe’si çalışmaya devam ediyor fakat Ram kullanımı 2MB’a düşüyor yani yok denecek kadar aza indirgeniyor (Adı üstünde Suspend). Bu sayede yeni bir istek geldiğinde site yeniden ayağa kalkarken diğer IIS’lere göre daha çabuk olarak kullanıma hazır hale gelebiliyor.
İstatistik vermek gerekirse Idle Time-Out’un parametresini Terminate yapıp 100 siteyi ayağa kaldırdığınızda 55 saniye kadar sürüyor fakat Suspend yaparsanız 100 siteyi 2.8 saniyede ayağa kaldırabiliyorsunuz. Vay Be!
Logging
Loglama olayı hep IIS’de bela olmuştur I/O problemi yapar, düzgün customize edilemez, programlaması güçtür, kemiklidir!
IIS 8.5 ile birlikte hayatımıza yeni bir servis daha giriyor Logging Service!
Daha önce http.sys tarafından Kernel modda loglar üretilip disk’e yazılıyordu şimdi ise http.sys ETW (Event Tracing for Windows) denen bir olayı Log Servisi ile paylaşıyor ve daha yönetilebilir bir loglama yapılabilmesini sağlıyor. Aşağıdaki şekil bir fikir verir.
Buradaki olayın zorlanması tamamen Custom Logging alanlarını kullanıcının dilediği gibi oluşturması ve yeni Windows özelliklerine uyum sağlanması olarak algıladım. Lakin Log Services ile daha atraksiyonlu hareketlerin önü açılacaktır.
(Gönül isterdiki araya Lua benzeri bir scripting ile girelim yeri geldiğinde log olayında fantastik harekerler geliştirelim ama Ms. IIS konusunda bizi hep C++ mahkum ediyor. Ha programcı adamsın otur yaz dedin gibi duydum. Normal o.)
Herkesin derdidir IIS’in önüne Citrix Netscaler‘ı koyarsınız doğal olarak http multiplexing yaparsınız bir bakmışsınız IIS loglarında Netscaler’ın IP’si var. Client’ın gerçek IP’sini yeni bir header’a yazarsınız ama IIS’e bunun tanıdılması için 3rd party araçlar kullanırsınız. Her version’da da elinizde patlar. Bu loglama yenilikleri işte bu dertlerden kurtarıyor. Log dosyasına yeni bir alan bile ekleyebilirsiniz.
Burada hoşuma giden en güzel özellik log alanlarına Server Variables, Request ve Response değerlerinide ekleyebiliyor oluşumuz oldu. Örneğin HTTPS Server Variables’ini direkt log dosyasına yeni bir alan açıp yazdırabiliyoruz. Bunuda IIS ara yüzünden yapabiliyoruz. Evet.
Son olarak Loglama modunu ETW’ye alırsanız http loglarını Microsoft Message Analyzer aracılığı ile gerçek zamanlı görebiliyorsunuz. Hani Hoster seviyesinde lazım olmaz ama bir zararlı analizi veya saldırı altında sistem yöneticisne direkt yardımcı olacaktır. Fiddler kullanırım uğraşmam dersen tartışmak istemem açıkçası.
Bu arada geçen gün muhabbeti geçti. IIS’de optimum loglama şekli nedir diye.
Şunu öneririm:
IIS logunu Server seviyesinde tek bir dosyada ve Binary formatında tutarsanız performans fark ediyor.
Kaynaklar:
http://channel9.msdn.com/Events/TechEd/Europe/2013#fbid=wjt2G08GvFC
http://blogs.msdn.com/b/benjaminperkins/archive/2013/06/25/what-s-new-in-iis-8-5.aspx