2008-10-08 36 views
5

Để làm giảm tải của Apache, mọi người thường đề nghị sử dụng lighttpd để phân phát nội dung tĩnh.apache + lighttpd front-proxy concept

ví dụ: http://www.linux.com/feature/51673

Trong thiết lập này, Apache chuyển yêu cầu nội dung tĩnh trở lại lighttpd qua mod_proxy, trong khi phân phát các yêu cầu động.

Câu hỏi của tôi là: làm cách nào để giảm tải trên máy chủ? Vì bạn vẫn có một tiến trình apache sinh ra cho mọi yêu cầu đi vào, điều này ảnh hưởng tích cực đến tải như thế nào? Từ những gì tôi có thể thấy kích thước của quá trình Apache proxy yêu cầu của nó thông qua lighttpd là lớn như nó sẽ được nếu nó được phục vụ các tập tin riêng của mình.

Trả lời

8

Chạy Lighttpd đằng sau Apache để phục vụ các tập tin tĩnh chắc chắn dường như Braindead để tôi. Apache vẫn phải giải nén các gói HTTP và phân tích cú pháp yêu cầu thông qua cây phân tích cú pháp của nó, gửi các yêu cầu proxy, và sau đó Lighttpd phải giải nén lại, nhấn hệ thống tệp và gửi các tệp trở lại thông qua Apache. Tôi đã không bao giờ nghe nói về bất cứ ai sử dụng một thiết lập như thế này trong sản xuất.

Những gì bạn sẽ thấy, là những người sử dụng máy chủ web nhẹ như Nginx làm máy chủ giao diện người dùng để phân phối các tệp tĩnh và URL động proxy tới Apache.Hoặc, bạn có thể chạy Varnish hoặc Squid làm lối vào proxy ngược bộ đệm, để tất cả các tệp tĩnh lưu lượng truy cập cao của bạn (tức là hình ảnh, CSS, v.v. bất kỳ trang động nào bạn sẵn sàng gửi tiêu đề thân thiện với bộ nhớ cache) phục vụ hết bộ nhớ.

Apache cũng có thể được tối ưu hóa để phân phối tệp tĩnh - vì vậy thường khi tôi nghe mọi người phàn nàn về Apache, họ thực sự không biết cách định cấu hình nó. Họ đã từng sử dụng MPK prefork (so với luồng hoặc công nhân) và có tất cả các loại mô-đun được kích hoạt (thường là chúng chạy từ gói Apache bồn rửa nhà bếp phân phối Linux xây dựng mọi thứ dưới dạng mô đun và mặc định để bật 10-20 mô-đun trở lên). Điều chỉnh Apache bằng cách tắt các mô-đun không cần thiết/các tính năng ngu ngốc như hỗ trợ cho .htaccess (làm cho Apache quét hệ thống tập tin theo mọi yêu cầu!) Trước tiên. (Bạn cũng có thể chạy hai phiên bản Apache, với Apache "nhẹ" làm giao diện người dùng cho Apache "nặng" cho các yêu cầu động ... có thể giao diện người dùng của bạn đã được tạo luồng nhưng phần cuối của bạn là tiền bối vì bạn phải chạy thread-unsafe module bên ngoài như mod_php)

Re:.

vì bạn vẫn có một quá trình apache sinh ra cho mọi yêu cầu mà đến trong, làm thế nào thực hiện điều này một cách tích cực tác động tải? Từ những gì tôi có thể thấy kích thước của quá trình Apache ủy quyền yêu cầu thông qua lighttpd của nó là lớn vì nó sẽ là nếu nó đang phục vụ chính tệp .

Nếu bạn đang tạo ra các quy trình trên mọi yêu cầu, thì điều đó có nghĩa là bạn đang sử dụng MPC prefork. Hãy ghi nhớ rằng khi hệ điều hành báo cáo mức sử dụng bộ nhớ cho từng quy trình này, không phải tất cả bộ nhớ đó đều có dây, rất nhiều các quá trình đó không hoạt động. Và khi bạn đang nói về tốc độ, bạn quan tâm nhiều hơn với yêu cầu phân tích cú pháp và các chi nhánh mã nội bộ cho một yêu cầu cụ thể (xử lý bao nhiêu máy chủ đang hoạt động?) So với việc sử dụng bộ nhớ được báo cáo bởi hệ điều hành. Ví dụ, nếu bạn kích hoạt một cái gì đó như mod_php, thì mỗi quy trình công nhân đó sẽ tăng lên ngay lập tức khoảng 20-40M (tùy thuộc vào những gì được kích hoạt trong trình thông dịch PHP của bạn), nhưng điều đó không có nghĩa là Apache sử dụng bộ nhớ đó trên các yêu cầu tĩnh. Tất nhiên nếu bạn đang tối ưu hóa máy chủ của bạn cho đồng thời tối đa trên các tập tin tĩnh nhỏ, sau đó cho phép mod_php vẫn sẽ rất xấu, bạn sẽ không thể phù hợp với gần như nhiều quá trình prefork vào RAM. Tôi có lẽ có thể đưa ra một "cấu hình cơn ác mộng" cho Apache rằng sẽ làm cho nó thực sự chậm hơn để phân phối các tệp tĩnh hơn proxy các yêu cầu đó đến một Lighttpd phụ trợ, nhưng nó sẽ liên quan đến việc bật các tính năng đắt tiền như .htaccess trong Apache bị vô hiệu hóa trong Lighttpd, vì vậy nó sẽ không thực sự công bằng.

0

Bạn không có quy trình Apache sinh ra cho mỗi yêu cầu - các tệp tĩnh (hình ảnh và nội dung tương tự) được tìm nạp trực tiếp bằng lighttpd.

1
  1. Nếu bạn vẫn có quyền để phục vụ nội dung tĩnh và động từ cùng máy (như họ trong referenced article bạn làm), sau đó tôi thực sự thấy không có điểm trong thiết lập đó.
  2. Có thể nó làm giảm tải của Apache, vì nó không phải làm IO vào đĩa, nhưng nó sẽ làm tăng tải Lighttpd trên cùng một máy và do đó giảm tải có sẵn xuống apache. ..
  3. Có thể truy cập Lighttpd IO nhẹ hơn so với Apache 1.3, nhưng tại sao không chỉ chuyển sang Apache 2 hoặc Lighttpd hoàn toàn? Và nếu hiệu suất thực sự bắt đầu hút, hãy lưu trữ các tệp tĩnh trên một máy khác (media.yourdomain.com).

tôi giới thiệu nhỏ để làm thế nào bạn có thể làm cho một thiết lập performant được tìm thấy ở đây: Deploying Django -> cuộn xuống Scaling một số trang trước khi kết thúc

0

Tôi không biết nhiều về hoạt động nội bộ của Apache, nhưng một lời giải thích tôi đã thấy là về áp lực bộ nhớ. Tóm lại, Apache cố gắng cân bằng bộ nhớ mà nó sử dụng cho bộ nhớ đệm và cho các trang động; nhưng thường kết thúc với quá nhiều bộ nhớ cache và quá ít cho các ứng dụng. Nếu bạn tách chúng thành các quy trình khác nhau, mỗi quy trình sẽ tối ưu hóa cho loại tải.

Hiện tại, những gì tôi đang làm đang sử dụng nginx làm giao diện người dùng. Nó thực sự nhanh và nhẹ, và được thiết kế đặc biệt như một proxy lối vào; mà còn phục vụ các tệp tĩnh. Trong thực tế, vì nó cũng có thể gọi các quy trình FastCGI, bạn có thể loại bỏ Apache và vẫn nhận được lợi ích của quá trình chia nhỏ tệp/ứng dụng. (Và có thêm một số memcached magic trông hoàn toàn thiên tài)

(Vâng, lighttpd cũng có thể được sử dụng như là lối vào để Apache và/hoặc FastCGI)

0

Sử dụng Apache MPM Worker fastcgi điều này sẽ làm giảm mức sử dụng bộ nhớ máy chủ của bạn. Nhân viên MPM phục vụ nội dung tĩnh tốt hơn sau đó Prefork và gần như ngang bằng với lighttpd khi nói đến nội dung tĩnh.

+0

Quy trình CGI sẽ tiêu thụ phần còn lại của sự khác biệt;) Điều này sẽ không tạo nên sự khác biệt nào cả. –