Kestrel: Web Server dành cho ASP.NET Core

Trong bài viết này chúng ta sẽ tìm hiểu về Kestrel, một web server dành cho ASP.NET Core. Cách mà chúng ta host ứng dụng trong ASP.NET Core đã thay đổi so với phiên bản ASP.NET cũ. Kestrel là cách mới để host ứng dụng ASP.NET Core. Nó chạy ứng dụng độc lập và hoàn toàn có thể tự host được.

Kestrel là gì?

Kestrel là một HTTP web server mã nguồn mở (open source), đa nền tảng (cross-platform), hướng sự kiện (event-driven) và bất đồng bộ (asynchronous I/O). Nó được phát triển để chạy ứng dụng ASP.NET Core trên bất cứ nền tảng nào. Nó được thêm vào mặc định trong ứng dụng ASP.NET Core.

Nó dựa trên Luv, và Kestrel là một mã nguồn mở trên Github

Tại sao sử dụng Kestrel

Ứng dụng ASP.NET cũ thường dính chặt vào IIS (Internet Information Service). IIS là một web server với tất cả các tính năng đầy đủ cần có. Nó được phát triển từ khá lâu và rất trưởng thành, nhưng nó cồng kềnh và nặng. Nó trở thành một trong những Web server tốt nhất ở thời điểm hiện tại nhưng nó cũng là một trong những thứ chậm nhất.

ASP.NET dính chặt vào IIS cũng là gánh nặng cho IIS.

Thiết kế mới của ứng dụng ASP.NET Core giờ đây hoàn toàn tách rời khỏi IIS. Điều này tạo cho ASP.NET Core có thể chạy trên bất cứ nền tảng nào. Nhưng nó vẫn có thể lắng nghe các HTTP Request và gửi lại response về cho client. Đó là Kestrel.

Sử dụng Kestrel

Kestrel chạy in-process trong ứng dụng ASP.NET Core. Vì thế nó chạy độc lập với môi trường. Kestrel web server nằm trong thư viện Microsoft.AspNetCore.Server.Kestrel.

Chúng ta hãy xem 2 class Program và Startup được giới thiệu trong bài: Khởi động ứng dụng trong ASP.NET Core. Program class chứa một phương thức Main và là điểm khởi động của ứng dụng.

public class Program
{
    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }
 
    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
        .UseStartup<Startup>()
        .Build();
}

Phương thức Main gọi đến CreateDefaultBuilder, có trách nhiệm tạo một host cho ứng dụng. (Host là nơi chứa ứng dụng để chạy). CreateDefaultBuilder đăng ký Kestrel như là server sẽ sử dụng trong ứng dụng.

Có 2 cách để sử dụng Kestrel

  1. Tự host (Self Hosting)
  2. Đằng sau một Web server khác

Tự host (Self Hosting)

Mô hình self hosting của ASP.NET Core là lắng nghe trực tiếp các HTTP Request từ internet như hình dưới đây:

 

 

Đằng sau Web Server khác

Kestrel không phải là một web server đầy đủ tính năng. Nhưng nó nhanh. Nó không đủ mạnh để chạy Kestrel một mình trên môi trường Production. Nó được đề xuất chạy đằng sau một Web Server Fully Feature như IIS, Nginx hay Apache…Trong kịch bản này các web server khác như là một reverse proxy server (máy chủ ủy quyền). Các Reverse proxy server sẽ lấy HTTP Request từ internet và gửi sang Kestrel. IIS có thể lấy HTTP Request và thực hiện một số các xử lý như ghi log, lọc request, rewrite-url trước khi gửi sang cho Kestrel.

 

 

Có nhiều lý do tại sao chúng ta sử dụng mô hình này cho môi trường Production.

  1. Bảo mật: Nó có thể hạn chế việc phơi ra ngoài những gì không cần thiết và nó cũng cho chúng ta các tùy chọn về cấu hình và bảo vệ ứng dụng.
  2. Dễ dàng cài đặt cân bằng tải
  3. Cài đặt SSL: Chỉ các máy chủ ủy quyền cần các chứng chỉ SSL, còn các server này có thể làm việc với ứng dụng của bạn trên mạng nội bộ sử dùng HTTP thuần.
  4. Chia sẻ một IP với nhiều địa chỉ
  5. Lọc các Request, ghi log và rewrite-URL…
  6. Nó có thể restart ứng dụng nếu bị crash.

Phương thức CreateDefaultBuilder gọi UseIISIntegration, sẽ nói co ASP.NET rằng ứng dụng sử dụng IIS như là một reverse proxy server đằng trước Kestrel.

Thay thế cho Kestrel

Kestrel không phải là cách duy nhất để host ứng dụng ASP.NET Core. Có một web server khác triển khai có sẵn trên Windows là HTTP.SYS.

HTTP.sys là một HTTP Server dựa trên Http.Sys kernel driver và nó chỉ sử dụng trên Windows.

Các bạn có thể tìm hiểu thêm tại đây: Cách sử dụng HTTP SYS

Kết luận

Bài viết này chúng ta sẽ học về Kestrel server. Một In-process web server để chạy ASP.NET Core trên đa nền tảng.


Trích nguồn từ: (https://www.tektutorialshub.com/)

Lên trên