Кіріспе
Веб-сервер – HTTP (веб-контентті тарату үшін жасалған желілік протокол) немесе оның қауіпсіз нұсқасы HTTPS арқылы сұрауларды қабылдайтын компьютерлік бағдарламалық қамтамасыз ету және оған негізделген аппараттық жабдық. Пайдаланушы агенті, әдетте веб-браузер немесе веб-шолушы, HTTP арқылы веб-бет немесе басқа ресурсты сұрау арқылы байланысты бастайды, ал сервер сол ресурстың мазмұнымен немесе қате туралы хабарламамен жауап береді. Веб-сервер, егер осы мақсатта конфигурацияланған болса, пайдаланушы агенті жіберген ресурстарды қабылдап, сақтай алады. Веб-серверді іске қосу үшін қолданылатын аппараттық жабдықтар оған түсетін сұраулардың көлеміне байланысты өзгеруі мүмкін. Қатардың төменгі шегінде конфигурациялық интерфейс ретінде шағын веб-серверді іске асыратын маршрутизатор сияқты кіріктірілген жүйелер бар. Көп трафикті интернет-сайттар жоғары жылдамдықты компьютерлер қатарында жұмыс істейтін жүздеген серверлер арқылы сұрауларды өңдеуі мүмкін. Веб-серверден жіберілген ресурс – веб-серверде бұрыннан бар файл (статикалық мазмұн) болуы мүмкін, немесе ол сұраныс кезінде (динамикалық мазмұн) сервер бағдарламасымен байланысатын басқа бағдарлама арқылы жасалуы мүмкін. Бірінші жағдайда қызмет көрсету әдетте жылдамырақ болады және қайталанған сұраулар үшін кэштеу оңайырақ, ал екіншісі – қолданбалардың кең ауқымын қолдайды. REST және SOAP сияқты технологиялар, HTTP-ді компьютерлер арасындағы жалпы байланыс үшін негіз ретінде пайдаланады, сондай-ақ WebDAV кеңейтулерін қолдайды, бұл веб-серверлердің қолданылу аясын олардың бастапқы мақсатынан – адамдар оқи алатын беттерге қызмет етуден асырып түсетеді.
A web server is computer software and underlying hardware that accepts requests via HTTP (the network protocol created to distribute web content) or its secure variant HTTPS. A user agent, commonly a web browser or web crawler, initiates communication by making a request for a web page or other resource using HTTP, and the server responds with the content of that resource or an error message. A web server can also accept and store resources sent from the user agent if configured to do so. The hardware used to run a web server can vary according to the volume of requests that it needs to handle. At the low end of the range are embedded systems, such as a router that runs a small web server as its configuration interface. A high traffic Internet website might handle requests with hundreds of servers that run on racks of high speed computers. A resource sent from a web server can be a pre existing file (static content) available to the web server, or it can be generated at the time of the request (dynamic content) by another program that communicates with the server software. The former usually can be served faster and can be more easily cached for repeated requests, while the latter supports a broader range of applications. Technologies such as REST and SOAP, which use HTTP as a basis for general computer to computer communication, as well as support for WebDAV extensions, have extended the application of web servers well beyond their original purpose of serving human readable pages.
Тарих
Бұл веб-сервер бағдарламаларының өте қысқа тарихы, сондықтан кейбір ақпарат веб-браузерлердің, World Wide Web және Интернет тарихымен сәйкес келуі мүмкін; осылайша, түсініктілік пен қарапайымдылық үшін, төменде келтірілген кейбір маңызды тарихи мәліметтер жоғарыда аталған тарих мақалаларында да кездесуі мүмкін.
Жарылыспен өсіп, бәсекеге қабілеттілік (1996-2014 жж.)
1996 жылдың соңында Интернеттегі домендік атауды иеленгісі келетін және/немесе веб-сайттарды орналастыруды қалаған кез келген адамға қол жетімді елуден астам белгілі (әртүрлі) веб-серверлік бағдарламалық қамтамасыз ету болды. Олардың көпшілігі қысқа ғұмыр сүрді және басқа веб-серверлермен ауыстырылды. HTTP/1.0 (1996) және HTTP/1.1 (1997, 1999) протоколдары туралы RFC жариялануы көптеген веб-серверлерді осы стандарттарға сәйкес келуге мәжбүр етті (әрқашан толық емес). TCP/IP тұрақты қосылымдарын (HTTP/1.1) пайдалану веб-серверлерге рұқсат етілген бір мезгілдегі қосылымдардың ең көп санын арттыруды және олардың масштабталу деңгейін жақсартуды қажет етті. 1996 мен 1999 жылдар аралығында Netscape Enterprise Server және Microsoft-тың IIS жетекші коммерциялық нұсқалардың қатарына қосылды, ал ашық бастапқы кодты және тегін қолжетімді бағдарламалардың ішінде Apache HTTP Server сенімділігі мен көптеген мүмкіндіктерінің арқасында басымдықты таңдалған сервер ретінде сақтап қалды. Сол жылдары Zeus (қазір қолданыстан тоқтатылған) деп аталатын тағы бір коммерциялық, өте инновациялық және осылайша көзге түсетін веб-сервер болды, ол 2000 жылдардың басына дейін, төмен пайыздық пайдалануына қарамастан, нарықтағы ең жылдам және ең масштабты веб-серверлердің бірі ретінде танымал болды. Apache 1996 жылдың ортасынан 2015 жылдың соңына дейін ең көп қолданылған веб-сервер болып қала берді, бірақ бірнеше жылдық төмендеуден кейін алдымен IIS, содан кейін Nginx оны басып өтті. Кейіннен IIS Apache-ге қарағанда пайдаланудың әлдеқайда төмен пайызына түсіп кетті (нарық үлесін де қараңыз). 2005-2006 жылдары Apache жаңа өнімділік мүмкіндіктерін (мысалы, event MPM және жаңа мазмұн кэшін) енгізу арқылы жылдамдығын және масштабталу деңгейін жақсарта бастады. Бұл жаңа өнімділікті жақсартулар бастапқыда тәжірибелік деп белгіленгендіктен, пайдаланушылар ұзақ уақыт бойы оларды қоспады, сондықтан Apache коммерциялық серверлермен және, ең бастысы, басқа ашық бастапқы кодты серверлердің бәсекесіне тап болды, олар өздерінің дамуының басынан-ақ әлдеқайда жоғары өнімділікке қол жеткізді (әсіресе статикалық мазмұнды қызмет көрсету кезінде) және Apache төмендеген кезде жақсы сыналған, кеңейтілген мүмкіндіктердің жеткілікті тізімін ұсына алды. Шын мәнінде, 2000 жылдан кейін бірнеше жыл өткен соң, LiteSpeed сияқты басқа коммерциялық және өте бәсекеге қабілетті веб-серверлер ғана емес, сонымен қатар Hiawatha, Cherokee HTTP сервері, Lighttpd, Nginx және басқа да туынды/байланысты өнімдер, олар коммерциялық қолдаумен де қолжетімді, көптеген басқа ашық бастапқы кодты бағдарламалар да пайда болды, олардың көпшілігі өте жақсы сапалы және өте жоғары өнімділікке ие болды. 2007-2008 жылдары танымал веб-браузерлер хост доменіне 2 тұрақты қосылыстың бұрынғы әдепкі шегін (RFC 2616 ұсынған шек) 4, 6 немесе 8 тұрақты қосылымға дейін арттырды, бұл көптеген бейнелер бар ауыр веб-беттерді жылдам жүктеу үшін және веб-беттердегі оқиғалардың екі бағыттағы хабарламалары үшін қолданылатын динамикалық объектілерге арналған тұрақты қосылымдардың жетіспеушілігін азайту үшін жасалды. Бір жыл ішінде бұл өзгерістер веб-серверлерге басқаруға тиіс тұрақты қосылымдардың орташа санын үш есеге арттырды. Бұл үрдіс (тұрақты қосылымдар санын арттыру) баяу веб-серверлердің алдында кері проксилерді қабылдауға күшті серпін берді және жаңа веб-серверлерге барлық жылдамдықтарын көрсетуге және тым көп аппараттық ресурстарды (көптеген процессорлары бар қымбат компьютерлер, RAM және жылдам дискілер) қажет етпей, өте көп бір мезгілдегі қосылымдарды өңдеуге қабілеттіліктерін көрсетуге тағы бір мүмкіндік берді.
Жаңа міндеттер (2015 ж. және одан кейінгі жылдар)
2015 жылы RFC-лер жаңа протокол нұсқасын [HTTP/2] жариялады. Жаңа талаптарды іске асыру мүлдем оңай болмағандықтан, аз танымал веб-серверлерді әзірлейтін мамандар арасында (мысалы, қолданылу үлесі 1%-дан 2%-ға дейін) осы жаңа протокол нұсқасын қолдауға кірісу немесе кіріспеу туралы мәселе туды. Шындығында, HTTP/2 қолдауы олардың ішкі жұмысын көптеген факторларға байланысты түбегейлі өзгертуді талап етті (көбінесе шифрланған қосылымдар қажет болды, бір TCP портында HTTP/1.x және HTTP/2 қосылымдарын ажырату қабілеті, HTTP хабарламаларының екілік форматы, хабарламалардың басымдығы, HTTP тақырыптарының қысылуы, ағындарды пайдалану, олар TCP/IP қосалқы қосылымдары деп те аталады, сондай-ақ олармен байланысты ағын басқару және т.б.). Сондықтан осы веб-серверлердің бірқатар әзірлеушілері жаңа HTTP/2 нұсқасын қолдамауды жөн көрді (кем дегенде, алдағы уақытта), себебі осыған байланысты бірнеше маңызды себептер болды.
2020–2021 жылдары HTTP/3 протоколы туралы болашақ RFC-нің жетілдірілген нұсқалары жарияланғаннан кейін HTTP/2-нің іске асырылу динамикасы (жоғарғы веб-серверлер мен танымал веб-браузерлер тарапынан) ішінара қайталанды.
Тізімдер тізімі
Веб-сервер бағдарламасы файлдар мен кіші каталогтардың тізімшесін динамикалық түрде (нақты уақытта) құру мүмкіндігіне ие болуы мүмкін. Егер веб-сервер бағдарламасы осылай конфигурацияланған болса және сұралған URL мекенжайы қолданыстағы каталогқа сәйкес келсе, оған қол жеткізуге рұқсат болса және сол каталогтың ішінде статикалық индекс файлы табылмайтын болса, онда жоғарыда аталған каталогтың файлдар мен/немесе кіші каталогтарының тізімін қамтитын веб-бет (әдетте HTML форматында) динамикалық түрде (нақты уақытта) құрылады. Егер оны құру мүмкін болмаса, қате хабарлама қайтарылады. Кейбір веб-сервер бағдарламалары каталог тізімдерін өзгертуге мүмкіндік береді, веб-бет үлгісін (HTML құжаты, онда $(FILE NAME), $(FILE SIZE) сияқты орны бар ұяшықтар болады, олар веб-сервер каталогта табылған әрбір файлдың мәліметтерімен алмастырылады, мысалы, index.tpl) немесе HTML және кіріктірілген бастапқы кодты пайдалану арқылы (ол нақты уақытта түсіндіріліп, орындалады, мысалы, index.asp) және/немесе CGI, SCGI, FCGI сияқты динамикалық индекс бағдарламаларын қолдау арқылы. Динамикалық түрде құрылған каталог тізімдерін пайдалану көбінесе веб-сайттың таңдалған бірнеше каталогтарымен шектеледі, себебі мұндай құру статикалық индекс бетін жіберуге қарағанда опералық жүйенің көбірек ресурстарын қажет етеді. Каталог тізімдерінің басты мақсаты – файлдарды жүктеуге мүмкіндік беру (әсіресе олардың аттары, көлемі, өзгерту күні мен уақыты немесе файл атрибуттары кездейсоқ/жиі өзгеріп отыруы мүмкін), сұраушы пайдаланушыға қосымша ақпарат беруді қажет етпейді.
Жауапты хабарламаны жіберу
Веб-сервер бағдарламалары клиенттердің сұраныс хабарламаларына жауап ретінде жауап хабарламаларын жібере алады. HTTP серверінің ішкі қателерінен туындаған қателер. Клиенттік шолғыш қате жауабын / хабарламасын алған кезде, егер ол негізгі пайдаланушы сұранысына қатысты болса (мысалы, веб-бет сияқты веб-ресурстың URL-адресі), онда әдетте бұл қате хабарламасы шолғыштың бір терезесінде / хабарламасында көрсетіледі.
Файл кэші
Тарихи тұрғыдан алғанда, жиі, кездейсоқ және жылдам қол жеткізілуі қажет болатын файлдардағы статикалық мазмұн 1960-шы/1970-ші жылдардың ортасынан бастап көбінесе электромеханикалық дискілерде сақталды; алайда, RAM жылдамдығымен салыстырғанда, осы типтегі құрылғылардан мәліметтерді оқу және жазу әрқашан өте баяу операциялар болып саналды. Сондықтан, алғашқы операциялық жүйелерден бастап, жиі қол жетілетін деректер/файлдардың I/O операцияларын жылдамдету үшін алдымен дискілік кэштер, содан кейін операциялық жүйенің файлдық кэшіндегі қосалқы жүйелер әзірленді. Операциялық жүйенің файлдық кэшінің көмегімен де, дискіде сақталған каталогтар мен файлдарға қатысты I/O операцияларының салыстырмалы/кейде баяу болуы жоғары деңгейдегі веб-серверлердің күтілетін өнімділігін арттырудағы кедергіге айналды, әсіресе 1990-шы жылдардың ортасынан бастап, веб-Интернет трафигінің экспоненциалды өсуімен және Интернет/желі желілерінің жылдамдығының үнемі артуымен бірге. Статикалық файлдарды тиімдірек қызмет көрсету және осылайша секундына сұраныс/жауап санын (RPS) арттыру мәселесі 1990-шы жылдардың ортасынан бастап зерттеле бастады, мақсаты – веб-сервер бағдарламаларында іске асырылатын пайдалы кэш модельдерін ұсыну. Қазіргі кезде көптеген танымал/жоғары өнімділік веб-сервер бағдарламалары веб-серверді пайдалануға арналған және олардың нақты іске асырылуы мен параметрлерін қолданатын өздерінің userland файлдық кэштерін қамтиды. RAID және/немесе жылдам қатты күйдегі дискілердің (өте жоғары I/O жылдамдығына ие сақтау құрылғылары) кеңінен қолданылуы файлдық кэшті веб-серверге енгізудің артықшылығын сәл төмендетті, бірақ әрине, жоққа шығармады.
Динамикалық кэш
Динамикалық мазмұн, ішкі модуль немесе сыртқы бағдарлама арқылы шығарылатын, әрқашан жиі өзгермейді (кілттер / параметрлермен бірегей URL берілгенде) және сондықтан, біршама уақытқа (мысалы, 1 секундтан бірнеше сағатқа дейін немесе одан да көпке дейін) алынған нәтиже RAM-де немесе тіпті жылдам дискіде кэштелеуі мүмкін. Динамикалық кэштің типолық қолданылуы – жаңалықтар, ауа райы, кескіндер, карталар сияқты жиі өзгермейтін (мысалы, әр n минут сайын) және минутына / сағатына көптеген клиенттер қол жеткізетін динамикалық веб-беттері бар веб-сайттарда. Мұндай жағдайларда, ішкі модульді немесе сыртқы бағдарламаны шақырмай, кэштелген мазмұнды қайтару пайдалы, себебі клиенттердегі браузер кэштерінде сұралған мазмұнның жаңартылған көшірмесі көбінесе болмайды. Дегенмен, мұндай кэштердің көпшілігі аппараттық ресурстар (CPU, RAM, дискілер) үшін веб-серверлермен бәсекелеспеу мақсатында сыртқы серверлер (мысалы, кері прокси) арқылы немесе арнайы қосымшалар басқаратын жеке компьютерлерде динамикалық деректердің шығысын сақтау арқылы іске асырылады (мысалы, memcached).
Желілік серверлер мен пайдаланушы режиміндегі веб-серверлер
Веб-серверлік бағдарламалық қамтамасыз ету операциялық жүйеге енгізіліп, ядролық кеңістікте орындалуы немесе пайдаланушы кеңістігінде орындалуы мүмкін (басқа әдеттегі қолданбалар сияқты). Ядролық режимде жұмыс істейтін веб-серверлер (әдетте ядролық кеңістіктегі веб-серверлер деп аталады) ядролық ресурстарға тікелей қол жеткізе алады, сондықтан теория бойынша пайдаланушы режимінде жұмыс істейтіндерден жылдам болуы мүмкін; алайда, веб-серверді ядролық режимде орындаудың кемшіліктері бар, мысалы: бағдарламалық жасақтаманы әзірлеу (түзету) қиындықтары, ал орындалу кезіндегі маңызды қателер операциялық жүйенің ядросында ауыр проблемаларға әкелуі мүмкін. Пайдаланушы режимінде жұмыс істейтін веб-серверлер жүйеден көбірек жадты немесе процессор ресурстарын пайдалануға рұқсат сұрауы керек. Мұндай сұраныстар уақытты қана емес, кейде қанағаттандырылмауы мүмкін, себебі жүйе өз пайдалануы үшін ресурстарды сақтайды және аппараттық ресурстарды басқа барлық іске қосылған қолданбалармен бөлісуге жауапты. Пайдаланушы режимінде орындау буферлердің/деректердің көбірек көшірмелерін (пайдаланушы кеңістігі мен ядро кеңістігі арасында) пайдалануды білдіре алады, бұл пайдаланушы режиміндегі веб-сервердің өнімділігін төмендетуі мүмкін. Қазіргі уақытта дерлік барлық веб-серверлік бағдарламалық қамтамасыз ету пайдаланушы режимінде орындалады (өйткені жоғарыда аталған көптеген шағын кемшіліктер жылдам аппараттық құралдар, операциялық жүйенің жаңа нұсқалары, әлдеқайда жылдам операциялық жүйелік шақырулар және жаңа оптимизацияланған веб-серверлік бағдарламалық қамтамасыз ету арқылы шешілді). Сондай-ақ, веб-серверлік бағдарламалық қамтамасыз етуді салыстыру арқылы олардың қайсысы ядролық режимде немесе пайдаланушы режимінде (ядролық кеңістік немесе пайдаланушы кеңістік деп те аталады) жұмыс істейтінін анықтауға болады.
Өнер көрсетулер
Пайдаланушы тәжірибесін жақсарту үшін (клиент / браузер жағынан) веб-сервер клиент сұраныстарына мүмкіндігінше жылдам жауап беруі керек; егер конфигурация бойынша кейбір файлдар үшін мазмұн беру жылдамдығы шектелмесе (мысалы, үлкен немесе өте үлкен файлдар), сондай-ақ қайтарылған деректер мазмұны да жоғары жылдамдықпен жіберілуі тиіс. Басқаша айтқанда, веб-сервер веб-трафиктің жоғары жүктемесі кезінде де әрқашан өте жауапты болуы керек, пайдаланушының жалпы күту уақытын (браузер уақыты + желі уақыты + веб-сервер жауап беру уақыты) ең төмен деңгейде ұстау үшін.
Жүктілік шектері
Веб-серверде (бағдарламалық қондырма) әрбір жұмыс жағдайларының үйлесімі үшін әдетте алдын ала белгіленген жүктеме шектері болады, өйткені ол операциялық жүйе ресурстарымен шектеледі және тек шектеулі мөлшерде бір уақыттағы клиенттік қосылымдарды ғана қабылдай алады (әдетте әрбір белсенді веб-сервер процесі үшін 2 мен бірнеше он мың арасында, C10k және C10M мәселелерін де қараңыз). Веб-сервер жүктеме шектеріне жақындағанда немесе одан асып кеткенде, ол жүктемеге шалынып, жауапсыз болуы мүмкін.
Ауыр жүктеме себептері
Кез келген уақытта веб-серверлер келесі бір немесе бірнеше себептерге байланысты жүктелуі мүмкін (мысалы). Заңды веб-трафиктің артық болуы. Мыңдаған немесе тіпті миллиондаған клиенттер қысқа уақыт ішінде веб-сайтқа қосылуы мүмкін, мысалы, Slashdot эффектісі. Қызмет көрсетуден бас тартудың үлестірілген шабуылдары. Қызмет көрсетуден бас тарту (DoS) немесе үлестірілген қызмет көрсетуден бас тарту (DDoS) шабуылы – компьютерлік немесе желілік ресурсты оның арналған пайдаланушыларына қолжетімсіз ету әрекеті. Миллиондаған зарарланған компьютерлердің (олардың арасында координацияланбаған) салдарынан кейде қалыпты емес трафик туындататын компьютерлік құрттар. XSS құрттары миллиондаған зарарланған браузерлер немесе веб-серверлер арқылы жоғары трафик тудыруы мүмкін. Интернет-боттар. Ірі веб-сайттардағы, желі ресурстары (мысалы, өткізу қабілеті) және/немесе аппараттық ресурстары (процессорлар, жад, дискілер) өте шектеулі болғанда сүзгіленбеген/шектелмеген трафик. Интернет (желі) жылдамдығының төмендеуі (мысалы, пакеттердің жоғалтуынан), нәтижесінде клиенттердің сұраныстарына жауап беру баяулап, қосылымдар саны сервердің шектеріне жетеді. Динамикалық мазмұнды ұсынатын веб-серверлер артқы компьютерлерден (мысалы, деректер базасы) келетін баяу жауаптарды күтуі мүмкін, себебі көптеген сұранымдар деректер базасы деректерін тым көп енгізу немесе жаңартумен араласады; мұндай жағдайларда веб-серверлер HTTP клиенттеріне жауап беру үшін артқы деректерден жауап күтуі керек, бірақ осы күту кезінде көптеген жаңа клиенттік қосылымдар/сұраныстар келіп түсіп, олар жүктемеге ұшырайды. Веб-серверлердің (компьютерлердің) ішінара қолжетімсіздігі. Бұл қажетті немесе шұғыл техникалық қызмет көрсету немесе жаңарту, аппараттық немесе бағдарламалық жасақтамалардың (мысалы, деректер базасының) істен шығуы сияқты себептерден туындауы мүмкін; мұндай жағдайларда қалған веб-серверлер тым көп трафик алып, жүктемеге ұшырауы мүмкін.
Ауыр жүктің белгілері
Веб-сервердің артық жүктелу белгілері әдетте мыналар (мысалы). Сұраулар (мүмкін ұзақ) кешіктірілімдермен (бір секундтан бірнеше жүз секундқа дейін) орындалады. Веб-сервер HTTP қате кодын қайтарады, мысалы 500, 502, 503, 504, 408, тіпті уақыт-уақыт 404. Веб-сервер кез келген мазмұн жібермес бұрын TCP қосылымдарын қабылдамайды немесе үзеді. Өте сирек жағдайларда веб-сервер сұралынған мазмұнның тек бір бөлігін ғана қайтарады. Бұл мінез-құлық, тіпті әдетте артық жүктелудің салдары болса да, қате ретінде қарастырылуы мүмкін.
Нарықтық үлесі
Төменде Netcraft-тің интернеттегі ең ірі веб-серверлердің барлық сайттарының нарықтық үлесінің соңғы статистикасы келтірілген. + Веб-сервер: Барлық сайттардың нарықтық үлесі Күн nginx (Nginx, Inc.) Apache (ASF) OpenResty (OpenResty Software Foundation) Cloudflare Server (Cloudflare, Inc.) IIS (Microsoft) GWS (Google) Басқалары 2021 жылдың қазаны 34.95% 24.63% 6.45% 4.87% 4.00% (*) 4.00% (*) 22%-дан аз 2021 жылдың ақпаны 34.54% 26.32% 6.36% 5.0% 6.5% 3.90% 18%-дан аз 2020 жылдың ақпаны 36.48% 24.5% 4.00% 3.0% 14.21% 3.18% 15%-дан аз 2019 жылдың ақпаны 25.34% 26.16% N/A N/A 28.42% 1.66% 19%-дан аз 2018 жылдың ақпаны 24.32% 27.45% N/A N/A 34.50% 1.20% 13%-дан аз 2017 жылдың ақпаны 19.42% 20.89% N/A N/A 43.16% 1.03% 15%-дан аз 2016 жылдың ақпаны 16.61% 32.80% N/A N/A 29.83% 2.21% 19%-дан аз
ЕСКЕРТУ: (*) көрсетілген пайыздық көрсеткіштер толық емес, себебі дереккөз бетінде ондық мәндер жарияланбайды (графикте тек дөңгеленген мәні көрсетіледі).