Điểm của uWSGI là gì?


97

Tôi đang xem thông số kỹ thuật của WSGI và tôi đang cố gắng tìm ra cách các máy chủ như uWSGI phù hợp với hình ảnh. Tôi hiểu quan điểm của thông số kỹ thuật WSGI là tách các máy chủ web như nginx khỏi các ứng dụng web giống như thứ gì đó bạn viết bằng Flask . Điều tôi không hiểu là uWSGI dùng để làm gì. Tại sao nginx không thể gọi trực tiếp ứng dụng Flask của tôi? Bình không thể nói WSGI trực tiếp với nó? Tại sao uWSGI cần xen vào giữa chúng?

Có hai mặt trong thông số WSGI: máy chủ và ứng dụng web. UWSGI đứng về phía nào?

Câu trả lời:


131

Được rồi, tôi nghĩ bây giờ tôi hiểu rồi.

Tại sao nginx không thể gọi trực tiếp ứng dụng Flask của tôi?

Bởi vì nginxkhông hỗ trợ thông số kỹ thuật WSGI. Về mặt kỹ thuật, nginx có thể triển khai WSGIthông số kỹ thuật nếu họ muốn, nhưng họ không làm như vậy.

Trong trường hợp đó, chúng ta cần một máy chủ web thực thi thông số kỹ thuật, đó là uWSGImáy chủ dùng để làm gì.

Lưu ý rằng đó uWSGIlà một máy chủ http chính thức có thể tự hoạt động tốt. Tôi đã sử dụng nó trong khả năng này vài lần và nó hoạt động rất tốt. Nếu bạn cần thông lượng siêu cao cho nội dung tĩnh, thì bạn có tùy chọn gắn nginxtrước uWSGImáy chủ của mình . Khi bạn làm vậy, họ sẽ giao tiếp qua một giao thức cấp thấp được gọi là uwsgi.

"Cái gì thế ?! Một thứ khác gọi là uwsgi ?!" bạn hỏi. Vâng, thật khó hiểu. Khi bạn tham chiếu, uWSGIbạn đang nói về máy chủ http. Khi bạn nói về uwsgi(tất cả chữ thường), bạn đang nói về một giao thức nhị phânuWSGI máy chủ sử dụng để nói chuyện với các máy chủ khác nginx. Họ đã chọn một cái tên xấu cho cái này.

Đối với bất kỳ ai quan tâm, tôi đã viết một bài blog về nó với nhiều chi tiết cụ thể hơn, một chút lịch sử và một số ví dụ.


4
Có thể chạy các ứng dụng Flask với Werkzeug làm máy chủ HTTP, nhưng nó chưa được thiết lập sẵn sàng cho sản xuất. uWSGI giải quyết nhiều vấn đề: * HTTP phân tích cú pháp (nhanh hơn trong C) và giao tiếp với ứng dụng WSGI * ra mắt ứng dụng trong xử lý nhiều / chủ đề cho đồng thời tốt hơn * đóng vai trò như một người giám sát các ứng dụng WSGI
Sergey Panfilov

@SergeyPanfilov rắc rối là chúng tôi không biết uwsgi xử lý như thế nào với flask, mỗi quy trình / luồng tạo ra một phiên bản của ứng dụng flask? tôi đã thấy một số triển khai cho tác vụ nền trong flask như Flask-Executor và nó phải liên kết bên trong một yêu cầu. Không thể đặt bên ngoài ngữ cảnh.
TomSawyer

Đọc câu trả lời từ Hasan .. gần đúng với câu trả lời ..... Máy chủ http hầu hết được viết bằng C và chúng không thể chuyển tiếp các yêu cầu http tới phần phụ trợ python .... câu trả lời của bạn chỉ nói về cơ chế
overexchange

25

Trong trường hợp này, NGINX chỉ hoạt động như một proxy ngược và hiển thị các tệp tĩnh không phải tệp động , nó nhận các yêu cầu và ủy quyền chúng tới máy chủ ứng dụng, đó sẽ là UWSGI.

Máy chủ UWSGI chịu trách nhiệm tải ứng dụng Flask của bạn bằng giao diện WSGI. Bạn thực sự có thể làm cho UWSGI lắng nghe trực tiếp các yêu cầu từ internet và xóa NGINX nếu bạn muốn, mặc dù nó chủ yếu được sử dụng sau proxy ngược.

Từ các tài liệu :

uWSGI hỗ trợ một số phương pháp tích hợp với máy chủ web. Nó cũng có khả năng tự phục vụ các yêu cầu HTTP.

WSGI chỉ là một đặc tả giao diện, nói một cách đơn giản, nó cho bạn biết những phương pháp nào nên được triển khai để chuyển các yêu cầu và phản hồi giữa máy chủ và ứng dụng. Khi sử dụng các khung công tác như Flask hoặc Django, điều này được xử lý bởi chính khung công tác đó.

Nói cách khác, WSGI về cơ bản là một hợp đồng giữa các ứng dụng python (Flask, Django, v.v.) và máy chủ web (UWSGI, Gunicorn, v.v.). Lợi ích là bạn có thể thay đổi máy chủ web mà không tốn nhiều công sức vì bạn biết chúng tuân thủ đặc điểm kỹ thuật WSGI, đây thực sự là một trong những mục tiêu, như đã nêu trong PEP-333 .

Python hiện tự hào có một loạt các mô hình ứng dụng web, chẳng hạn như Zope, Quixote, Mua phần mềm, SkunkWeb, PSO, và Twisted Web - để đặt tên chỉ là một vài 1 . Sự lựa chọn đa dạng này có thể là một vấn đề đối với người dùng Python mới, bởi vì nói chung, sự lựa chọn khung web của họ sẽ hạn chế sự lựa chọn của họ về các máy chủ web có thể sử dụng và ngược lại.


20

Máy chủ web truyền thống không hiểu hoặc không có bất kỳ cách nào để chạy các ứng dụng Python. Đó là lý do tại sao máy chủ WSGI ra đời. Mặt khác, Nginx hỗ trợ proxy ngược để xử lý các yêu cầu và chuyển lại phản hồi cho máy chủ Python WSGI.

Liên kết này có thể giúp bạn: https://www.fullstackpython.com/wsgi-servers.html


4
Có ba thứ ở đây: nginx, uwsgi và flask. Làm thế nào để tất cả phù hợp với nhau trong ngữ cảnh của thông số kỹ thuật WSGI? Nginx là máy chủ và uwsgi là ứng dụng hay uwsgi là máy chủ và flask là ứng dụng?
d512

uWSGI là máy chủ và flask là ứng dụng.
Rafiqul Hasan,

Nếu bạn không phiền, hãy xem câu trả lời của tôi cho câu hỏi của chính tôi và xem bạn nghĩ gì.
d512

4
Tại sao máy chủ web không hiểu các ứng dụng Python? Nó có thể hiểu PHP, tại sao không phải là Python hoặc các ngôn ngữ khác?
jdogg

0

Nói một cách dễ hiểu, chỉ cần nghĩ về một sự tương tự khi bạn đang chạy ứng dụng CGI hoặc PHP với máy chủ web Nginx. Bạn sẽ sử dụng các trình xử lý tương ứng như php-fpm để chạy các tệp này vì máy chủ web, ở dạng gốc của nó không hiển thị các định dạng này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.