Câu trả lời của womble là tuyệt vời, mặc dù hơi khó hiểu và áp dụng cho những người chưa có kinh nghiệm. Tôi muốn đưa ra một số con số thực nghiệm và so sánh ứng dụng "nội dung đơn giản" so với "thương mại điện tử".
Không có nhiều tài liệu xung quanh việc thiết lập các trường hợp sử dụng khác nhau liên quan đến cấu hình mod_wsgi phù hợp của họ, vì vậy tôi hy vọng có thể sử dụng một chút văn xuôi ở đây.
A) Trang web & microsites CMS
Chúng tôi điều hành một số trang web của khách hàng, hầu hết trong số họ chủ yếu là các trang nội dung hoặc các trang web siêu nhỏ lưu trữ django CMS, một số biểu mẫu tùy chỉnh và đôi khi là Celery cho các tác vụ nền theo lịch trình. Các trang web này không đói tài nguyên, một số trong số chúng chạy song song trên một Intel Xeon 4 lõi với RAM 32 GB. Đây là cấu hình chúng tôi sử dụng cho từng loại trang web này:
WSGIDaemonProcess example.com user=www-data processes=2 maximum-requests=100
Tôi đang nói về khoảng 40 trang web trên một máy chủ, hầu hết trong số đó có trang Staging của họ đang chạy ở chế độ chờ. Với 2 quy trình (theo mặc định có 15 luồng), các trang web khá giả, mặc dù bị hạn chế về khả năng phân bổ tài nguyên máy chủ. Tại sao thiết lập này là đủ có thể được biện minh với tính chất đơn giản của ứng dụng (CMS): Không có yêu cầu nào được mong đợi sẽ mất nhiều hơn một vài mili giây để hoàn thành. Apache sẽ luôn luôn thư giãn và do đó sẽ là tải CPU.
B) Trang web thương mại điện tử
Các trang web phức tạp hơn chúng tôi thực hiện được đặc trưng bởi các hoạt động địa phương không tính toán nhưng phụ thuộc bên ngoài (ví dụ: dịch vụ web cung cấp dữ liệu đặt phòng) rất tốn kém về thời gian giao dịch. Các hoạt động với các yêu cầu bên ngoài chiếm các luồng trong thời gian lâu hơn nhiều, vì vậy bạn cần nhiều luồng hơn để phục vụ cùng số lượng người dùng (so với một trang web CMS đơn giản ở trên). Thậm chí tệ hơn, các luồng đôi khi bị chặn khi một dịch vụ bên ngoài không thể trả lời yêu cầu ngay lập tức, đôi khi trong vài giây. Điều này có thể dẫn đến hiệu ứng phụ khó chịu khi các luồng đặt yêu cầu vào cùng một dịch vụ xếp hàng, cho đến khi tất cả các luồng mod_wsgi có sẵn được sử dụng hết và bị chờ chờ.
Đối với những kịch bản đó, chúng tôi đã cố gắng sử dụng 6
các quy trình mà không thấy nhiều sự khác biệt và cuối cùng chúng tôi đã 12
thấy sự gia tăng không thể so sánh về hiệu suất và sự ổn định trong vận hành:
WSGIDaemonProcess example.com user=www-data processes=12 maximum-requests=100
Một số thử nghiệm tải đơn giản với 150 và 250 người dùng song song có thể dễ dàng xử lý bởi trang web vẫn đáp ứng tốt (trong khi với 2
các quy trình, trang web không thể sử dụng song song phục vụ 50 người dùng). Intel Xeon 2 CPU 6 nhân với RAM 32 GB chạy tốt dưới 25% mức sử dụng CPU trong tải đó, mức sử dụng RAM gần như không đổi ở mức dưới 25%. Lưu ý rằng chúng tôi sử dụng một máy chuyên dụng chỉ cho một trang web duy nhất ở đây, vì vậy chúng tôi sẽ không lấy cắp tài nguyên mà các trang web khác có thể cần.
Phần kết luận
Sử dụng số lượng quy trình cao hơn là một sự đánh đổi giữa việc cho phép Apache sử dụng các tài nguyên hệ thống có sẵn hay không. Nếu bạn muốn giữ một hệ thống máy chủ ổn định (không phải trang web!) Trong điều kiện "tấn công", hãy giữ số lượng thấp. Nếu bạn muốn Apache giúp bạn sử dụng tài nguyên hệ thống (CPU, RAM) khi cần, hãy chọn số cao hơn. Làm thế nào cao bạn có thể đi tính toán phần nào như được nêu trong câu trả lời được chấp nhận ở trên, và cuối cùng bị hạn chế bởi sức mạnh CPU và RAM có sẵn.
(PS: Tôi giữ ConfigurationDirectives phần của wiki dự án modwsgi dưới gối của tôi cho Apache giống như đọc nền Ngoài ra hãy chắc chắn để hiểu và theo dõi của bạn. Kết nối mở máy chủ Apache .)