Thứ hai, 28/10/2013 | 00:00 GMT+7

So sánh các web server cho các ứng dụng web dựa trên Python

Trong bài viết này, ta sẽ nói về ba thứ chính: Python, Server Web và quan trọng nhất là các bit và bob ở giữa hai thứ.


Bỏ chuyện cười sang một bên, bài viết khá dài này có vẻ không tốt cho một số người đang tìm kiếm hướng dẫn hoặc câu trả lời nhanh chóng. Thật không may, không giống như hầu hết mọi thứ trong thế giới Python, khi nói đến việc chọn một ngăn xếp server production để triển khai ứng dụng của bạn, không có một– và tốt nhất là chỉ có một cách duy nhất để làm điều đó .

Tuy nhiên, điều này không nên làm bạn sợ hãi. Sau khi hoàn thành bài viết này, bạn sẽ có kiến thức tốt về cách các web server khác nhau hoạt động và xử lý tác vụ nói chuyện với các ứng dụng web dựa trên Python. Sau khi đánh giá nhu cầu và yêu cầu của bạn, bạn có thể quyết định sử dụng server nào.

Giao diện cổng web server Python v1.0 (WSGI)


Hiểu các vấn đề


Ngày nay, tồn tại các web server (hoặc module cho server ) với số lượng ngày càng tăng được thiết kế đặc biệt (hoặc điều chỉnh) để hoạt động với các ứng dụng web Python thay thế cho nhau. Tuy nhiên, điều này không phải lúc nào cũng đúng như vậy. Ngày xưa, các nhà phát triển không thực sự có khả năng chuyển đổi web server theo ý muốn một cách dễ dàng và mỗi lần chuyển đổi đều có chi phí do dependencies và hạn chế. Khi quyết định về một khuôn khổ để xây dựng, bạn cũng sẽ quyết định, không phải lúc nào cũng tự nguyện cũng như không có ý thức, trên (các) server mà bạn có thể sử dụng để phục vụ ứng dụng. Điều này là do thiếu sự tồn tại của đặc điểm kỹ thuật giao diện được chấp nhận rộng rãi: một điểm chung mà các ứng dụng (khuôn khổ) và web server giống nhau sẽ thích ứng và sử dụng để giao tiếp, cho phép các thành phần có thể swap cho nhau khi cần thiết mà có thể không thay đổi mã.

Sự ra đời của Tiêu chuẩn


Vào đầu thế kỷ này, những nỗ lực đã được thực hiện để giải quyết vấn đề cuối cùng với việc trình bày Đề xuất cải tiến Python ( PEP ) 333 cho cộng đồng.

Từ PEP ( Đề xuất cải tiến Python ) 333 :

This document specifies a proposed standard interface between web servers and Python web applications or frameworks, to promote web application portability across a variety of web servers. 

Như đã giải thích trong PEP, tiêu chuẩn mới này (và được) nhằm cho phép tính di động trên (và giữa) server [web] và ứng dụng [web Python]. Các tính năng mạnh mẽ của tiêu chuẩn và sự áp dụng rộng rãi của nó so với những tiêu chuẩn trước đây dẫn đầu cho ngày hôm nay: một thế giới mà nhiều (có lẽ quá nhiều) web server sẵn sàng thực hiện công việc cho bạn.

So sánh


Trong phần so sánh các web server dành cho các ứng dụng web dựa trên Python này, ta sẽ nói về một số lựa chọn có sẵn và điều gì làm cho chúng nổi bật. Mục đích ở đây là để người đọc có tầm nhìn rõ ràng hơn và cung cấp trợ giúp để so khớp các server với nhu cầu tùy chỉnh của ứng dụng để tìm ra cái . Do có rất nhiều tùy chọn (xuất hiện nhiều hơn mỗi ngày!), Ta sẽ lọc theo cách của bạn và nói về những tùy chọn "đặc biệt" theo nhiều cách: phổ biến, vững chắc hoặc làm điều gì đó khác biệt (hoặc tốt hơn) so với nghỉ ngơi.

Lưu ý: Tôi muốn khuyên bạn, độc giả, hãy cảnh giác với các tiêu chuẩn thiên vị và lừa dối có xu hướng không phản ánh các điều kiện của môi trường production thực tế. Thật không may, những [bài báo] đó không thực sự có nhiều ý nghĩa khi nói đến việc chọn một web server để production , điều này cũng rất khó có khả năng trở thành phần gây ra tắc nghẽn. Do đó, bạn được khuyên nên đánh giá và hiểu nhu cầu của bản thân và sau đó thử các lựa chọn khác nhau, hạn chế các con số suy đoán để tránh các kịch bản thảm họa thực sự trong tương lai.

Server Web (Thứ tự bảng chữ cái)


Server CherryPy WSGI


Nó là gì?

CherryPy thực sự là một khuôn khổ web. Tuy nhiên, nó là một hoàn toàn khép kín - nghĩa là nó có thể tự chạy, kể cả trong các kịch bản production mà không cần phần mềm bổ sung. Điều này đạt được nhờ vào web server tương thích WSGI, HTTP / 1.1 của riêng nó. Dự án CherryPy mô tả nó như một “ Server HTTP chung tốc độ cao, sẵn sàng production , gộp stream , chung”. Vì nó là một server WSGI, nó cũng được dùng để phục vụ bất kỳ ứng dụng WSGI Python nào khác mà không bị ràng buộc với khung phát triển ứng dụng của CherryPy.

Tại sao bạn nên cân nhắc sử dụng nó?

  • Nó nhỏ gọn và đơn giản.
  • Nó có thể phục vụ bất kỳ ứng dụng web Python nào chạy trên WSGI.
  • Nó có thể xử lý các file tĩnh và nó chỉ được dùng để phục vụ các file và folder một mình.
  • Nó được gộp theo chuỗi.
  • Nó đi kèm với sự hỗ trợ cho SSL.
  • Đây là một giải pháp thay thế Python thuần túy dễ thích ứng, dễ sử dụng, mạnh mẽ và tin cậy .

Gunicorn

Nó là gì?

Gunicorn là một web server độc lập cung cấp khá nhiều chức năng theo cách dễ vận hành. Nó sử dụng mô hình pre-fork - nghĩa là một quy trình chủ trung tâm (Gunicorn) được giao nhiệm vụ quản lý các quy trình công nhân đã khởi tạo (các loại khác nhau), sau đó xử lý và giải quyết các yêu cầu trực tiếp. Và tất cả điều này có thể được cấu hình và điều chỉnh để phù hợp với nhu cầu của bạn và các kịch bản production đa dạng.

Tại sao bạn nên cân nhắc sử dụng nó?

  • Nó hỗ trợ WSGI và được dùng với bất kỳ ứng dụng và khuôn khổ WSGI nào đang chạy Python.
  • Nó cũng được dùng để thay thế cho Paster (ví dụ: Pyramid), Server phát triển của Django, web2py, v.v.
  • Cung cấp sự lựa chọn của các loại / cấu hình công nhân khác nhau và quản lý quy trình công nhân tự động.
  • HTTP / 1.0 và HTTP / 1.1 (Keep-Alive) hỗ trợ thông qua các worker đồng bộ và không đồng bộ.
  • Đi kèm với hỗ trợ SSL
  • Có thể mở rộng với móc.
  • Nó trong suốt và có kiến trúc rõ ràng.
  • Hỗ trợ các version Python 2.6, 2.7, 3, 3.2, 3.3

Tornado ( Server HTTP qua wsgi.WSGIContainer)


Nó là gì?

Tornado là một khung phát triển ứng dụng và một thư viện mạng được thiết kế để xử lý các hoạt động không đồng bộ, cho phép server duy trì nhiều kết nối mở. Nó cũng đi kèm với một server WSGI mà các ứng dụng WSGI Python khác (và các khuôn khổ) có thể sử dụng để chạy.

Tại sao bạn nên cân nhắc sử dụng nó?

  • Nếu bạn đang xây dựng trên khung Tornado hàng đầu; hoặc là
  • Ứng dụng của bạn cần chức năng không đồng bộ.

Mặc dù trong những trường hợp này, bạn có thể cần chọn server WSGI của Tornado cho dự án của bạn , bạn cũng có thể chọn sử dụng Gunicorn với các công nhân [Không đồng bộ] của Tornado.

Web xoắn


Nó là gì?

Twisted Web là web server đi kèm với thư viện mạng Twisted. Trong khi bản thân Twisted là “một công cụ mạng hướng sự kiện”, server Twisted Web chạy trên WSGI và nó có khả năng cung cấp năng lượng cho các ứng dụng web Python khác.

Tại sao bạn nên cân nhắc sử dụng nó?

  • Nó là một sản phẩm đơn giản để sử dụng, ổn định và trưởng thành.
  • Nó sẽ chạy các ứng dụng Python WSGI.
  • Nó có thể hoạt động giống như một khung web server Python, cho phép bạn lập trình nó với ngôn ngữ cho các mục đích phục vụ HTTP tùy chỉnh.
  • Nó cung cấp khả năng tạo mẫu đơn giản và nhanh chóng thông qua Python Scrips (.rpy) được thực thi theo yêu cầu HTTP.
  • Nó đi kèm với khả năng proxy và Reverse Proxy .
  • Nó hỗ trợ Server ảo.
  • Nó thậm chí có thể phục vụ Perl, PHP và các thiên thạch thông qua API twist.web.twcgi.

uWSGI


Nó là gì?

Bất chấp các quy ước đặt tên rất khó hiểu, bản thân uWSGI là một dự án rộng lớn với nhiều thành phần, nhằm cung cấp một hệ thống full [software] stack để building hosting services . Một trong những thành phần này, server uWSGI, chạy các ứng dụng Python WSGI. Nó có khả năng sử dụng nhiều giao thức khác nhau, bao gồm cả giao thức dây uwsgi của riêng nó, gần giống với SCGI. Để hoàn thành (dễ hiểu) nhu cầu sử dụng các server HTTP độc lập ở phía trước server ứng dụng, Nginx và Cherokee web server được modularised để hỗ trợ giao thức uwsgi uWSGI ‘s (hiệu suất tốt nhất) để có quyền kiểm soát trực tiếp các quá trình của nó.

Tại sao bạn nên cân nhắc sử dụng nó?

  • uWSGI đi kèm với bộ điều hợp WSGI và nó hỗ trợ đầy đủ các ứng dụng Python chạy trên WSGI.
  • Nó liên kết với libpython. Nó tải mã ứng dụng khi khởi động và hoạt động giống như một trình thông dịch Python. Nó phân tích cú pháp các yêu cầu đến và gọi Python có thể gọi được.
  • Nó hỗ trợ trực tiếp cho web server NGINX phổ biến (cùng với Cherokee * và lighttpd).
  • Nó được viết bằng C.
  • Các thành phần khác nhau của nó có thể làm được nhiều việc hơn là chạy một ứng dụng, điều này có thể hữu ích cho việc mở rộng.
  • Hiện tại (cuối năm 2013), nó đang được phát triển tích cực và có chu kỳ phát hành nhanh chóng.
  • Nó có nhiều động cơ khác nhau để chạy các ứng dụng (không đồng bộ và đồng bộ).
  • Nó có thể nghĩa là bộ nhớ thấp hơn để chạy.

Server WSGI phục vụ bàn


Nó là gì?

Waitress là một server WSGI thuần Python. Thoạt nhìn, nó có vẻ không khác nhiều so với nhiều người khác; tuy nhiên, triết lý phát triển của nó tách biệt nó với phần còn lại.Mục đích của nó là giảm bớt gánh nặng production (và phát triển) do web server gây ra cho các nhà phát triển ứng dụng web Python. Nhân viên phục vụ đạt được điều này bằng cách vô hiệu hóa các vấn đề do sự khác biệt giữa nền tảng (ví dụ: Unix so với Windows), trình thông dịch (CPython so với PyPy) và Python (phiên bản 2 so với 3).

Tại sao bạn nên cân nhắc sử dụng nó?

  • Đây là một giải pháp Python thuần túy, rất gọn gàng.
  • Nó hỗ trợ HTTP / 1.0 và HTTP / 1.1 (Keep-Alive).
  • Nó đã sẵn sàng để được triển khai cho production với một loạt các nền tảng hỗ trợ.
  • Không giống như CherryPy, nó thực sự độc lập với khuôn khổ về bản chất.
  • Nó chạy trên Windows và Unix, và trên trình thông dịch CPython và PyPy (chỉ Unix).
  • Nó hỗ trợ version Python 2 và 3.

Mô-đun cho Server độc lập


mod_python với bộ điều hợp WSGI (Apache) (Nhúng Python)

Nó là gì?

Nói một cách đơn giản, mod_python là một module Apache có thể nhúng Python vào trong chính server . Mặc dù không được khuyến khích vì nhiều lý do (dự án đã chết và lỗi thời chỉ với ý định rất gần đây là tiếp tục phát triển của tác giả root ), nó được dùng để chạy các ứng dụng WSGI trên Apache thông qua shell bọc.

Tại sao bạn nên cân nhắc sử dụng nó?

Bạn có thể cần lập trình và mở rộng Apache bằng Python vì một lý do cụ thể.

mod_wsgi (Apache) (Nhúng Python)

Nó là gì?

Là một module tuân theo WSGI, mod wsgi cho phép bạn chạy các ứng dụng Python WSGI trên Apache HTTP Server. Nó đạt được điều này theo hai cách: cách thứ nhất tương tự như cách mod python hoạt động, bằng cách nhúng mã và thực thi nó trong tiến trình con. Phương pháp khác cung cấp chế độ hoạt động dựa trên daemon, theo đó ứng dụng WSGI có quy trình riêng biệt, được quản lý tự động bởi mod_wsgi.

Tại sao bạn nên cân nhắc sử dụng nó?

  • Kinh nghiệm hiện có với Apache có thể nghĩa là một môi trường production ổn định cho các hoạt động của bạn khi chạy Python. Điều này một mình có thể tiết kiệm trong ngày, làm cho nó đáng giá.
  • Nếu bạn đang phụ thuộc vào Apache hoặc muốn tận dụng các module mở rộng ổn định và phong phú của nó, đó sẽ là cách tốt nhất.
  • Nó có thể chạy các ứng dụng dưới những user hệ thống khác nhau để bảo mật hơn nữa.
  • Nó là một phần mềm tin cậy đã được thử và thử nghiệm.
  • World Wide Web chứa tấn thông tin và Q & A của liên quan đến nó mà có thể giúp bạn tiết kiệm rất nhiều thời gian khi bạn gặp một vấn đề production thực tế.
  • Và nó đi kèm với tất cả các chức năng khác mà Apache cung cấp.

<div class = “author”> Gửi bởi: <a href=osystemhttps://twitter.com/ostezerosystem> OS Tezer </div>


Tags:

Các tin liên quan

Cách sử dụng node.js, request và cheerio để thiết lập Web-Scraping đơn giản
2013-09-16
Cách tạo một ứng dụng web nhỏ với CakePHP trên VPS (Phần 1)
2013-08-23
Cách mở rộng ứng dụng web trên Ubuntu 12.10
2013-04-11