Три найпопулярніші веб-сервери. W3Tech: частка nginx у світі зросла до третини, Apache впав нижче половини

Декілька місяців тому, в одній зі своїх минулих статей, я опублікував цікаві дані від компанії comScore, яка щомісяця підраховує. Якщо ви читали ту статтю, то, мабуть, пам'ятайте, що Росія стала лідером у Європі за кількістю інтернет-користувачів. Так от сьогодні я хочу надати вам ще одні досить цікаві дані, але вже від іншої, не менш популярної компанії – від компанії Netcraft. Сьогодні ми з вами дізнаємось, скільки існує сайтів у мережі Інтернет, і які web-сервери є найпопулярнішими у світі.

Якщо вірити компанії Netcraft, то станом на січень 2012 року в мережі Інтернет налічувалося аж 582,72 млн. сайтів – це 27,23 млн., або на 4,9% більше, ніж було зафіксовано місяцем раніше, тобто у грудні 2010 року . Як бачите, з кожним місяцем «всесвітнє павутиння» лише розростається, завдяки чому інформаційний простір нашої планети стає дедалі більше. І зауважте, що це ще межа. Експерти прогнозують, що кількість користувачів та кількість сайтів у мережі Інтернет продовжить збільшуватися, причому це зростання буде суттєвим – принаймні найближчими роками.

Також розрахунки компанії Netcraft показують, що web-сервер Apache продовжує залишатися найпопулярнішим у світі – у січні 2012 року його ринкова частка становила аж 64,91%.

А так, взагалі-то, трійка лідерів виглядає так:

  • Apache - 64,91% (у грудні 2010 року було 65,22%);
  • Microsoft - 14,46% (14,86%);
  • Nginx - 9,63% (8,85%).

Виходить, що зараз лише російський web-сервер nginx збільшує свою ринкову частку, тоді як лідери її втрачають, хоч і дуже повільними темпами. При цьому варто відзначити один важливий момент – якщо при статистичних розрахунках брати до уваги лише активні сайти мережі Інтернет, то за підсумками січня 2012 web-сервер nginx незначно, але все-таки випередив у рейтингу web-сервер Microsoft.

  • Apache - 57,93% (місяць тому 58,21%);
  • Nginx - 12,18% (11,61%);
  • Microsoft - 12,14% (12,31%);
  • Google - 7,90% (8,13%).

У цьому випадку ринкова частка також зростає лише у web-сервера nginx, тоді як інші потихеньку втрачають свої позиції. Адже ще рік тому, в січні 2011 року, ринкова частка російського web-сервера була на позначці 8,23%, в результаті чого він займав лише четверту позицію рейтингу, поступаючись і Microsoft (16,76%) і навіть Google (11, 90%. Таким чином, ми бачимо серйозне зростання популярності nginx, і як кажуть його представники, це зростання має необоротний характер – принаймні до кінця 2012 року вони розраховують збільшити свою ринкову частку до 18%. Ціль реальна, тому побажаємо їм удачі.

А щоб досягти поставленої мети, влітку 2011 року була створена компанія «Nginx Inc.», яка тепер здійснюватиме всі роботи над проектом «nginx». При цьому восени того ж таки 2011 року дана компанія отримала дуже пристойні інвестиції (3,0 млн. доларів), тому не варто дивуватися, якщо web-сервер nginx за підсумками 2012 року все ж таки збільшить свою ринкову частку до очікуваних 18%. Тож нам залишається лише чекати та стежити за новинами.

|

Програми, розроблені в Ruby, можна розгорнути в загальний доступза допомогою однієї з безлічі веб-серверів. Кожен веб-сервер унікальний і має свої переваги, проте всі вони мають дещо спільне: вони засновані на інтерфейсі Rack.

Ця стаття пропонує короткий оглядпопулярних веб-серверів для додатків Ruby, а також ознайомить вас зі специфікацією Rack та сполучним програмним забезпеченням.

Примітка: Більш детальну інформаціюпро сполучне програмне забезпечення можна дізнатися.

Інтерфейс Rack

У сучасному світі розробки веб-додатків можливість комбінувати та підбирати відповідні веб-сервери та інші програми та технології вкрай необхідна. Насправді, це чи не найзатребуваніший аспект будь-якої мови програмування чи фреймворку. Мабуть, найпростіше як приклад тут можна навести середовища розробки, тестування та виробництва програми – всі вони мають бути різними.

Для цього в 2007 році вийшов Rack, модульний інтерфейс веб-серверів Ruby. Сьогодні він використовується багатьма веб-серверами та фреймворками (Espresso, Mack, Ruby on Rails, Sinatra тощо).

Незважаючи на угоди про назву та різні пояснення для різних мов програмування та доменів, специфікації для взаємодії додатків дуже схожі (якщо не ідентичні). Хоча на відміну від специфікації Python WSGI, за прикладом якої створено Rack та багато інших специфікацій, Rack є ще й проміжним програмним забезпеченням.

Проміжне програмне забезпечення Rack (доступно як gem) реалізує специфікацію Rack; воно ділить вхідні HTTP-запити різні етапи, потім обробляє їх частинами, після чого посилає відповідь веб-додатка (контролера). Програма Rack складається з двох окремих компонентів: обробника та адаптера, за допомогою яких відбувається обмін даними між веб-серверами та програмами (фреймворками).

Огляд веб-серверів для Ruby

Тепер можна поговорити про найбільш популярні сучасні веб-сервери, зрозуміти їх особливості та підібрати найбільш підходяще рішення для своєї програми.

Примітка: Веб-сервери розташовані в алфавітному порядку

Phusion Passenger: швидкий веб-сервер та сервер додатків

Багато розробників Ruby on Rails рекомендують використовувати для підтримки програм саме Passenger. Це зрілий та багатофункціональний сервер, який відповідає найсуворішим вимогам розгортання та дозволяє спростити встановлення та запуск програми. Він усуває традиційну архітектуру на основі сервера-посередника шляхом прямої інтеграції в веб-сервери Apacheта Nginx. Тому в спільноті Ruby (Rails) він також часто згадується як mod_rails та mod_rack.

Особливості Passenger

Passenger надає можливість працювати з кількома програмами, розміщеними на одному сервері.

Також він підтримує обробку повільних клієнтів. Passenger поміщає всі запити та відповіді в буфер, що дозволяє запобігти атакам, що засмічують ресурси системи.

Веб-сервер Passenger дуже популярний і часто використовується серед виробництва. Крім того, він має активну спільноту, в якій можна отримати багато корисних порадта підказок. Компанія, що займається розробкою Passenger, надає комерційну підтримку.

Версія Passenger із відкритим вихідним кодомнадає мультипроцесний однопотоковий режим, а комерційна версія підтримує однопотоковий і багатопотоковий режими.

Також комерційна версія надає безліч «просунутих» функцій: паралелізм, багатопоточність, масове розгортання, управління ресурсами, обмеження ресурсів та ін.

Примітка: Більше інформації про Passenger можна знайти на сайті проекту . Про версію Passenger Enterprise – .

Puma: сучасний веб-сервер для Ruby

Puma – це високопродуктивний веб-сервер для програм Ruby. Він заснований на веб-сервері Mongrel, який свого часу додав кілька революційних функцій і багато в чому вплинув на розробку програм Ruby. Розробник Puma (Evan Phoenix) трансформував операційну структуру Mongrel, перейшовши на Rack (і, таким чином, усуваючи деякі проблеми з продуктивністю), і розробив програму підтримки паралелізму.

Особливості Puma

Puma не вимагає багато місця та використовує мало ресурсів.

Веб-сервер Puma надає кілька режимів роботи: він дозволяє задати мінімальне та максимальна кількістьпотоків, а також підтримує кластерний режим, в якому можна використовувати розгалужені процеси для одночасної обробки запитів.

Він заснований на парсер Mongrel і багато в чому успадкував його код.

Веб-сервер Puma розроблений для Rubinius, але може працювати і з JRuby

Він надає простий, але досить великий і гнучкий набір конфігурацій, що дозволяє легко підготувати веб-сервер як до розробки, так і до оточення.

«З коробки» Puma не підтримує розміщення та виробництва кількох програм, але це можна зробити за допомогою спеціального інструменту Jungle.

Thin: простий та швидкий HTTP-сервер

Thin – це дуже популярний сервердодатків; його творці стверджують, що це найбільш «безпечний, стабільний, швидкий та розширюваний веб-сервер Ruby». Це активно розвивається. Він заснований на трьох основних бібліотеках Ruby:

  • Парсер Mongrel.
  • Мережева бібліотека EventMachine
  • Проміжне програмне забезпечення Rack

Особливості Thin

HTTP-сервер Thin призначений для роботи з будь-яким фреймворком, який реалізує специфікацію Rack. Для цього він завантажує конфігураційні файли Rack.

Будучи заснованим на EventMachine, Thin може обробляти довгі запити без допомоги зворотного проксі-сервера (на відміну від інших веб-серверів).

Примітка: Щоб дізнатися про Thin більше, перейдіть на сайт проекту

Unicorn: HTTP-сервер на основі Rack для швидких клієнтів та Unix

Unicorn – це зрілий повнофункціональний сервер програм для Ruby. Пізніше він був адаптований до роботи з Python. Принцип роботи Unicorn такий: веб-сервер виконує не всі завдання, а лише ті, за які відповідає безпосередньо він, решту завдань він передає іншим програмам, які краще справляються з їх виконанням.

Особливості Unicorn

Головний процес Unicorn породжує робочі процеси обробки запитів відповідно до заданим параметрам. Також цей процес відстежує робочі процеси, щоб запобігти проблемам з ресурсами. Тобто якщо процес вимагає багато часу або ресурсів, сервер зупинить його Unicorn.

Як згадувалося вище, Unicorn використовує операційну систему для балансування навантаження; при цьому він може передавати завдання іншим сервісам. Завдяки цьому запити не накопичуються.

Як і NGINX, Unicorn дозволяє розгортати програми, не скидаючи поточні підключення клієнтів. Це дуже корисна функція під час оновлення програми.

Інші корисні функції Unicorn:

  • Усі робочі процеси запускаються у межах певного ізольованого адресного простору та обслуговують запити по одному.
  • Хуки before_fork та after_fork дозволяють боротися з розгалуженням процесів.
  • Механізм копіювання під час запису для керування пам'яттю дозволяє заощаджувати пам'ять.
  • Веб-сервер може слухати кілька інтерфейсів.

Примітка: Більше про Unicorn – .

Tags: ,

Як правило, у рядового користувача такі поняття, як веб-сервер або хостинг, асоціюються з чимось абсолютно незрозумілим. Тим часом нічого складного в цьому питанні немає. Спробуємо пояснити, що являє собою web server, навіщо він потрібен і як працює, особливо не вдаючись у технічні подробиці, а, так би мовити, на пальцях. Окремо зупинимося на питанні про те, як створити та налаштувати такий сервер на домашньому комп'ютерному терміналі або ноутбуку.

Що таке веб-сервер?

Найголовніше в даному питанні- зрозуміти, що сервер такого типу є чим іншим, як комп'ютером в інтернеті з відповідним встановленим програмним забезпеченням.

Але це не означає, що у домашніх умовах не можна створити власну конфігурацію. Оскільки у нас найпоширенішими є операційні системи Windows, питання про те, як створити веб-сервер на Ubuntu (Linux), не розглядатимуться.

Навіщо потрібні web-сервери?

На серверах цього в інтернеті зберігається багато інформації. При цьому ті ж таки антивіруси для оновлення власних баз даних звертаються саме до них. Користувач також має безпосереднє відношення до таких серверів, оформляючи запити у браузері (пошук інформації, звернення до якоїсь сторінки тощо).

Ось і виходить, що всі сторінки, присутні в інтернеті, зберігаються саме на веб-серверах, до яких з одного боку виконується запит користувача або звернення встановленої програми, з другого - видається результат тим самим сервером, якого виробляється спроба доступу.

Як все це працює?

Всі користувачі звикли, що для входу на якийсь ресурс в інтернеті (веб-сторінку), на якому розташовується інформація певного типу, в адресному рядку просто вводиться префікс www (або http) та наступне ім'я. Але ніхто не замислюється над тим, яким чином web server розуміє запит і видає результат.

Насправді тут треба розрізняти поняття сервера та клієнта. У нашому випадку сторінка, яка розміщена в інтернеті, збережена саме на віддаленому сервері. Користувальницький комп'ютер виступає у ролі клієнта, якого і проводиться звернення.

Для доступу до Інтернету застосовуються програми, які називаються веб-браузерами. Вони переводять запит користувача в цифровий код, що розпізнається веб-сервером. Сервер його обробляє та видає відповідь у відповідному коді, а браузер вже перетворює мільйони нулів та одиниць у нормальний вигляд із текстовою, графічною, звуковою або відеоінформацією, яка розміщується на сторінці.

Найпопулярніші web-сервери

З усього серверного програмного забезпечення, як вважається, найпоширенішими є Apache та Microsoft IIS. Перший є більш популярним і більшою мірою використовується в UNIX-подібних системах, хоча і може встановлюватися в середу Windows. Крім того, сервер Apache є абсолютно безкоштовним програмним забезпеченням і сумісний практично з усіма відомими операційними системами. Проте, як зазначається, призначене це програмне забезпечення переважно для професійних програмістів і розробників.

Програмний продукт від Microsoft розрахований на середнього користувача, який встановити і налаштувати такий веб-сервер для Windows зможе без додаткової допомогикваліфікованого спеціаліста.

Проте, якщо виходити з офіційної статистики, програмне забезпечення Apache використовує близько 60% всіх існуючих серверів, тому питання встановлення та налаштування початкової конфігурації розглянемо саме на його прикладі.

Веб-сервер на домашньому комп'ютері: встановлення

Для інсталяції потрібно завантажити спеціальний серверний пакет, що скорочено позначається як WAMP, в який входить три основних компоненти:

  • Apache - програмна оболонкасервера, яка може працювати самостійно, але тільки у разі відсутності на сторінках динамічного контенту.
  • PHP - мова програмування, що використовується надбудовами для керування серверами з динамічним вмістом типу WordPress, Joomla, Drupal.
  • MySQL - уніфікована система управління базами даних, використовувана знову ж таки при створенні сайтів з динамічним контентом.

Інсталяцію можна зробити з пакета WampServer. Для цього достатньо дотримуватися вказівок «Майстра», який на одній із стадій запропонує вибрати інтернет-браузер, який використовуватиметься за замовчуванням.

Для цього потрібно буде перейти в папку з файлом браузера, що виконується (якщо це не Internet Explorerзазвичай вона розташовується в директорії Program Files). Водночас сам браузер слід додати до списку винятків брендмауера Windows. На фінішній стадії ставиться галочка напроти пункту негайного запуску, після чого у системному треї з'явиться відповідний значок, на який потрібно натиснути та змінити вибрати запуск локального хоста (localhost).

Якщо все зроблено правильно, з'явиться Домашня сторінкасервера. Далі буде запропоновано встановити додаткові компоненти (якщо цього не зробити, система видасть помилку). В основному інсталяція стосується додаткових надбудов, елементів та компонентів, які будуть використовуватись сервером надалі.

Приклад налаштування та тестування сервера

Налаштування веб-сервера дещо складніше. Спочатку в меню системного трею вибирається перехід до папки WWW (місце зберігання надбудов або файлів HTML). Після цього прописати наступний текст у «Блокноті»:

WAMP тест!

Вітаю!

"; ?>

Можете просто скопіювати текст у «Блокнот» і зберегти файл під ім'ям index.php у тій самій папці WWW (хоча можна обійтися і без того, оскільки цей крок застосовується виключно для перевірки локального хоста). Замість привітання, можете вставити будь-який інший текст або фразу.

Потім у браузері потрібно оновити сторінку (F5), після чого на екрані з'явиться вміст. Але для інших комп'ютерів сторінка недоступна.

Щоб відкрити доступ, потрібно змінити файл httpd.conf, прописавши розділ, який починається з наступні рядки:

Order Allow,Deny

Замість післямови

Звичайно, що стосується розуміння суті функціонування або налаштувань домашнього веб-сервера, тут наведено лише початкову та коротку інформацію, так би мовити, для загального розуміння. Насправді всі процеси є набагато складнішими, особливо в частині перетворення запитів і видачі відповідей, не кажучи вже про налаштування сервера в домашніх умовах. Якщо користувач має бажання розібратися в цих питаннях, тут не обійтися хоча б без початкових знань тієї ж надбудови WordPress та мови PHP. З іншого боку, для публікації примітивних сторінок, що містять в основному лише текстову інформацію, можна використовувати ці початкові відомості.

Привіт, ця стаття розглядає 5 найпопулярніших варіантів налаштування сервера для веб-програми. Які варіанти бувають і який із них вибрати?

Існує безліч факторів, які необхідно враховувати при виборі серверного оточення (environment), такі як продуктивність, масштабованість, доступність, надійність, вартість та простота управління.

У статті представлений набір серверних оточень, що найчастіше використовуються коротким описом, включаючи плюси та мінуси. Усі концепції можна використовувати у різних комбінаціях друг з одним, а кожне оточення має різні вимоги, отже немає єдиної правильної конфігурації.

1. Все на одному сервері

Оточення знаходиться на одному сервері. Для типового веб-програми вона буде включати веб-сервер, сервер додатків і сервер баз даних. Приватним випадком реалізації цього набору є , назва якого є скороченням від Linux, Apache, MySQL і PHP, на одному сервері.

Приклад використання:Добре підходить для швидкого розгортання програми, так як це найпростіша конфігурація з усіх, однак вона дає мало можливостей щодо масштабованості та ізоляції компонентів.

Плюси:

  • Простота

Мінуси:

  • Додаток і база даних використовують одні й самі ресурси сервера (CPU, пам'ять, I/O тощо.), що, крім потенційно низької продуктивності, утрудняє визначення джерела (додаток чи база даних) цієї найнижчої продуктивності.
  • Важко здійснювати горизонтальне масштабування.

2. Виділений сервер баз даних

Система управління базами даних (СУБД) може бути відокремлена від решти оточення, щоб виключити конкуренцію за ресурси сервера між додатком та базою даних та посилити безпеку, прибравши базу даних із DMZ, загальнодоступного інтернету.

Приклад використання:Добре підходить для швидкого розгортання програми, але усуває проблему конкуренції програми та бази даних за одні системні ресурси.

Плюси:

  • Додаток та база даних не конкурують за одні й ті самі ресурси сервера (CPU, пам'ять, I/O тощо).
  • Ви можете вертикально масштабувати кожен компонент (додаток та базу даних) незалежно один від одного, додаючи додаткові ресурси до потрібного сервера.
  • При певних налаштуваннях це може підвищити безпеку, прибравши базу даних із DMZ.

Мінуси:

  • Процес установки трохи складніший, ніж у разі використання одного сервера.
  • Можуть виникати проблеми з продуктивністю, якщо мережеве з'єднанняміж двома серверами має великий час відгуку (наприклад, сервери географічно віддалені один від одного) або пропускна спроможністьнедостатня для даних, що передаються.

3. Балансувальник навантаження (зворотний проксі)

Балансувальники навантаження можуть бути додані в оточення сервера для збільшення продуктивності та надійності шляхом розподілу навантаження між кількома серверами. Якщо один із серверів впаде, інші сервери будуть обробляти вхідний трафік, поки сервер, що впав, знову не запрацює. Балансувальник навантаження так само може бути використаний для обслуговування кількох програм через один і той же домен і порт за допомогою зворотного проксі.

Приклади програмного забезпечення, що підтримує зворотний проксі: HAProxy і Varnish.

Приклад використання:Корисний для оточення, яке вимагає масштабування шляхом додавання додаткових серверів, також відоме як горизонтальне масштабування.

Плюси:

  • Уможливлює горизонтальне масштабування, тобто ресурси оточення можуть бути збільшені шляхом додавання до нього нових серверів.
  • Може захистити від DDOS-атак шляхом обмеження клієнтських з'єднань до прийнятної кількості та частоти.

Мінуси:

  • Балансувальник навантаження може стати вузьким місцем у продуктивності, якщо він відчуває брак ресурсів або погано налаштований.
  • Може створити додаткові складнощі, що вимагають додаткових зусиль від адміністратора, наприклад, робота з програмами, які вимагають так званих липких сесій (sticky session).

4. HTTP Accelerator (кешуючий зворотний проксі)

HTTP accelerator, або кешуючий HTTP-запити зворотний проксі-сервер, може бути використаний для зменшення часу, необхідного для надання контенту користувачеві за допомогою різних методів. Основою метод, що використовується з HTTP accelerator, це кешування відповідей від веб-сервера або сервера додатків у пам'яті, при цьому наступні запити на той самий контент можуть бути оброблені швидко і меншою кількістю зайвих взаємодій з веб-сервером або сервером додатків.

Приклади програмного забезпечення, яке підтримує HTTP acceleration: Varnish, Squid, Nginx.

Приклад використання:Корисний для динамічних веб-програм з важким контентом або з великою кількістю файлів, до яких можливий одночасний доступ.

Плюси:

  • Підвищує продуктивність сайту шляхом зниження навантаження на процесор веб-сервера за рахунок кешування та стиснення, тим самим збільшуючи кількість користувачів, що обслуговуються.
  • Може бути використаний як балансувальник навантаження зворотного проксі.
  • Деяке програмне забезпечення для кешування може захищати від атак DDOS.

Мінуси:

  • Потрібне налаштування для досягнення найкращої продуктивності.
  • Якщо сам характер запитів користувачів передбачає можливості ефективного кешування, це може знизити продуктивність сервера.

5. Реплікація бази даних за схемою ведучий-відомий (Master-Slave)

Одним із способів покращення продуктивності системи бази даних, до якої запитів на читання відбувається набагато більше, ніж на запис, як, наприклад, в системах управління контентом (CMS), є використання реплікації бази даних за схемою ведучий-відомий. Така схема передбачає наявність одного ведучого та одного і більше ведених вузлів. У такому разі всі записи надсилаються на провідний вузол, а запити на читання можуть бути розподілені між усіма вузлами.

Приклад використання:Дає хороше збільшення продуктивності додатка у частині читання з бази даних.

Ось приклад реплікації бази даних за схемою ведучий з одним веденим вузлом:

Плюси:

  • Покращує продуктивність читання бази даних шляхом розподілу запитів на читання між веденими вузлами.
  • Може покращити продуктивність запису шляхом використання провідного вузла виключно для запису (в такий спосіб він не витрачає час на обслуговування запитів на читання)

Мінуси:

  • Додаток, що працює з базою даних, повинен мати механізм визначення вузлів, на які потрібно надсилати запити на читання та запис.
  • Оновлення ведених вузлів асинхронні, тому є можливість отримати не найсвіжіші дані при запиті.
  • Якщо провідний вузол перестає працювати, не можна робити будь-які оновлення бази, доки проблема не буде вирішена.
  • Не має вбудованих резервних засобів у разі виходу з ладу головного вузла.

приклад: комбінування концепцій

Можна розподіляти навантаження серверів кешування, крім серверів додатків, і використовувати реплікацію бази даних в єдиному оточенні. Метою об'єднання цих методів є отримання переваг кожного підходу без зайвої складності.

Ось зразкова діаграма того, як може виглядати серверне оточення:

Припустимо, що балансувальник навантаження налаштований на розпізнавання статичних запитів (таких як зображення, CSS, JavaScript тощо) і надсилає ці запити до серверів кешування, а інші запити - до серверів додатків.

Ось що буде відбуватися, коли користувач надішле запит на динамічний контент:

  1. Користувач запитує динамічний контент з http://example.com/(Балансувальник навантаження).
  2. Балансувальник навантаження посилає запит на сервер програми (app-backend).

Якщо користувач запитує статичний контент:

  1. Балансувальник навантаження перевіряє кеш (cache-backend) на предмет того, чи закешовано запитуваний контент.
  2. Якщо закешований, то запитуваний контент повертається балансувальника навантаження, переходимо в кроці 7. Якщо не закешований, сервер кешування перенаправить запит на сервер програми через балансувальник навантаження.
  3. Балансувальник навантаження перенаправить запит на сервер програми.
  4. Сервер програми (app-backend) читає з бази та повертає запитуваний контент назад балансувальнику навантаження.
  5. Балансувальник навантаження перенаправляє відповідь серверу кешування (cache-backend).
  6. Сервер кешування кешує отриманий контент та повертає його балансувальнику навантаження.
  7. Балансувальник навантаження повертає запитуваний контент користувачеві.

Дане оточення має дві можливі точки відмови (балансувальник навантаження та провідний сервер бази даних), але забезпечує інші переваги в області надійності та продуктивності, описані раніше у кожному з пунктів.

Тепер ви повинні мати гарне уявлення про те, що саме ви будете використовувати для вашого власного додатку або програм. Якщо ви працюєте над покращенням свого оточення, пам'ятайте, що краще йти ітераційним шляхом, щоб уникнути зайвого ускладнення.



Завантаження...
Top