웹사이트 검색

Python 기반 웹 애플리케이션을 위한 웹 서버 비교


소개

이 기사에서 우리는 Python, 웹 서버, 그리고 가장 중요한 두 가지 사이의 비트와 밥이라는 세 가지 주요 사항에 대해 이야기할 것입니다.

농담은 차치하고, 이 다소 긴 기사는 빠른 지침이나 답변을 찾는 일부에게는 끔찍하게 보일 수 있습니다. 안타깝게도 Python 세계의 대부분의 경우와 달리 애플리케이션을 배포할 프로덕션 서버 스택을 선택할 때 분명한 방법은 하나도 없으며 가급적이면 하나뿐입니다.

그러나 이것은 당신을 놀라게해서는 안됩니다. 이 기사를 완료한 후에는 다양한 웹 서버가 작동하는 방식과 Python 기반 웹 애플리케이션과의 대화 작업을 처리하는 방법에 대해 잘 알게 될 것입니다. 요구 사항과 요구 사항을 측정하면 사용할 서버를 결정할 수 있습니다.

Python 웹 서버 게이트웨이 인터페이스 v1.0(WSGI)

문제 이해

오늘날 Python 웹 응용 프로그램과 상호 교환 가능하도록 특별히 설계(또는 조정)된 웹 서버(또는 서버용 모듈)가 계속 증가하고 있습니다. 그러나 항상 그런 것은 아닙니다. 예전에는 개발자가 마음대로 웹 서버를 쉽게 전환할 수 있는 가능성이 없었으며 각 전환에는 종속성과 제한으로 인해 비용이 발생했습니다. 구축할 프레임워크를 결정할 때 항상 자발적으로나 의식적으로는 아니지만 애플리케이션을 제공하는 데 사용할 수 있는 서버도 결정했을 것입니다. 이는 보편적으로 받아들여지는 인터페이스 사양이 존재하지 않기 때문입니다. 즉, 응용 프로그램(프레임워크)과 웹 서버가 모두 적응하고 통신을 위해 사용하는 공통 기반으로 필요할 때 구성 요소를 상호 교환할 수 있습니다. 코드 변경.

표준의 탄생

금세기 초에 Python Enhancement Proposal(PEP) 333을 커뮤니티에 발표하여 문제를 마침내 해결하기 위한 노력이 이루어졌습니다.

PEP(Python Enhancement Proposal) 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.

PEP에서 설명했듯이 이 새로운 표준은 [웹] 서버와 [Python 웹] 응용 프로그램 간에 이식성을 허용하기 위한 것입니다. 표준의 강력한 기능과 이전의 기능과 비교하여 폭넓게 채택되어 오늘날의 길을 이끌고 있습니다. 즉, 귀하를 대신해 작업을 수행할 웹 서버가 많이(아마도 너무 많을 수 있음) 존재하는 세상입니다.

비교

Python 기반 웹 응용 프로그램용 웹 서버 비교에서는 사용 가능한 몇 가지 선택 사항과 이를 두드러지게 만드는 요소에 대해 설명합니다. 여기서 목표는 독자가 더 명확한 비전을 갖고 하나를 찾기 위해 애플리케이션의 사용자 정의 요구 사항과 서버를 일치시키는 데 도움을 제공하는 것입니다. 다양한 옵션(매일 더 많이 나타납니다!)으로 인해 다양한 방법으로 \특별한\ 옵션에 대해 필터링하고 이야기할 것입니다. 나머지.

참고: 실제 프로덕션 환경의 조건을 반영하지 않는 경향이 있는 편향되고 기만적인 벤치마크에 주의하라고 독자 여러분에게 조언하고 싶습니다. 안타깝게도 이러한 [기사]는 프로덕션용 웹 서버를 선택하는 데 큰 의미가 없으며 병목 현상을 일으키는 부분이 될 가능성도 매우 낮습니다. 따라서 자신의 요구 사항을 측정하고 이해한 다음 실제 미래의 재난 시나리오를 피하기 위해 추측적인 수치를 자제하고 다른 옵션을 시도하는 것이 좋습니다.

웹 서버(알파벳순)

CherryPy WSGI 서버

이게 뭐야?

CherryPy는 실제로 웹 프레임워크입니다. 그러나 완전히 독립된 것입니다. 즉, 추가 소프트웨어 없이 프로덕션 시나리오를 포함하여 자체적으로 실행할 수 있습니다. 이는 자체 WSGI, HTTP/1.1 호환 웹 서버 덕분에 달성됩니다. CherryPy 프로젝트는 이를 \고속, 프로덕션 준비, 스레드 풀링, 일반 HTTP 서버\라고 설명합니다. WSGI 서버이므로 CherryPy에 구속되지 않고 다른 WSGI Python 애플리케이션을 제공하는 데에도 사용할 수 있습니다. 애플리케이션 개발 프레임워크.

사용을 고려해야 하는 이유는 무엇입니까?

  • 작고 간단합니다.
  • WSGI에서 실행되는 모든 Python 웹 애플리케이션을 제공할 수 있습니다.
  • 정적 파일을 처리할 수 있으며 파일 및 폴더만 제공하는 데 사용할 수 있습니다.
  • 스레드풀입니다.
  • SSL을 지원합니다.
  • 견고하고 신뢰할 수 있는 순수 Python 대안으로 적응하기 쉽고 사용하기 쉽습니다.

거니콘

이게 뭐야?

Gunicorn은 운영하기 매우 쉬운 방식으로 꽤 많은 기능을 제공하는 독립형 웹 서버입니다. 이것은 pre-fork 모델을 사용합니다. 즉, 중앙 마스터 프로세스(Gunicorn)가 시작된 작업자 프로세스(서로 다른 유형)를 관리하는 임무를 맡은 다음 요청을 직접 처리하고 처리합니다. 그리고 이 모든 것은 사용자의 요구와 다양한 생산 시나리오에 맞게 구성 및 조정할 수 있습니다.

사용을 고려해야 하는 이유는 무엇입니까?

  • WSGI를 지원하며 Python 애플리케이션 및 프레임워크를 실행하는 모든 WSGI와 함께 사용할 수 있습니다.
  • 또한 Paster(예: Pyramid), Django의 개발 서버, web2py 등을 대체할 수 있습니다.
  • 다양한 작업자 유형/구성 및 자동 작업자 프로세스 관리를 선택할 수 있습니다.
  • 동기 및 비동기 작업자를 통한 HTTP/1.0 및 HTTP/1.1(Keep-Alive) 지원
  • SSL 지원 제공
  • 후크로 확장 가능
  • 투명하고 명확한 아키텍처를 가지고 있습니다.
  • Python 버전 2.6, 2.7, 3, 3.2, 3.3 지원

토네이도(wsgi.WSGIContainer를 통한 HTTP 서버)

이게 뭐야?

Tornado는 애플리케이션 개발 프레임워크이자 비동기 작업을 처리하도록 설계된 네트워킹 라이브러리로, 서버가 많은 열린 연결을 유지할 수 있도록 합니다. 또한 다른 WSGI Python 애플리케이션(및 프레임워크)을 실행하는 데 사용할 수 있는 WSGI 서버와 함께 제공됩니다.

사용을 고려해야 하는 이유는 무엇입니까?

  • 최상의 Tornado 프레임워크를 구축하는 경우; 또는
  • 애플리케이션에 비동기 기능이 필요합니다.

이러한 상황에서 프로젝트에 대해 Tornado의 WSGI 서버를 선택하고 싶을 수도 있지만 Tornado [Asynchronous] 작업자와 함께 Gunicorn을 사용하도록 선택할 수도 있습니다.

뒤틀린 웹

이게 뭐야?

Twisted Web은 Twisted 네트워킹 라이브러리와 함께 제공되는 웹 서버입니다. Twisted 자체는 "이벤트 기반 네트워킹 엔진\인 반면 Twisted Web 서버는 WSGI에서 실행되며 다른 Python 웹 애플리케이션을 구동할 수 있습니다.

사용을 고려해야 하는 이유는 무엇입니까?

  • 사용이 간편하고 안정적이며 성숙한 제품입니다.
  • WSGI Python 애플리케이션을 실행합니다.
  • Python 웹 서버 프레임워크처럼 작동할 수 있으므로 사용자 정의 HTTP 제공 목적을 위해 언어로 프로그래밍할 수 있습니다.
  • HTTP 요청 시 실행되는 Python Scrips(.rpy)를 통해 간단하고 빠른 프로토타이핑 기능을 제공합니다.
  • 프록시 및 리버스 프록시 기능이 함께 제공됩니다.
  • 가상 호스트를 지원합니다.
  • twisted.web.twcgi API를 통해 Perl, PHP 등을 제공할 수도 있습니다.

uWSGI

그것은 무엇입니까?

매우 혼란스러운 명명 규칙에도 불구하고 uWSGI 자체는 호스팅 서비스 구축전체 [소프트웨어] 스택을 제공하는 것을 목표로 하는 많은 구성 요소가 있는 방대한 프로젝트입니다. >. 이러한 구성 요소 중 하나인 uWSGI 서버는 Python WSGI 애플리케이션을 실행합니다. SCGI와 거의 동일한 자체 uwsgi 유선 프로토콜을 포함하여 다양한 프로토콜을 사용할 수 있습니다. 응용 프로그램 서버 앞에서 독립형 HTTP 서버를 사용하려는 (이해할 수 있는) 요구를 충족하기 위해 NGINX 및 Cherokee 웹 서버는 uWSGI의 (가장 성능이 좋은) uwsgi 프로토콜을 지원하도록 모듈화되어 직접 제어할 수 있습니다. 그것의 프로세스.

사용을 고려해야 하는 이유는 무엇입니까?

  • uWSGI는 WSGI 어댑터와 함께 제공되며 WSGI에서 실행되는 Python 애플리케이션을 완벽하게 지원합니다.
  • libpython과 연결됩니다. 시작 시 애플리케이션 코드를 로드하고 Python 인터프리터처럼 작동합니다. 들어오는 요청을 구문 분석하고 Python 콜러블을 호출합니다.
  • 인기 있는 NGINX 웹 서버(Cherokee* 및 lighttpd와 함께)를 직접 지원합니다.
  • C로 작성되었습니다.
  • 다양한 구성요소는 애플리케이션을 실행하는 것보다 훨씬 더 많은 일을 할 수 있으며 확장에 편리할 수 있습니다.
  • 현재(2013년 말 기준) 활발히 개발되고 있으며 출시 주기가 빠릅니다.
  • 애플리케이션 실행을 위한 다양한 엔진(비동기 및 동기)이 있습니다.
  • 실행할 메모리 사용량이 적을 수 있습니다.

웨이트리스 WSGI 서버

이게 뭐야?

Waitress는 순수 Python WSGI 서버입니다. 언뜻 보기에는 다른 많은 것들과 크게 다르지 않은 것처럼 보일 수 있습니다. 그러나 그것의 개발 철학은 그것을 나머지와 분리시킵니다. Python 웹 응용 프로그램 개발자를 위해 웹 서버로 인한 생산(및 개발) 부담을 완화하는 것을 목표로 합니다. Waitress는 플랫폼(예: Unix 대 Windows), 인터프리터(CPython 대 PyPy) 및 Python(버전 2 대 3) 차이로 인해 발생하는 문제를 중화하여 이를 달성합니다.

사용을 고려해야 하는 이유는 무엇입니까?

  • 매우 간결하고 순수한 Python 솔루션입니다.
  • HTTP/1.0 및 HTTP/1.1(Keep-Alive)을 지원합니다.
  • 광범위한 플랫폼 지원으로 프로덕션에 배포할 준비가 되었습니다.
  • CherryPy와 달리 사실상 프레임워크 독립적입니다.
  • Windows 및 Unix에서 실행되며 CPython 인터프리터 및 PyPy(Unix만 해당)에서 실행됩니다.
  • Python 버전 2 및 3을 지원합니다.

독립형 서버용 모듈

WSGI 어댑터가 있는 mod_python(Apache)(Embedding Python)

이게 뭐야?

간단히 말해서 mod_python은 서버 자체에 Python을 포함하는 Apache 모듈입니다. 여러 가지 이유로 권장되지는 않지만(원저자가 개발을 계속하려는 최근의 의도로 인해 프로젝트가 종료되고 구식임) 래퍼를 통해 Apache에서 WSGI 응용 프로그램을 실행하는 데 사용할 수 있습니다.

사용을 고려해야 하는 이유는 무엇입니까?

특정 이유로 Python을 사용하여 Apache를 프로그래밍하고 확장할 수 있습니다.

mod_wsgi(Apache)(Python 임베딩)

이게 뭐야?

WSGI 호환 모듈인 mod_wsgi를 사용하면 Apache HTTP Server에서 Python WSGI 애플리케이션을 실행할 수 있습니다. 두 가지 방법으로 이를 달성합니다. 첫 번째는 코드를 포함하고 하위 프로세스 내에서 실행하여 mod_python이 작동하는 방식과 유사합니다. 다른 방법은 WSGI 응용 프로그램이 mod_wsgi에 의해 자동으로 관리되는 고유한 프로세스를 갖는 데몬 기반 작동 모드를 제공합니다.

사용을 고려해야 하는 이유는 무엇입니까?

  • Apache에 대한 기존 경험은 Python 실행과 관련하여 작업을 위한 안정적인 프로덕션 환경을 의미할 수 있습니다. 이것만으로도 하루를 절약할 수 있으며 그만한 가치가 있습니다.
  • Apache에 의존하거나 Apache의 안정적이고 풍부한 확장 모듈을 활용하려는 경우 갈 길입니다.
  • 보안 강화를 위해 다른 시스템 사용자로 애플리케이션을 실행할 수 있습니다.
  • 시험과 테스트를 거친 신뢰할 수 있는 소프트웨어입니다.
  • World Wide Web에는 수톤의 정보와 이와 관련된 Q&A가 포함되어 있어 실제 생산 문제에 직면했을 때 많은 시간을 절약할 수 있습니다.
  • 그리고 Apache가 제공하는 다른 모든 기능과 함께 제공됩니다.

제출자: O.S. 테저