>  기사  >  백엔드 개발  >  Python 웹 프로그램의 9가지 배포 방법 요약

Python 웹 프로그램의 9가지 배포 방법 요약

不言
不言원래의
2018-04-16 17:01:521545검색

Python에는 많은 웹 개발 프레임워크가 있습니다. 일반적으로 웹 애플리케이션은 3계층 구조의 웹 서버입니다. ---->application -----> server

주요 웹 서버는 한 손에 꼽을 수 있는 apache, lighttpd, nginx, iis

application, 한자로는 application service라고 하는데, 이는 특정 웹 프레임워크를 기반으로 작성하는 애플리케이션 코드입니다. 일반적으로 스토리지 서비스를 말하며, 웹 개발에서 mysql과 비교되는 경우가 많습니다. 최근에는 웹사이트 규모의 확장으로 인해 memcache, redis 등의 키-값 스토리지도 전면에 배치됩니다. 기능 정적 파일을 효율적으로 처리합니다. 웹 서버는 IO 및 파일 전송의 최적화를 통해 C 개발 및 호출 기본 기능을 사용합니다.

간단한 네트워크 방화벽 역할을 하며 일부 IP를 덤프하고 동시 연결 수를 간단히 제어할 수 있습니다. 아무것도 없는 것보다 낫습니다

높은 동시성 짧은 메시지 처리 연결 요청은 인트라넷의 수십 개의 긴 연결을 통해 수천 개의 사용자 요청을 전달합니다. 한 가지 이유는 웹 서버가 높은 동시성을 처리하는 데 매우 전문적이라는 것입니다. 동시성 기능

실제로 시중의 일부 웹 프레임워크는 epoll과 같은 효율적인 네트워크 라이브러리에 대한 지원이 내장되어 있어 높은 동시성을 처리할 수 있는 기능이 없습니다. Python의 tornado, Java 기반 Tomcat, jetty 등과 같은 /kqueue. 어떤 사람들은 프런트 엔드 웹 서버를 제거하고 알몸으로 실행하지만 공용 네트워크 응용 프로그램을 배포할 때는 이렇게 하지 않는 것이 가장 좋습니다. 위에서 언급한 두 가지 이유, 사용자 브라우저에서 웹 서버까지의 네트워크 상태가 온갖 이상하고 그럴 수 없습니다. 상상할 수 있듯이

웹 서버는 세 가지 이유로 nginx 사용을 강력히 권장합니다.

성능이 뛰어나고 매우 안정적입니다.

쉬움

conf 파일은 구성이 매우 쉽고 apache/lighttpd보다 간단합니다.

Python으로 개발된 웹 프로그램 배포 9가지 방법이 있습니다

mod_python은 Apache의 내장 모듈입니다. Python 버전 mod_python을 사용하여 Apache와 함께 사용하는 것은 권장되지 않습니다.

cgi는 너무 오래되어 권장되지 않으며, nginx는 cgi를 지원하지 않으므로 lighttpd 또는 apache

fastcgi만 사용할 수 있습니다. 현재 가장 널리 사용되는 방법은 flup 모듈에서 지원됩니다. nginx의 해당 구성 명령은 fastcgi_pass

spawn-fcgi입니다. 이는 lighttpd 설치 패키지에 포함되어 있습니다. flup으로서의 효과. 차이점은 flup이 Python 코드 수준에서 도입되었고spawn-fcgi는 외부 프로그램이라는 것입니다. spawn-fcgi는 매우 다재다능하며 php, python, perl 등 모든 언어로 개발된 코드를 지원할 수 있습니다. 코드가 fastcgi 인터페이스를 구현하는 한, 전체 이름은

scgi입니다. Simple Common Gateway 인터페이스입니다. scgi 프로토콜은 매우 간단하지만, nginx의 해당 구성 명령은 scgi_pass로 사용할 수 있습니다. 원한다면 Flup도 지원합니다.

http, nginx는 Proxy_pass 전달을 사용합니다. 이를 위해서는 백엔드 애플리케이션에 높은 동시성을 처리할 수 있는 내장 http 서버가 있어야 합니다. Python 웹 프레임워크에서는 tornado만 선택할 수 있습니다.

Python 프로그래머는 발명을 좋아합니다. 휠, 토네이도는 웹 프레임워크 외에 독립적으로 고성능 http 서버도 제공할 수 있으므로 병 등 다른 파이썬 프레임워크를 사용하여 코드를 작성하는 경우에도 높은 실행이 가능합니다. - 토네이도를 가져와 성능 http 서버를 사용할 수도 있습니다. 프로토콜은 nginx와 함께 배포됩니다. 확장하면 Python 패키지에는 http 배포를 지원하기 위해 다른 프레임워크에서 참조할 수도 있는 gevent와 같이 높은 동시성을 처리할 수 있는 많은 http 서버가 있습니다.

실제로 Java를 사용하여 웹 프로그램을 만들 때 일반적으로 http와 nginx를 함께 사용합니다. 응용 프로그램 서버는 tomcat 또는 jetty

uwsgi 4개 부분으로 구성되며,

uwsgi 프로토콜

웹 서버 내장 지원 프로토콜입니다. 모듈

애플리케이션 서버 프로토콜 지원 모듈

프로세스 제어 프로그램

nginx에는 0.8.4부터 uwsgi 프로토콜이 내장되어 있습니다. uwsgi 프로토콜은 4바이트 헤더 + 본문으로 매우 간단합니다. http, cgi 등과 같은 많은 프로토콜(내부에 표시된 헤더 필드를 통해)에 대해 소규모 성능 비교 테스트를 수행한 적이 있습니다. 결과에 따르면 fastcgi와 비교할 때 uwsgi는 뚜렷한 성능 이점이 없을 수도 있습니다. uwsgi의 특징은 프로세스 제어 프로그램과 함께 제공되며 C 언어로 작성되었으며 실제로는 generate-fcgi/php-fpm과 유사합니다. 따라서 uwsgi는 (python, lua, ruby, erlang, go) 등을 포함한 다양한 애플리케이션 프레임워크를 지원할 수 있습니다.

uwsgi와 유사한 도구인 Gununicorn은 Rails 배포 도구(Unicorn)에서 이식되었습니다. 그러나 이것이 사용하는 프로토콜은 WSGI이며, 전체 이름은 Python2.5에 정의된 공식 표준(PEP 333)입니다. 이는 뿌리가 좋고 http://gunicorn 배포가 비교적 간단합니다. org/ 자세한 튜토리얼

mod_wsgi, WSGI 프로토콜도 지원하는 Apache 모듈이 있습니다. https://code.google.com/p/modwsgi/

fastcgi 프로토콜과 http 프로토콜의 장단점 비교 코드 배포 중

fastcgi는 바이너리 프로토콜이지만 http 프로토콜에 비해 리소스를 절약하지 않습니다. 바이너리 프로토콜은 1234567과 같은 숫자 표현만 저장할 수 있습니다. 문자열로 표현하려면 7바이트, 숫자로 표현하려면 4바이트가 필요하며 문자열은 어디에서나 동일합니다

fastcgi가 데이터를 전송할 때 CGI 프로토콜과 호환되려면 많은 cgi 환경 변수도 가져와야 하므로 http 프로토콜에 비해 fastcgi를 사용하여 데이터를 전송하는 것은 경제적이지 않지만 비용이 더 많이 듭니다

fastcgi의 유일한 장점은 Fastcgi는 10개의 링크를 사용하여 백엔드 애플리케이션으로 전달할 수 있으며, 원하는 만큼 요청을 보낼 수 있습니다. 백엔드 애플리케이션에 대한 HTTP 프록시 전달 방법은 동시성이 매우 높을 때 나타납니다. 문제는 tcp 프로토콜 스택에서 포트가 int16 정수이기 때문입니다. 최대 65536개의 포트를 사용합니다. 수십만 개의 외부 동시 요청, 포트 풀이 고갈되고 서버가 응답을 거부할 수만 있습니다

요약

제 개인적인 습관은 fastcgi 프로토콜을 사용하여 Python 프로그램을 배포하는 것인데, 이는 간단하고 문제가 없습니다. 기술적인 솔루션을 선택하려면 가장 간단하고 가장 일반적으로 이 블로그의 fastcgi 실행 스크립트는 다음과 같습니다

kill - `cat / tmp / django.pid`
echo 'restart django....' 
python . / manage.py runfcgi - - settings = lutaf.settings_r maxchildren =  maxspare = minspare =  method = prefork pidfile = / tmp / django.pid host = 127.0 . 0.1  port = outlog = / tmp / dj.out errlog = / tmp / dj.error

모든 사람이 Gunicorn을 사용해 보는 것이 좋습니다. 이것이 향후 개발 방향입니다

위 내용은 Python 웹 프로그램의 9가지 배포 방법 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.