Nhóm ứng dụng IIS, quy trình công nhân, miền ứng dụng


88

Có ai có thể giải thích sự khác biệt, trong IIS, giữa các nhóm ứng dụng, quy trình công nhân và miền ứng dụng không? Ngoài ra, chúng làm việc cùng nhau như thế nào? Tôi đã đọc một vài bài báo nhưng nó vẫn còn một chút khó hiểu.

  1. Mỗi trang web được tạo trong IIS có trở thành một ứng dụng không?
  2. Mỗi ứng dụng có được liên kết với một quy trình công nhân không?
  3. Miền ứng dụng xuất hiện ở đâu?

Câu trả lời:


103

Tôi cố gắng nói chúng bằng những từ khác.

Trong một máy chủ, bạn có thể có nhiều trang asp.net chạy cùng nhau. Mỗi một trang web là một miền ứng dụng .

Bạn phải gán cho mỗi người một nhóm ứng dụng . Nhiều miền ứng dụng (trang web) có thể có cùng một nhóm ứng dụng và vì chúng có cùng một nhóm ứng dụng nên chúng chạy trong cùng một quy trình và trong cùng một tài khoản - và chúng có cùng cài đặt của nhóm. Nếu nhóm này khởi động lại, thì tất cả các trang web trong nhóm đó sẽ khởi động lại.

Bây giờ mỗi nhóm có thể có một hoặc nhiều quy trình công nhân . Mỗi quy trình worker là một chương trình khác nhau chạy trang web của bạn, có các biến tĩnh riêng, chúng có các lệnh dừng start stop khác nhau, v.v. Các quy trình worker khác nhau không giao tiếp với nhau và cách duy nhất để trao đổi dữ liệu là từ các tệp chung hoặc cơ sở dữ liệu chung. Nếu bạn có nhiều quy trình công nhân và một trong số họ tính toán thời gian dài, thì quy trình kia có thể đảm nhận việc xử lý các cuộc gọi internet và hiển thị nội dung.

Khi bạn gán nhiều quy trình công nhân cho một nhóm duy nhất thì bạn tạo khu vườn web được gọi và trang web của bạn giống như được chạy từ nhiều máy tính nếu một máy tính là một máy xử lý.

miền ứng dụng, với các nhóm và quy trình

Mỗi quy trình công nhân có thể có nhiều luồng.

Quá trình nhiều worker ảnh hưởng đến bạn như thế nào:
Khi bạn có một worker, mọi thứ sẽ đơn giản hơn, giữa các ứng dụng của bạn, tất cả các biến tĩnh đều giống nhau và bạn sử dụng lockđể đồng bộ hóa chúng.
Khi bạn chỉ định nhiều quá trình worker thì bạn vẫn tiếp tục sử dụng lockcho các biến tĩnh, các biến tĩnh không khác nhau giữa nhiều lần chạy trang web của bạn và nếu bạn có một số tài nguyên chung (ví dụ: tạo hình thu nhỏ trên đĩa) thì bạn cần phải đồng bộ hóa quy trình công nhân của mình với Mutex.

Thêm một lưu ý nữa. Có vẻ như khi bạn thực hiện nhiều quy trình công nhân hơn thì bạn có thể tải trang không đồng bộ trơn tru hơn. Có một vấn đề nhỏ với trình xử lý phiên của asp.net đó là khóa toàn bộ quá trình tải trang - điều đó tốt và không tốt tùy thuộc vào việc bạn biết và xử lý nó - hoặc thay đổi nó.

Vì vậy, hãy nói về một trang web chỉ với nhiều quy trình công nhân. Tại đây, bạn phải đối mặt với vấn đề mà bạn cần đồng bộ hóa sự thay đổi tài nguyên chung của mình Mutex. Nhưng các trang / trình xử lý sử dụng phiên chúng không đồng bộ vì phiên khóa chúng. Điều này là tốt để bắt đầu bởi vì bạn tránh để thực hiện đồng bộ hóa nhiều điểm này của bạn.

Một số câu hỏi về chủ đề này:
Ứng dụng web bị chặn trong khi xử lý ứng dụng web khác khi chia sẻ cùng một phiên
jQuery Ajax các cuộc gọi đến dịch vụ web dường như là
ASP.NET Server đồng bộ Máy chủ không xử lý các trang một cách không đồng bộ
Thay thế hoàn toàn phiên của ASP.Net

Bây giờ khóa phiên này không ảnh hưởng đến các trang web khác nhau.

Giữa các trang web khác nhau, quy trình làm việc nhiều hơn có thể giúp không trang này chặn trang kia với quy trình chạy dài.
Ngoài ra giữa các trang web khác nhau, nhiều nhóm hơn cũng có thể giúp ích, bởi vì mỗi nhóm có ít nhất một quy trình hoạt động, nhưng hãy nhớ và tự bạn xem bằng cách sử dụng trình khám phá quy trình, mỗi quy trình làm việc chiếm nhiều bộ nhớ hơn của máy tính của bạn và một máy chủ lớn với bộ nhớ 16G và một máy chủ SQL không thể có quá nhiều quy trình làm việc khác nhau - ví dụ trên một máy chủ có 100 trang web được chia sẻ, bạn không thể có 100 nhóm khác nhau.


Tôi đang tìm ra nó khác với cách IIS 5 xử lý nó so với IIS 6 trở lên. Vì vậy, trong IIS 5, bạn có một quy trình Worker và nhiều miền ứng dụng trong đó so với IIS 6, bạn có nhiều quy trình worker (w3wp.exe), một quy trình cho mỗi nhóm ứng dụng. Trong IIS 6.0 inetinfo chuyển hướng đến các quy trình worker khác nhau tùy thuộc vào yêu cầu. Tôi có ở đây không? Đây là nguồn của tôi dotnetslackers.com/articles/iis/…
Ravi

@ user460103 Có iis5 là có một quy trình công nhân (nhiều miền ứng dụng chỉ có thể có với một bản hack nhỏ, nhưng chúng không hoạt động cùng nhau.) Khi bạn có trên một trang web nhiều quy trình công nhân, thì có iis6 có thể chuyển hướng bạn đến quy trình công nhân khác.
Aristos,

IIS có tạo ra một quy trình mới cho mọi yêu cầu web không? Hay nó quay ra một chủ đề mới?
biến

@variable Quay một chuỗi mới - quy trình luôn được duy trì và chạy mọi lúc, hoặc chúng tái chế theo cách bạn đã thiết lập chúng trên hồ bơi ...
Aristos

Ok nếu có nhiều quy trình, thì các phiên hoạt động như thế nào - Tôi nghĩ phiên là trên mỗi quá trình
thể thay đổi

18
  • Một máy chủ IIS có thể có nhiều nhóm ứng dụng.
  • Một ứng dụng web liên kết với một nhóm ứng dụng.
  • Một nhóm ứng dụng có thể có nhiều hơn một quy trình công nhân (khi Web Garden được bật).
  • Một quy trình công nhân có thể có nhiều miền ứng dụng. Một miền ứng dụng chỉ tồn tại trong một quy trình hoạt động.
  • Một miền ứng dụng có thể có nhiều chuỗi. Một chuỗi có thể được chia sẻ bởi các miền ứng dụng khác nhau trong thời gian khác nhau.

Ý nghĩa đối với các nhà phát triển ASP.NET: để làm cho trang web của bạn có thể mở rộng, không sử dụng phiên in-proc và không sử dụng khóa biến lớp tĩnh để đồng bộ hóa.


7
  1. Có, mặc dù không phải mọi ứng dụng đều là một trang web. Bạn có thể có một ứng dụng được lồng trong một trang web.

  2. Có, mọi ứng dụng phải có một quy trình công nhân (nhóm ứng dụng), mặc dù một nhóm ứng dụng có thể phục vụ một số ứng dụng. Một ứng dụng web có thể được phân phối (vườn / trang trại web) có nghĩa là nó sẽ chạy trong nhiều quy trình.

  3. Mỗi quy trình sẽ chạy trong miền ứng dụng riêng của nó (mỗi nhóm ứng dụng là một miền ứng dụng riêng biệt).


Từ MSDN.

Tạo một ứng dụng web :

Ứng dụng là một nhóm nội dung ở cấp cơ sở của một trang Web hoặc một nhóm nội dung trong một thư mục riêng trong thư mục gốc của trang Web.

Hồ bơi ứng dụng :

Nhóm ứng dụng xác định một nhóm gồm một hoặc nhiều quy trình công nhân, được cấu hình bằng các cài đặt chung phục vụ các yêu cầu đến một hoặc nhiều ứng dụng được gán cho nhóm ứng dụng đó. Bởi vì nhóm ứng dụng cho phép một tập hợp các ứng dụng Web chia sẻ một hoặc nhiều quy trình công nhân được cấu hình tương tự, chúng cung cấp một cách thuận tiện để tách một nhóm ứng dụng Web khỏi các ứng dụng Web khác trên máy chủ. Ranh giới quy trình tách biệt từng quy trình của công nhân; do đó, các sự cố ứng dụng trong một nhóm ứng dụng không ảnh hưởng đến các trang Web hoặc các ứng dụng trong nhóm ứng dụng khác. Nhóm ứng dụng làm tăng đáng kể cả độ tin cậy và khả năng quản lý của cơ sở hạ tầng Web của bạn.


Vì vậy, quy trình IIS có nhiều miền ứng dụng (nhóm ứng dụng) và mỗi nhóm ứng dụng có thể có nhiều trang web. Vậy có phải nhiều trang web nằm trong một miền ứng dụng duy nhất không? Điều gì sẽ xảy ra nếu có sự cố xảy ra trong một trang web, nó sẽ xóa toàn bộ miền ứng dụng và tất cả các trang web nằm trong đó?
Ravi,

@ user460103 Nếu bạn gặp sự cố một nhóm, thì có, tất cả các trang web được kết nối với nó, chúng sẽ dừng - và khởi động lại.
Aristos,

1
2. Không. Một ứng dụng có thể kéo dài nhiều hơn một quy trình worker nếu một web garden được cấu hình.
Wiktor Zychla,

@Wiktor - Tôi không loại trừ điều đó. Tuy nhiên, câu trả lời được cập nhật để làm rõ.
Hoạt động

3

Từ liên kết nguồn: -http: //weblogs.asp.net/owscott/archive/2007/09/02/application-vs-appdomain.aspx

Ứng dụng là một thuật ngữ IIS, nhưng đó là một thuật ngữ mà ASP.NET sử dụng. Về cơ bản, nó tạo ra một hộp cát hoặc một tập hợp các ranh giới để tách các trang web khác nhau hoặc các phần của trang web khỏi những trang khác.

AppDomain là một thuật ngữ .NET. (Trong IIS7, AppDomains đóng một vai trò lớn hơn trong IIS, nhưng phần lớn nó là một thuật ngữ ASP.NET)

Quy trình worker được sử dụng để xử lý yêu cầu của ứng dụng web.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.