Споредба на веб-сервери за веб-апликации базирани на Python
Вовед
Во оваа статија, ќе зборуваме за три главни работи: Пајтон, веб сервери и најважно за битовите и бобовите помеѓу двете.
Настрана шегите, оваа прилично долга статија може да изгледа страшна за некои кои бараат брзи насоки или одговори. За жал, за разлика од повеќето работи во светот на Python, кога станува збор за избор на производствен сервер за распоредување на вашата апликација, не постои еден -- и по можност само еден -- очигледен начин да се направи тоа.
Сепак, ова не треба да ве плаши. По завршувањето на овој напис, ќе имате добро познавање за тоа како работат различни веб-сервери и се справуваат со задачата да разговарате со веб-апликации базирани на Python. По мерење на вашите потреби и барања, ќе можете да одлучите кој сервер да го користите.
Интерфејс на порталот за веб-сервер на Python v1.0 (WSGI)
Разбирање на прашањата
Денес, постојат веб-сервери (или модули за сервери) во сè поголем број специјално дизајнирани (или приспособени) за да работат со веб-апликациите на Python наизменично. Сепак, тоа не било секогаш случај. Во старите денови, програмерите навистина немаа можност лесно да менуваат веб-сервери по желба, и секој прекинувач имаше цена поради зависности и ограничувања. Кога ќе одлучите за рамка на која ќе се изградите, вие исто така би одлучиле, не секогаш доброволно ниту свесно, за серверот(ите) што би можеле да ги користите за да ја опслужувате апликацијата исто така. Ова се должи на недостатокот на универзално прифатена спецификации за интерфејс: заедничка основа која апликациите (рамките) и веб-серверите подеднакво ќе се приспособат и користат за да комуницираат, овозможувајќи заменливост на компонентите кога е потребно со можеби нула промена на кодот.
Раѓање на стандардот
На почетокот на овој век, беа направени напори конечно да се реши проблемот со презентација на Предлогот за подобрување на Python (PEP) 333 на заедницата.
Од PEP (Предлог за подобрување на 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.
Како што е објаснето во PEP, овој нов стандард беше (и е) наменет да овозможи преносливост низ (и помеѓу) [веб] сервери и [Python web] апликации. Моќните карактеристики на стандардот и неговото широко усвојување во споредба со оние од порано го водат патот за денес: свет во кој постојат многу (можеби премногу) веб-сервери кои се подготвени да ја завршат работата наместо вас.
Споредбата
Во оваа споредба на веб-сервери за веб-апликации базирани на Python, ќе зборуваме за некои од достапните избори и што ги издвојува. Целта овде е читателот да има појасна визија и да обезбеди помош за усогласување на серверите со сопствените потреби на апликациите да го најдат оној. Поради огромниот број на опции (се повеќе се појавуваат секој ден!), ќе го филтрираме нашиот пат и ќе зборуваме за оние кои се „посебни“ на различни начини: популарност, цврстина или правење нешто различно (или подобро) во споредба со остатокот.
Забелешка: Би сакал да ве советувам, читателите, да бидете претпазливи од пристрасни и измамнички одредници кои имаат тенденција да не ги одразуваат условите на вистинска производна средина. За жал, тие [статии] навистина не значат многу кога станува збор за избор на веб-сервер за производство, што исто така е многу малку веројатно да биде делот што го предизвикува тесно грло. Затоа, ви се советува да ги измерите и разберете сопствените потреби, а потоа да испробате различни опции, воздржувајќи се од шпекулативни бројки за да избегнете реални идни сценарија за катастрофи.
Веб сервери (азбучен ред)
Сервер CherryPy WSGI
Што е тоа?
CherryPy е всушност веб-рамка. Сепак, тој е целосно самостоен - што значи дека може да работи самостојно, вклучително и во производствени сценарија без потреба од дополнителен софтвер. Ова е постигнато благодарение на сопствениот веб-сервер усогласен со WSGI, HTTP/1.1. Проектот CherryPy го опишува како „брз, подготвен за производство, генерички HTTP сервер со нишки“. рамка за развој на апликации.
Зошто треба да размислите да го користите?
- Компактен е и едноставен.
- Може да опслужува било која веб-апликација на Python што работи на WSGI.
- Може да ракува со статични датотеки и може да се користи само за да опслужува датотеки и папки.
- Тоа е здружено со нишки.
- Доаѓа со поддршка за SSL.
- Тоа е лесна за прилагодување, лесна за употреба алтернатива од чиста Python која е робусна и сигурна.
Гинирог
Што е тоа?
Gunicorn е самостоен веб-сервер кој нуди доста функционалност на значително лесен начин за ракување. Го користи моделот пред вилушка - што значи дека централниот главен процес (Gunicorn) има задача да управува со иницираните работни процеси (од различни типови), кои потоа директно се справуваат и се справуваат со барањата. И сето ова може да се конфигурира и прилагоди за да одговара на вашите потреби и различни сценарија за производство.
Зошто треба да размислите да го користите?
- Подржува WSGI и може да се користи со која било WSGI што работи на Python апликација и рамка.
- Може да се користи и како паѓачка замена за Paster (пр. Pyramid), сервер за развој на Django, web2py и други.
- Нуди избор на различни типови/конфигурации на работници и автоматско управување со работничкиот процес.
- Поддршка за HTTP/1.0 и HTTP/1.1 (Keep-Alive) преку синхрони и асинхрони работници.
- Доаѓа со поддршка за SSL
- Се растегнува со куки.
- Тоа е транспарентно и има јасна архитектура.
- Поддржува верзии на Python 2.6, 2.7, 3, 3.2, 3.3
Торнадо (HTTP сервер преку wsgi.WSGIContainer)
Што е тоа?
Tornado е рамка за развој на апликации и мрежна библиотека дизајнирана за ракување со асинхрони операции, дозволувајќи им на серверите да одржуваат многу отворени врски. Доаѓа и со WSGI сервер кој другите WSGI Python апликации (и рамки) можат да го користат за да го стартуваат.
Зошто треба да размислите да го користите?
- Доколку градите на врвот на рамката Торнадо; или
- На вашата апликација и треба асинхрона функционалност.
Иако под овие околности можеби ќе сакате да го изберете серверот WSGI на Tornado за вашиот проект, можете исто така да изберете да го користите Gunicorn со Tornado [Asynchronous] работници.
Извртена мрежа
Што е тоа?
Twisted Web е веб-серверот што доаѓа со Twisted мрежна библиотека. Додека Twisted сам по себе е \мрежен мотор управуван од настани, серверот Twisted Web работи на WSGI и е способен да напојува други веб-апликации на Python.
Зошто треба да размислите да го користите?
- Тоа е едноставен за употреба, стабилен и зрел производ.
- Ќе работи WSGI Python апликации.
- Може да делува како рамка за веб-сервер на Python, овозможувајќи ви да ја програмирате со јазикот за прилагодени потреби за сервисирање на HTTP.
- Нуди едноставна и брза можност за прототипирање преку
Python Scrips (.rpy)
кои се извршуваат на HTTP барања. - Доаѓа со можности за прокси и обратно прокси.
- Подржува виртуелни хостови.
- Може дури и да служи Perl, PHP итн преку twisted.web.twcgi API.
uWSGI
Што е тоа?
И покрај неговите многу збунувачки конвенции за именување, самиот uWSGI е огромен проект со многу компоненти, чија цел е да обезбеди целосен [софтверски] стек
за градење хостинг услуги
. Една од овие компоненти, серверот uWSGI, работи со Python WSGI апликации. Тој е способен да користи различни протоколи, вклучувајќи го и сопствениот uwsgi жичен протокол, кој е квази идентичен со SCGI. Со цел да се исполни (разбирливото) барање да се користат самостојни HTTP сервери пред серверите за апликации, веб-серверите NGINX и Cherokee се модуларизирани за поддршка на uWSGI (најдобри перформанси) uwsgi протокол да има директна контрола врз неговите процеси.
Зошто треба да размислите да го користите?
- uWSGI доаѓа со WSGI адаптер и целосно ги поддржува Python апликациите што работат на WSGI.
- Се поврзува со libpython. Го вчитува кодот на апликацијата при стартување и делува како толкувач на Python. Ги анализира дојдовните барања и го повикува Python што може да се повика.
- Доаѓа со директна поддршка за популарниот веб-сервер NGINX (заедно со Cherokee* и lighttpd).
- Напишано е во C.
- Неговите различни компоненти можат да направат многу повеќе од извршување на апликација, која може да биде корисна за проширување.
- Во моментов (од крајот на 2013 година), тој е активно развиен и има брзи циклуси на ослободување.
- Има различни мотори за активирање апликации (асинхрони и синхрони).
- Може да значи помала меморија за извршување.
Келнерка WSGI сервер
Што е тоа?
Келнерка е чист Python WSGI сервер. На прв поглед можеби не изгледа дека е толку различно од многу други; сепак, нејзината развојна филозофија го одвојува од останатите. Неговата цел е да го олесни товарот за производство (и развој) предизвикан од веб-серверите за развивачите на веб-апликации на Python. Келнерката го постигнува ова со неутрализирање на проблемите предизвикани од разликите во платформата (пр. 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.
Модули за самостојни сервери
mod_python со WSGI адаптер (Apache) (вградување на Python)
Што е тоа?
Едноставно кажано, mod_python е Apache-модул кој го вградува Python во самиот сервер. Иако не се препорачува од различни причини (проектот е мртов и застарен со само неодамнешни намери да се продолжи развојот од оригиналниот автор), може да се користи за извршување на WSGI апликации на Apache преку обвивки.
Зошто треба да размислите да го користите?
Можеби ќе сакате да програмирате и да го проширите Apache користејќи Python од одредена причина.
mod_wsgi (Apache) (Вградување на Python)
Што е тоа?
Како модул компатибилен со WSGI, mod_wsgi ви овозможува да извршувате Python WSGI апликации на Apache HTTP серверот. Тоа го постигнува на два начина: првиот е сличен на тоа како работи mod_python, со вградување на кодот и негово извршување во рамките на процесот на дете. Другиот метод нуди режим на работа базиран на демон, при што апликацијата WSGI има свој посебен процес, управуван автоматски од mod_wsgi.
Зошто треба да размислите да го користите?
- Постоечкото искуство со Apache може да значи стабилна производна средина за вашите операции кога станува збор и за водење на Python. Само ова може да го спаси денот, правејќи го да вреди.
- Ако сте зависни од Apache или сакате да ги искористите неговите стабилни и богати модули за проширување, тоа ќе биде вистинскиот пат.
- Може да работи апликации под различни корисници на системот за дополнителна безбедност.
- Тоа е испробан и проверен, доверлив софтвер.
- World Wide Web содржи тони информации и прашања и одговори поврзани со нив, што може да ви заштеди многу време кога ќе наидете на вистински проблем со производството.
- И доаѓа со сите други функционалности што ги нуди Apache.