Thứ hai, 19/08/2013 | 00:00 GMT+7

So sánh server Django: server phát triển, Mod_WSGI, uWSGI và Gunicorn

Khi nói đến Server Django có khá nhiều sự lựa chọn. Có thể khó để biết cài đặt nào phù hợp với bạn. Mặc dù mỗi cài đặt đều khác nhau, nhưng chúng đều có những ưu điểm và nhược điểm riêng. Trong bài viết này, ta sẽ cố gắng khám phá các Server Django phổ biến nhất và chỉ ra những ưu nhược điểm liên quan đến chúng.


Một - Server phát triển Django


Server phát triển Django được đóng gói với Django và có thể chạy bằng lệnh sau:

django-admin.py runserver 

Điều này chạy một web server nhẹ chạy theo mặc định bằng cách sử dụng localhost trên cổng 8000. Bạn có thể sửa đổi điều này bằng cách chuyển thông tin như sau vào làm tham số được thêm vào:

django-admin.py runserver 10.0.0.150:8001 

Điều này sẽ làm cho web server đang cung cấp ứng dụng Django của bạn bằng IP 10.0.0.150 trên cổng 8001. Mặc dù có nhiều tùy chọn khác mà bạn có thể chuyển vào, nhưng cách trên là phổ biến nhất.

Server phát triển Django chỉ là một server phát triển. Nó không dành cho môi trường production , như đã nêu trong tài liệu Django chính thức ở đây . Tuy nhiên, ý nghĩa của nó là được sử dụng như một cách dễ dàng để kiểm tra ứng dụng của bạn trong môi trường phát triển mà không cần thêm chi phí cài đặt / cấu hình đầy đủ trên web server .

Server phát triển Django tỏa sáng ở chỗ nó có trọng lượng nhẹ và dễ sử dụng. Nó phục vụ các file tĩnh của bạn mà không cần phải thu thập chúng đến bất kỳ vị trí cụ thể nào. Server phát triển cũng khởi động lại mỗi khi bạn lưu file của bạn . Điều này rất hữu ích vì hầu hết tất cả các web server dành cho Python đều lưu vào cache ứng dụng của bạn để loại bỏ nhu cầu về thời gian khởi động, nhưng yêu cầu khởi động lại nếu mã thay đổi để có thể lưu vào bộ nhớ đệm một bản sao mới.

Nhược điểm rõ ràng của server phát triển Django là nó chưa sẵn sàng production và chỉ nên được sử dụng cho mục đích phát triển. Nó không được thực hiện để xử lý nhiều yêu cầu hoặc tải vào bất kỳ thời điểm nào. Ngoài ra, nó là một lựa chọn tuyệt vời cho những người đang tìm kiếm một cách nhanh chóng để bắt đầu và chạy với Django.

Hai - Mod_WSGI


Mod_wsgi là module bộ điều hợp Python WSGI phổ biến nhất cho Apache và là một phương pháp được khuyến khích cao nếu bạn đang sử dụng Apache làm web server của bạn .

Khi bạn đã cài đặt mod_wsgi, việc thực hiện khá đơn giản. Chỉ cần thêm dòng sau vào mục Apache VirtualHost của bạn:

WSGIScriptAlias /yourapp /opt/yourenv/yourapp.wsgi 

Đối số đầu tiên bạn cung cấp cho chỉ thị WSGIScriptAlias là điểm mount URL. Vì vậy, nếu mục nhập VirtualHost này dành cho domain mydomain.com thì ứng dụng của bạn sẽ được hiển thị tại http://mydomain.com/yourapp .

Nếu ứng dụng Django của bạn nằm bên ngoài các folder Apache được cấu hình để có thể truy cập vào Apache, thì bạn cũng cần phải thêm thông tin sau vào mục VirtualHost của bạn :

<Directory /opt/yourenv> Order allow,deny Allow from all </Directory> 

Lưu ý nếu bạn muốn gắn ứng dụng WSGI ở root domain của bạn , bạn có thể sử dụng “/”, nhưng điều này có một lưu ý nhỏ. Khi bạn làm điều này, các file tĩnh được tìm thấy trong DocumentRoot của bạn không còn được Apache phân phát nữa mà là bởi ứng dụng WSGI. Để giải quyết vấn đề này, chỉ cần ánh xạ các file tĩnh của bạn bằng cách sử dụng lệnh “Bí danh” như sau:

Alias /static/ /opt/yourenv/static/ 

Cũng giống như với lệnh WSGIScriptAlias, đối số đầu tiên là điểm mount . Tùy chọn thứ hai là đường dẫn đến folder tĩnh nơi chứa các file của bạn.

Mặt tích cực của mod_wsgi là nó được xây dựng để tích hợp khá liền mạch với Apache. Điều này rất tốt cho những ai sử dụng Apache làm web server chính của họ.

Mặt trái của mod_wsgi là nó chỉ hoạt động với Apache. Vì vậy, nếu bạn thích hoặc yêu cầu một web server khác như NGINX, Lighttpd, Cherokee, v.v. thì bạn không gặp may. Nó cũng không nhẹ như một số tùy chọn khác mà ta sẽ thảo luận.

Ba - uWSGI


uWSGI là một server triển khai giao thức WSGI để giao tiếp với các web server khác như NGINX, Apache, Cherokee, v.v. Mục tiêu cuối cùng của nó là xử lý việc thông dịch mã Python của bạn, trong khi một web server như các server được đề cập trong câu trước xử lý file tĩnh và các yêu cầu khác. uWSGI được viết cho Python nên việc cài đặt dễ dàng như chạy lệnh sau:

sudo pip install uwsgi 

Việc triển khai uWSGI cho Django khá đơn giản. Trang web của dự án Django có tài liệu tuyệt vời về chủ đề này và bạn có thể tìm thấy ở đây .

Khi bạn đã cài đặt và chạy uWSGI như trong tài liệu Django, tất cả những gì còn lại là proxy tới uWSGI từ web server chính của bạn. Cách thực hiện điều này sẽ phụ thuộc vào web server của bạn, nhưng thường rất đơn giản.

Ưu điểm của việc sử dụng uWSGI là nó rất nhẹ, chạy riêng biệt với web server của bạn (để không làm quá tải các quy trình web server của bạn) và tương đối dễ cài đặt .

Một vài nhược điểm là phải cài đặt một server khác ngoài web server của bạn và cần proxy từ web server chính của bạn tới uWSGI. Mặc dù vậy, nếu bạn không bận tâm về việc cấu hình của bạn hơi bẩn, uWSGI là một lựa chọn tuyệt vời.

Bốn - Gunicorn

Gunicorn là một server Python WSGI HTTP giống như uWSGI. Cá nhân tôi sử dụng Gunicorn, nhưng điều đó không nhất thiết nghĩa là nó tốt nhất. Tôi sử dụng Gunicorn vì cài đặt đơn giản và tích hợp dễ dàng với Django. Nó được cài đặt giống như uWSGI bằng lệnh sau:

sudo pip install gunicorn 

Bạn có thể tìm thấy hướng dẫn thực hiện tại đây .

Như với uWSGI, bạn phải ủy quyền cho Gunicorn từ web server chính của bạn . Điều này không dễ thực hiện đối với Gunicorn hơn đối với uWSGI.

Gunicorn cũng có trọng lượng rất nhẹ. Liệu nó có nhanh hơn uWSGI hay không là điều còn nhiều tranh luận. Phần lớn điều này liên quan đến cách bạn cấu hình Gunicorn hoặc uWSGI. Cả hai đều có thể đạt đến mức hiệu suất rất ấn tượng, mặc dù một số người đã đề cập rằng Gunicorn hoạt động tốt hơn khi tải cao.

Nhược điểm của Gunicorn cũng giống như uWSGI, mặc dù cá nhân tôi thấy Gunicorn có thể cấu hình dễ dàng hơn uWSGI. Việc cấu hình và cài đặt vẫn không nhanh chóng hoặc đơn giản như sử dụng mod_wsgi với Apache, nhưng về cấp độ hiệu suất thì không có sự so sánh nào.

Tóm lược

Vẫn còn nhiều tùy chọn khác mà ta chưa đề cập đến như Flup, FastCGI, mod_python, v.v.

Flup không được sử dụng rộng rãi nên tôi không khuyên bạn nên dùng nó. FastCGI dành cho môi trường lưu trữ được chia sẻ hơn là một thứ như DigitalOcean nơi bạn không chia sẻ web server hoặc tài nguyên. Mod python cho Apache không hoạt động, nhưng trong hầu hết mọi tài liệu bạn tìm thấy mod wsgi sẽ là lộ trình được đề xuất vì nó chỉ hoạt động tốt hơn nhiều.

Vậy phương pháp nào là người chiến thắng? Chà, điều đó thành thật phụ thuộc vào những gì bạn đang theo đuổi. Nếu bạn thích Apache và một cài đặt và tích hợp đơn giản thì hãy sử dụng mod_wsgi. Nếu bạn không sử dụng Apache thì tôi khuyên bạn nên sử dụng uWSGI hoặc Gunicorn. Cả hai đều có giá trị và sẽ hoạt động tuyệt vời cho bất kỳ ứng dụng Django nào. Và tất nhiên trong một môi trường phát triển, đơn giản là không có lý do gì để không sử dụng server phát triển Django được tích hợp sẵn!


Tags:

Các tin liên quan

Giới thiệu khái niệm cơ bản về Linux
2013-08-16
Cách sử dụng SFTP để truyền tệp an toàn bằng server từ xa
2013-08-13
Cách thiết lập server Git riêng trên VPS
2013-08-02
Cách cài đặt và cấu hình firewall server cấu hình (CSF) trên Ubuntu
2013-07-29
Kiến thức cơ bản về quyền của Linux và cách sử dụng Umask trên VPS
2013-07-10
Cách bảo mật server cloud chống lại SQL Injection
2013-07-05
Cài đặt và sử dụng Vim Text Editor trên Cloud Server
2013-07-03
Cách cài đặt Zend Server 6 trên VPS CentOS 6.4
2013-07-03
Cài đặt và sử dụng Vim Text Editor trên Cloud Server
2013-07-03
Cách sử dụng Z Shell (zsh) trên server cloud
2013-07-01