2010-05-30 16 views
21

Tôi đang cố gắng triển khai ứng dụng web Catalyst nhỏ của mình bằng cách sử dụng Plack/Starman. Tất cả các tài liệu hướng dẫn dường như đề nghị tôi muốn sử dụng điều này kết hợp với nginx. Những lợi ích của việc này là gì? Tại sao không sử dụng Starman thẳng lên trên cổng 80?Tại sao sử dụng nginx với Catalyst/Plack/Starman?

Trả lời

34

Nó không phải là nginx nói riêng, nhưng bạn muốn có một số loại máy chủ proxy frontend cho máy chủ ứng dụng của bạn cho một vài lý do:

  1. Vì vậy, bạn có thể chạy các máy chủ trên một Catalyst cổng cao, như một người dùng bình thường, trong khi chạy máy chủ giao diện trên cổng 80.

  2. Để phân phát tệp tĩnh (các tài nguyên thông thường như hình ảnh, JS và CSS, cũng như bất kỳ loại tải xuống nào bạn có thể muốn sử dụng X -Sendfile hoặc X-Accel-Redirect với) mà không cần kết thúc quá trình perl trong suốt thời gian tải xuống.

  3. Điều này giúp mọi thứ trở nên dễ dàng hơn nếu bạn muốn chuyển sang cấu hình phức tạp hơn liên quan đến ví dụ: Edge Side Bao gồm, hoặc có máy chủ web phục vụ trực tiếp từ memcached hoặc mogilefs (cả hai thứ mà nginx có thể làm), hoặc một cấu hình cân bằng tải/HA.

+0

Tôi có một câu hỏi tiếp theo, Hobbs: nếu bạn đang sử dụng một khuôn khổ như Dancer hoặc Catalyst, tại sao bạn cần starman ở tất cả? Bạn không thể gửi yêu cầu đến máy chủ mặc định được Plack/Dancer cung cấp? –

+2

@Vijay Máy chủ mặc định được Dancer sử dụng và Catalyst nếu bạn chạy tập lệnh máy chủ không có tùy chọn '-f' hoặc' -k', chỉ có thể xử lý một yêu cầu duy nhất tại một thời điểm, vì vậy nó không tuyệt vời cho quá trình sản xuất. Mặt khác, nếu bạn chạy tập lệnh máy chủ Catalyst với '-f', nó sử dụng là Starman :) – hobbs

+1

Ah, tuyệt vời! Điều đó cuối cùng làm sáng tỏ điều cuối cùng tôi đã cố gắng để hiểu.Tôi đã viết lên lời giải thích của tôi cho nginx/starman/dancer stack ở đây (nếu bạn có bất kỳ ý kiến ​​bổ sung/thông tin chi tiết mà tôi bỏ qua, tôi thực sự sẽ đánh giá cao chúng): http://stackoverflow.com/questions/12127566/an-explanation -of-the-nginx-starman-dancer-web-stack –

9

Tôi hỏi câu hỏi này trên #plack và nhận được câu trả lời sau đây từ @nothingmuch (tôi đã thêm định dạng):

Với nginx bạn có thể thiết lập loadbalancing/failover loại thứ. Nếu trang web nhỏ/đơn giản, có thể là quá mức cần thiết.

Tôi không biết bất kỳ bất kỳ bất lợi nào của Starman có thể có. Có thể nếu bạn có nhiều lần truy cập trên các tệp tĩnh nginx sẽ sử dụng ít bộ nhớ/bộ nhớ để xử lý chúng, nhưng không đáng kể trong ứng dụng web điển hình. Tải xuống lớn có thể kết nối công nhân Starman cho tệp tĩnh lượt tải xuống. (Có lẽ không, với sendfile.) Đó là về tất cả tôi có thể nghĩ đến.

... Thiết lập chuyển đổi dự phòng có thể thật tuyệt nếu bạn muốn nâng cấp mà không có thời gian ngừng hoạt động. ("Thất bại" phiên bản cũ .)

3

Một lý do khác là một máy chủ frontend nhẹ (thậm chí Apache là OK) tiêu thụ ít dung lượng bộ nhớ cho mỗi kết nối là một quá trình Starman điển hình (một vài MB so với hàng chục hoặc hơn 100 MB). Vì kết nối được mở trong một thời gian, đặc biệt nếu bạn muốn sử dụng các kết nối liên tục, bạn có thể hỗ trợ một số lượng lớn các kết nối đồng thời với RAM ít hơn nhiều. Chỉ đảm bảo rằng kích thước bộ đệm của máy chủ proxy phía trước đủ lớn để tải phản hồi HTTP điển hình ngay lập tức từ chương trình phụ trợ. Sau đó, chương trình phụ trợ miễn phí để xử lý yêu cầu tiếp theo.