2011-10-12 30 views
55

Bất cứ ai có thể vui lòng giải thích ưu/nhược điểm khi sử dụng WSGI VS uWSGI với Nginx.WSGI vs uWSGi với Nginx

Hiện tại tôi đang xây dựng một máy chủ sản xuất cho trang web Django mà tôi đã chuẩn bị nhưng không thể quyết định có nên đi với WSGI hoặc uWSGI hay không. Bạn có thể vui lòng giải thích chi tiết những gì phân biệt từng cấu hình? Cấu hình nào nên mở rộng nhất?

Cảm ơn trước

+18

WSGI là đặc điểm kỹ thuật. uWSGI cung cấp việc thực hiện đặc tả WSGI. Bạn không thể so sánh chúng. Bạn chỉ có thể so sánh các triển khai khác nhau. –

+0

http: // segmentfault.com/a/1190000004294634 – zx1986

Trả lời

2

This blog post là một so sánh rất chi tiết của rất nhiều máy chủ WSGI Python, với một bản tóm tắt và một số khuyến nghị ở cuối.

+2

Và cũng sử dụng cấu hình cho một số máy chủ thực sự tinh vi và khiến chúng trở nên tồi tệ hơn chúng có thể. Người ta phải cẩn thận những gì người ta đọc trong so sánh đó. –

23

Nói chung tốt nhất là chạy Python trong một quy trình riêng biệt từ máy chủ web chính của bạn. Bằng cách đó, máy chủ web có thể có rất nhiều luồng nhỏ phục vụ nội dung tĩnh thực sự nhanh, trong khi các quy trình Python riêng biệt của bạn sẽ lớn và nặng và mỗi trình chạy trình thông dịch Python của riêng chúng. Vì vậy, đồng bằng WSGI là xấu, bởi vì nó bloats mỗi một trong những chủ đề nginx của bạn với một thông dịch viên Python lớn. Sử dụng flup hoặc gunicorn hoặc uWSGI phía sau nginx tốt hơn nhiều, vì giải phóng nginx để phân phát nội dung và cho phép bạn chọn số lượng chuỗi nginx nhỏ để chạy, độc lập với việc bạn chọn bao nhiêu chuỗi Python nặng nội dung động. Mọi người dường như rất hài lòng với gunicorn vào lúc này, nhưng bất kỳ tùy chọn nào trong số ba tùy chọn này đều hoạt động tốt.

Về sau, nó cũng giúp bạn di chuyển Python sang máy chủ khác khi tải bắt đầu trở nên nghiêm trọng.

+1

Có một chút nhầm lẫn với câu trả lời của bạn. Tôi không thể thấy rằng anh ta đã đề cập đến việc chạy bất kỳ loại triển khai WSGI nào bên trong nginx. Ông đã tham khảo trang wsgi.org chính. So sánh ban đầu của mình giữa WSGI và uWSGI là một chút ngớ ngẩn ở nơi đầu tiên bởi vì uWSGI là một sự triển khai đặc tả của WSGI. Bản thân bạn đã sử dụng thuật ngữ chung của WSGI theo một cách khó hiểu khi nói rằng 'nó bloats mọi chủ đề nginx của bạn với một trình thông dịch Python lớn'. Bản thân đặc tả của WSGI không thể thực hiện điều đó, chỉ các triển khai mới có thể thực hiện được. –

+1

Nó có thể có ý nghĩa nếu chúng ta so sánh nginx + mod_wsgi (mô-đun có thể cắm) và nginx + uWSGI (thùng chứa máy chủ ứng dụng). – clime

+0

Vì vậy, khi nói đến việc sử dụng Nginx để chạy các ứng dụng web Python, vì mod_wsgi của Manlio Perillo là phần mềm độc hại và không được khuyến nghị, các giải pháp tốt là WSGI với gunicorn hoặc uWSGI, hoặc FastCGI với Flup? – Gulbahar

68

Ok, mọi người nhầm lẫn này là do thiếu chi tiết từ nhiều nguồn, và đặt tên cho các giao thức này, và thực tế WSGI là gì.

Tóm tắt:

  1. WSGI và uwsgi cả LÀ giao thức, không phải máy chủ. Nó được sử dụng để giao tiếp với các máy chủ web để cân bằng tải và đặc biệt là để tận dụng các tính năng bổ sung mà HTTP tinh khiết không thể cung cấp. Cho đến nay Nginx và Cherokee đã thực hiện giao thức này.
  2. uWSGI là một máy chủ và một trong các giao thức mà nó triển khai là WSGI (không nhầm lẫn giữa giao thức uwsgi với máy chủ uWSGI). WSGI là một Python specification. Có một số triển khai đặc tả của WSGI và nó được dự định sẽ được sử dụng cho nhiều hơn chỉ các máy chủ ứng dụng/máy chủ web, nhưng có khá nhiều máy chủ ứng dụng WSGI (ví dụ: CherryPy, cũng sẽ có một máy chủ web tương thích WSGI sản xuất , nếu bạn chưa nhầm lẫn rồi!).
  3. So sánh uwsgi với WSGI là so sánh cam với táo.
+3

Typo: "1. ** uwsgi ** là giao thức không phải là máy chủ". -> "1. ** WSGI ** là giao thức không phải là máy chủ". – Aman

+6

Trên thực tế, những gì tôi đã viết cho 1 là chính xác, nhưng đó là sự thật WSGI là một giao thức cũng như uwsgi, do đó, cả hai báo cáo bạn đã viết là chính xác :). Tất nhiên, không có phần còn lại của bối cảnh 1. Đó là giao thức được sử dụng bởi máy chủ uWSGI. http://wiki.nginx.org/HttpUwsgiModule, - "Đừng nhầm lẫn giữa giao thức uwsgi với máy chủ uWSGI (nói lên giao thức uwsgi)" –

+3

Ah, được rồi. Tôi đã nghĩ rằng bạn đang cố gắng để vẽ một contarst giữa tuyên bố 1. "wsgi là một giao thức .." và 2. "uwsgi là một máy chủ thực hiện các giao thức". – Aman

12

Tôi tin rằng ngay tại đây http://flask.pocoo.org/docs/deploying/uwsgi/ là câu trả lời hay để làm sáng tỏ sự nhầm lẫn. Câu hỏi không phải là ngớ ngẩn, xảy ra với bất kỳ ai nhìn thấy hai cụm từ và không có thông tin trước về cách mọi thứ hoạt động bên ngoài thế giới mod_PHP (ví dụ: không có gì chống lại php hoặc folks)

Trang web này hoạt động tốt để giải thích cần thiết và sự khác biệt cũng như ví dụ triển khai tốt cho nginx là gì.

Các vấn đề liên quan