Nedir Bu Kestrel Web Sunucusu ? Artısı – Eksisi ve Daha Fazlası
Ben ise kendilerini .Net ortamının Tomcat'i olarak adlandırıyorum.
Bu makaleyi yazmamın sebebi Performance Comparison of Java EE and ASPNET Core adlı üniversite makalesi oldu. Kristiāns Kronis, Marina Uhanova tarafından yazılmıştı.Kendilerine bu çalışma için teşekkür ediyorum. Bu makaleyi okuyunca Kestrel hakkında bir seri yazmak istedim.
Kestrel .net core ile ortaya çıkan platform bağımsızılığın bir sonucudur diyebiliriz. Bildiğiniz üzere asp.net uygulamaları IIS bağımlı olarak yazılıyordu. Daha sonra bağımsız ortamlara taşınsa da her sunucu için özel ayarlar gerektiriyordu. İşte Kestrel sistemin gerçekten bağımsız olabilmesi için ortaya çıkan bir sonuçtur. Ben ise kendilerini .Net ortamının Tomcat’i olarak adlandırıyorum.
Kestrel, herhangi bir platformda ASP.NET uygulamalarını barındırmak için kullanılan açık kaynaklı kodlu, olaya dayalı ve eşzamansız, I / O tabanlı bir sunucudur. Sunucu Windows , Linux veya Mac üzerinde komut satırı ile kullanabilir bir arayüz ile geliyor.
Kestrel Yapısı
Kestrel sunucusunun yapısını incelediğimizde yeni Asp.Net uygulamaları desteklediğini göreceğiz. Event-driven ve asenkron yapıyı da desteklemesi için node.js tarafında kullanılan Libuv kütüphanelerini kullanmaktadır.
Hepimizin bildiği üzere uygulamalar genellikle insan davranışlarına cevap vermek için yazılır. Olay odaklı(event-driven) programlama ile de bu davranışları program içerisinde yönetiriz. İşte bu olayan dolayı SYS de oluşan çağrılar .net core programcıkları tarafından yürütülür.
Kestrel, olay döngüsü ve I/O tabanlı geri çağrım (callback) bildirimlerini kullanmamızı sağlar. Libuv ise , OS’den olayların toplanmasını ve izlenmesini yönetir. Dolayısıyla Kestrel, I / O işlemleri için libuv kullanırken çoklu olay döngülerinin çalıştırılmasını destekler.
Görüldüğü üzere çok yalın bir sistemdir. Bundan dolayı standart bir web sunucusunun desteklediği çoğu şeyi desteklemez.Örnek olarak URL rewrites ve GZip sıkıştırması verilebilir. Ama bunların olmaması onu gerçekten de çok hızlı bir sunucu haline getirmiştir.
Kestrel’in önerilen kullanımı aşağıda göreceğiniz gibi ön tarafında IIS Nginx,Apache vb. bir sunucu şeklindedir.
Kısa bir IIS Kestrel kaşılaştırması
Sunucu | IIS | Kestrel |
Platform Support | Windows | Windows/Linux/Mac |
Static Files | Evet | Evet |
HTTP Access Logs | Evet | Hayır |
Port Sharing / Multiple apps* | Evet | Hayır |
SSL Certificates | Evet | Internal** |
Windows Authentication | Evet | Hayır |
Management Console | Evet | Hayır |
Process Activation (start it up) | Evet | Hayır |
Application Initialization (warm it up) | Evet | Hayır |
Configuration API | Evet | Hayır |
Request Filtering & Limits | Evet | Hayır |
IP & Domain Restrictions | Evet | Hayır |
HTTP Redirect Rules | Evet | Hayır |
WebSocket Protocol | Evet | Orta Katman |
Response Output Caching | Evet | Hayır |
Compression | Opsiyonel | Opsiyonel |
FTP Server | Evet | Hayır |
Uygulama Geliştiriciler Önemli Notlar
- Gerçekten Hızlı
- ASP.NET 5 için kullanılması amaçlanmıştır.
- Tam özellikli bir web sunucusu değildir. ISS, NGNIX vb. gibi düşünemezsiniz.
- Windows üzerinde IIS veya Linux üzerinde NGNIX gibi daha özellikli bir web sunucusunun arkasından çalıştırmanızı öneriyorum.
- HttpPlatformHandler’ı kullanarak IIS’nin arkasında çalışır.
- ASP.NET 5 projeleriniz için desteklemeniz sayesinde projeniz desteklenen platformlardan herhangi birinde geliştiriciler tarafından kolayca çalıştırılabilir.
- .NET çerçevesinde https destekler ve .NET Core için geliştirilmiştir.
Kaynakça;
docs.microsoft.com
stackify.com