Nhóm ứng dụng IIS 7.x Thực tiễn tốt nhất


24

Chúng tôi sắp triển khai một loạt các trang web đến một số máy chủ mới. Tôi có các câu hỏi sau đây về nhóm ứng dụng:

  1. Có vẻ như nên có một nhóm ứng dụng cho mỗi trang web. Có bất kỳ cảnh báo cho phương pháp này? Một nhóm ứng dụng sẽ hog tất cả CPU, Bộ nhớ, Vv ...?

  2. Khi nào bạn nên cho phép nhiều tiến trình worker trong một nhóm ứng dụng? Khi nào bạn không nên?

  3. Có thể sử dụng giới hạn bộ nhớ riêng để ngăn một nhóm ứng dụng can thiệp vào một nhóm khác không? Việc đặt nó quá thấp sẽ khiến các yêu cầu hợp lệ tái chế nhóm ứng dụng mà không nhận được phản hồi hợp lệ?

  4. Sự khác biệt giữa giới hạn bộ nhớ riêng và ảo là gì?

  5. Có lý do thuyết phục KHÔNG chạy một nhóm ứng dụng trên mỗi trang không?


Câu hỏi đầu tiên trả lại cho bạn: Những trang web này (ví dụ: .htm / .js) hoặc ứng dụng web (ví dụ: .aspx / .php)?
Mã hóa Gorilla

Chủ yếu là .Net 3.5 ứng dụng. Một là ứng dụng PHP của bên thứ ba.
Eric Burcham

1
Đây là một loạt các chủ đề - Chủ đề (và câu trả lời của @ CodingGorilla) rất thú vị, nhưng nó có thể không phù hợp nhất với phong cách Q-and-A của SF
voretaq7

Câu trả lời:


20

1) Có vẻ nên có một nhóm ứng dụng cho mỗi trang web. Có bất kỳ cảnh báo cho phương pháp này? Chẳng hạn, một nhóm ứng dụng có thể hog tất cả CPU, Bộ nhớ, Vv ... không?

Đây là một cách tiếp cận khá tốt; không có bất kỳ lý do chính đáng nào mà tôi có thể nghĩ đến để có các "trang web" (ứng dụng) khác nhau chia sẻ cùng một nhóm. Trừ khi họ cần chia sẻ một nguồn tài nguyên nào đó. Về mặt lý thuyết, một ứng dụng có thể chứa rất nhiều CPU hoặc bộ nhớ, nhưng việc thay đổi cách các ứng dụng được gộp lại sẽ không thực sự ảnh hưởng đến điều này.

2) Khi nào bạn nên cho phép nhiều quy trình công nhân trong một nhóm ứng dụng. Khi nào bạn không nên?

Điều này là tốt nhất để lại một mình, sử dụng các thiết lập mặc định. Trừ khi bạn thực sự biết những gì bạn đang làm điều này thực sự có thể tác động tiêu cực đến trang web / ứng dụng của bạn.

3) Có thể sử dụng giới hạn bộ nhớ riêng để ngăn một nhóm ứng dụng can thiệp vào một ứng dụng khác không? Việc đặt nó quá thấp sẽ khiến các yêu cầu hợp lệ tái chế nhóm ứng dụng mà không nhận được phản hồi hợp lệ?

a) Về mặt lý thuyết

b) Có, đặt nó xuống thấp hơn có thể có tác động tiêu cực. Một lần nữa, trừ khi bạn có nhu cầu cụ thể, và biết những gì bạn đang làm, hãy để những thứ này một mình.

4) Sự khác biệt giữa giới hạn bộ nhớ riêng và ảo là gì?

Điều đó rất phức tạp, đây là một bài đăng nhanh mà tôi thấy có thể giúp ích: http://cybernetnews.com/cybernotes-windows-memory-usage-explained/

5) Có lý do thuyết phục KHÔNG chạy một nhóm ứng dụng trên mỗi trang không?

Một lần nữa, lý do duy nhất tôi có thể nghĩ đến là nếu có một loại "tài nguyên chia sẻ" nào đó mà nhiều ứng dụng cần, thì bạn sẽ muốn chạy chúng trong cùng một quy trình.

Đối với các ứng dụng và trang web cho mục đích chung, IIS được thiết lập khá tốt với các giá trị mặc định của nó.

**** CẬP NHẬT ****

Liên quan đến yêu cầu của bạn về thông tin bổ sung về # 2, bạn không nên làm điều này trừ khi bạn có nhu cầu cụ thể để làm điều đó. Ngay cả với các hành động máy chủ mất nhiều thời gian, các yêu cầu vẫn được cung cấp bằng cách sử dụng nhiều luồng và bạn sẽ muốn sử dụng "Yêu cầu Async" để xử lý các tác vụ chạy dài (giải phóng một chuỗi nhóm luồng để xử lý các yêu cầu khác). Thực tế, tôi không thể nghĩ ra bất kỳ lý do chính đáng nào để cho phép nhiều quy trình cho một nhóm.

Khi bạn bắt đầu nói nhiều quy trình, thì bạn có khả năng gặp phải những vấn đề như: mất trạng thái phiên vì phiên còn tồn tại trong quy trình 1, nhưng yêu cầu đang được xử lý bởi quy trình 2. Hoặc thậm chí tệ hơn, bạn phải tìm ra cách để làm một số giao tiếp giữa các quá trình, đó là một nỗi đau thực sự.

Bất kể bạn đi kèm với lý do gì cho nhiều quy trình, tôi sẽ sẵn sàng đặt cược rằng có một cách tốt hơn để giải quyết nó (thay vì khởi động một quy trình khác).


Tôi đánh giá cao câu trả lời chu đáo, và đã chấp nhận nó. Nếu bạn có bất kỳ thông tin cụ thể hơn cho # 2, tôi sẽ đánh giá cao nó. "Tốt nhất còn lại một mình" chắc chắn là lời khuyên hiền, nhưng khi sử dụng nhiều quy trình công nhân cũng sẽ rất tốt để biết. Tôi cho rằng điều này có liên quan hơn khi bạn có một số hành động máy chủ mất nhiều thời gian để trả lời phản hồi, như báo cáo lớn, dịch vụ web chấp nhận các bài đăng lớn và tương tự. Tôi cũng giả sử tất cả các công cụ đồng thời chủ đề bình thường áp dụng?
Eric Burcham

Chỉ cần thêm: nếu bạn mong muốn các ứng dụng của mình chơi kém với nhau, hộp thoại cài đặt cho IIS lưu ý rằng Trình quản lý tài nguyên hệ thống Windows có thể được cài đặt và sử dụng để hạn chế sử dụng CPU và bộ nhớ của nhóm ứng dụng.
TristanK

@TristanK, cảm ơn bạn vì tiền boa. Điều đó vô cùng hữu ích.
Eric Burcham

@Coding Gorilla - Cảm ơn một lần nữa cho cái nhìn sâu sắc. Tôi quyết định thực hiện một số nghiên cứu nghiêm túc về "tại sao sử dụng vườn web" và đưa ra một số phản hồi. Tất cả các thông báo mà bạn đề cập đều áp dụng, đặc biệt là xử lý truy cập không đồng bộ vào các tài nguyên được chia sẻ như các bộ nhớ cache và phiên người dùng khác nhau. Tính năng vườn web về cơ bản chỉ cho phép bạn tải các yêu cầu cân bằng trên một máy chủ với nhiều hơn lõi. Vì vậy, bạn phải đối phó với tất cả các cảnh báo mà bạn thường xử lý trong một kịch bản cân bằng tải, ngoại trừ việc định tuyến các yêu cầu.
Eric Burcham

@Coding Gorilla - Tiếp tục ... "Lý do" tốt nhất tôi tìm thấy để sử dụng tính năng xử lý nhiều công nhân là để tăng hiệu suất. Kiểm tra liên kết này: iis-aid.com/articles/performance_testing/ . Tất nhiên, bạn đã biết rõ hơn những gì bạn đang làm với tất cả các khía cạnh không đồng bộ của lập trình mà chúng ta thường bỏ qua khi tính đến các trang web, vì hầu hết chúng (ít nhất là bắt đầu) chạy một luồng công nhân duy nhất. Vì vậy, câu trả lời ngắn cho câu hỏi của tôi là: Hãy thử nếu bạn đang gặp vấn đề về hiệu suất.
Eric Burcham

4

Tôi luôn cấu hình một nhóm ứng dụng dành riêng cho một trang web. Kịch bản lưu trữ trang web chi phí thấp là nơi có số lượng lớn các trang web trên mỗi nhóm ứng dụng có ý nghĩa.

Các giới hạn bộ nhớ thực sự chỉ là ngưỡng an toàn nguyên thủy để ngăn chặn một trang web tiêu thụ tất cả tài nguyên hệ thống. Lưu ý rằng đây là vấn đề tiềm ẩn trên Windows 2008 R2 x64 so với IIS 6.0 x86, vì các ứng dụng x86 có trần bộ nhớ 2 GB tự nhiên. IIS 7.5 dễ dàng hơn nhiều đối với một ứng dụng bị rò rỉ bộ nhớ để tiêu thụ một lượng lớn bộ nhớ.

Tôi cũng không phải là một fan hâm mộ lớn của các nhóm ứng dụng tái chế. Nếu tôi có nhóm ứng dụng và tôi là ứng dụng duy nhất đang chạy, nếu không có gì sai với mã của chúng tôi, có lẽ không cần phải tái chế nhóm ứng dụng. Và nếu có lỗi trong ứng dụng, hành động thích hợp cuối cùng sẽ là sửa mã.


Cảm ơn đã chỉ ra nắp 32 bit trên bộ nhớ. Tôi không biết làm thế nào tôi quên những điều này. Tôi cũng nghĩ rằng cách tiếp cận chính xác nếu bạn có một ứng dụng bị lỗi đủ để làm hỏng một nhóm ứng dụng là sửa nó, giả sử bạn có quyền truy cập vào mã. Tôi đánh giá cao lời khuyên!
Eric Burcham

Chúng tôi đã làm một số thử nghiệm của riêng chúng tôi. Chạy một nhóm ứng dụng dường như có tổng chi phí khoảng 64K cho mỗi nhóm ứng dụng ở trên, chạy tất cả các ứng dụng trong cùng một nhóm ứng dụng. Đó là trong khoảng thời gian mẫu là 12 giờ bằng cách sử dụng màn hình hiệu suất để theo dõi mức tiêu thụ bộ nhớ. Đây là trên một máy chủ 64 bit. Tôi nghĩ rằng nếu thử nghiệm đơn giản này là chính xác, thì chi phí tài nguyên của một nhóm ứng dụng cho mỗi ứng dụng về cơ bản là không đáng kể trên phần cứng hiện đại.
Eric Burcham
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.