Triển khai một hệ thống trên IIS Server với mô hình Web Garden

Đối với một lập trình viên dotnet, nếu bạn đã từng tham gia phát triển hệ thống web thì chắc bạn sẽ từng biết đến khái niệm máy chủ web IIS (Internet Information Service).

IIS là một máy chủ web do Microsoft phát triển và được sử dụng để triển khai và lưu trữ ứng dụng Web. IIS có Công cụ xử lý ASP.NET của riêng mình để xử lý yêu cầu. Vì vậy, khi một yêu cầu đến từ máy khách đến máy chủ, IIS sẽ nhận yêu cầu đó và xử lý nó và gửi phản hồi trở lại máy khách.

Mặc định khi tạo một ứng dụng chạy trên IIS sẽ tạo ra một application pool chạy với một worker process (W3Wp.exe). 



Ứng dụng web sau khi được tạo






















Và Application Pool tương ứng bên trong thư mục Application Pools
















Và mặc định sẽ chỉ có tối đa 1 Worker chạy cho ứng dụng này
































Chúng ta có thể kiểm tra số worker đang chạy cho ứng dụng theo cách sau:


















Danh sách worker đang chạy, và ở danh sách này thể hiện thông số như CPU % 












Khi để chế độ mặc định này thì mọi thao tác và yêu cầu (request) gửi vào ứng dụng được IIS xử lý đồng bộ và nhất quán. 

Nhưng nhược điểm là khi có nhiều request gửi vào thì tổng thời gian để trả về kết quả có thể bị chậm đi nhiều vì chỉ có một Worker chạy.
Ví dụ: 
+ 2 request thì 60 mili giây trả về
+ 10 request thì mất đến 1200 mili giây trả về
+ 100 request thì mất 12000 mili giây trả về
Tức là với lượng truy cập đồng thời tăng thì thời gian trả về càng lớn.

Bài toán này chắc khá nhiều bạn đã gặp phải rồi. CPU lúc nào cũng chiếm lượng % rất lớn, server thường xuyên bị đơ.

Để giải quyết bài toán này người ta đưa ra hai khái niệm là Web Garden và Web Farm. Vậy ta đi tìm hiểu từng loại khái niệm và ứng dụng trong thực tế của nó.


WEB GARDEN

Web Garden là khái niệm để chỉ những ứng dụng web được cài đặt sử dụng nhiều hơn một worker để chạy. Ta có thể mượn cái ảnh từ internet để minh họa cho dễ hiểu


Cách thiết lập:


























Ưu điểm của Web Garden: 

Do có nhiều worker được thiết lập có thể chia sẻ cùng nhau để xử lý các request, nên việc xử lý nhiều request cùng lúc được diễn ra nhanh chóng hơn và trả về kết quả trong thời gian nhanh hơn so với một worker.

Ví dụ: 
+ 2 request thì 60 mili giây trả về
+ 10 request thì mất đến 90 mili giây trả về
+ 100 request thì mất 3600 mili giây trả về

Như vậy so với Application Pool (Normal) thì Application Pool (Web Garden) thực thi nhanh có vẻ ổn hơn nhiều.

Hạn chế của web garden:

Do sử dụng nhiều worker khác nhau để xử lý request nên yêu cầu các phiên xử lý phải được các worker hiểu được. Vậy để triển khai được web garden chạy không bị lỗi thì yêu cầu ứng dụng của phải được thiết kế lưu trữ các thông tin như session ... ở một nơi chung chứ không dùng bộ nhớ của IIS server. Chẳng hạn như dùng SQL Session State hoặc dùng ứng dụng bên thứ 3 như các hệ thống cache: memcache, redis.

Nhưng với những cách triển khai những hệ thống nhỏ, đơn giản, ít lưu lượng truy cập thì có thể dùng cách này. Nhưng đối với hệ thống có lượng truy cập lớn thì cách này không đáp ứng được. 

Mình sẽ viết một series về thiết kế ứng dụng triển khai đáp ứng khả năng scale out.

0 comments:

Đăng nhận xét

Có nhận xét mới

Like