it-swarm-vi.tech

Cài đặt nào: Công nhân Apache hoặc Prefork? Những (nhược điểm của mỗi là gì?

Dựa trên các mô tả cho cả PreforkCông nhân MPM, có vẻ như loại prefork đã hơi lỗi thời, nhưng tôi thực sự không thể tìm thấy một so sánh thích hợp của hai loại.

Những gì tôi muốn biết:

  • Sự khác biệt giữa hai phiên bản là gì?
  • Những lợi thế (dis-) của từng loại máy chủ là gì?
  • Có bất kỳ hướng dẫn cơ bản về loại để lựa chọn dựa trên các điều kiện?
  • Có sự khác biệt hiệu suất lớn giữa hai?
55
Aron Rotteveel

Như các tài liệu nói, bạn nên sử dụng MPM prefork nếu bạn cần tránh xâu chuỗi để tương thích với các thư viện không an toàn luồng. Thông thường, bất kỳ mô-đun Apache không tầm thường nào (mod_php - hoặc chính xác hơn là vô số các tiện ích mở rộng và thư viện mà nó liên kết đến - là ví dụ chính tắc) có một số loại thư viện không an toàn luồng (hoặc có mã không an toàn trong luồng), vì vậy trừ khi bạn đang sử dụng một bản cài đặt Apache đẹp mắt, tôi sẽ dùng MPM prefork.

40
womble

Giải pháp cổ điển để chạy các tiện ích mở rộng không an toàn trong khi phục vụ số lượng lớn (> 100) kết nối đồng thời là chạy PHP trên fastCGI (mod_fcgid, mô-đun Apache gốc) và các yêu cầu động của proxy đến từ Apache ví dụ chạy MPM Worker.

Điều này sẽ cho phép bạn mở rộng từ vài trăm đến> 1000 kết nối đồng thời với dung lượng bộ nhớ khiêm tốn (4 ~ 8GB) khi phục vụ kết hợp nội dung tĩnh và động.

Tất nhiên, bạn cũng nên điều tra các giải pháp bộ đệm ẩn phía trước như là một phần của việc triển khai tổng thể của bạn (memcached, véc ni).

Ngoài ra, nâng cấp lên Apache 2.4 và bản gốc sự kiện MPM, xử lý đồng thời theo cách cải tiến hơn nhiều (các luồng được loại bỏ khi kết nối, không chờ được thăm dò.)

13
adaptr

Đã khoảng 3 năm kể từ khi câu hỏi được đăng nhưng tôi khuyên bạn nên đi với MPM worker thay vì pre-fork ngay cả khi sử dụng PHP, để có hiệu suất tốt hơn.

Đối với sự khác biệt, pre-fork không phải là luồng do đó máy chủ sẽ tạo ra một quy trình cho mỗi yêu cầu của khách hàng (nó sẽ thay đổi trước các yêu cầu mới để việc không ăn vào thời gian đáp ứng). Vì các yêu cầu là máy chủ trong một quy trình riêng biệt, điều này thường đánh thuế bộ nhớ và CPU của bạn nhiều hơn. Công nhân mang đa luồng nhẹ hơn và sử dụng bộ nhớ tốt hơn.

6
aleemb

Đây là một cái gì đó rất đặc biệt với những gì bạn đang phục vụ. Nếu bạn đang thực hiện nhiều kết nối tĩnh nhỏ, các luồng sẽ nhẹ hơn và nhanh hơn. Nếu bạn chỉ có một vài ứng dụng lớn liên tục xuất hiện, prefork có thể có Edge do sự trưởng thành và ổn định của nó. Tại sao không chỉ thiết lập những gì bạn cần, kiểm tra một cái, trao đổi mô-đun MPM, thử lại, xem cái nào phù hợp với bạn hơn?

2
Marcin

nhu cầu về loại và lưu lượng truy cập bạn sẽ có. Và cũng trước tiên bạn cần hiểu sự khác biệt chính giữa prefork và worker. Hy vọng bài viết dưới đây sẽ giúp bạn tìm ra! http://slashroot.in/how-is-nginx-different-from-Apache

1
sarath