Оговорюсь сразу, поставленная цель — не узнать максимум возможностей системы, а выяснить принципиальную работоспособность современных микрокомпьютеров в качестве полноценных веб-серверов и помочь оценить конкурентноспособность относительно виртуальных хостингов. Поэтому, в данной статье не рассматриваются вопросы оптимизации и изучения предельно допустимой нагрузки. Вместо этого эксперимент проводится на действующих сайтах с реальными посетителями.

Вступление


Вероятно, многие, кто знаком с микрокомпьютерами съедобных семейств (Raspberry, Banana, Orange...), задумывались о расширении круга их использования. Изначально предназначенные для систем типа «умный дом» и робототехники, они становятся всё более быстрыми при сохранении размеров. Малое энергопотребление с увеличением мощности процессоров делает их привлекательными для потенциального использования в роли веб-серверов. Давайте выберем подходящую для этого модель.

Почему Raspberry Pi 2 model B?


Поскольку самое слабое место таких систем с точки зрения хостинга, — это процессор, обладающий очень низкой относительной производительностью (о чём чуть дальше), то мы попробуем организовать веб-сервер на бюджетном варианте, но который, тем не менее, сможет оказаться достаточно мощным для наших задач — это Raspberry Pi 2 model B. Он обладает 4-х ядерным процессором, работающим в штатном режиме без охлаждения на 900 Mhz и возможностью менять эту частоту от 700 до 1200 Mhz. Поднимать тактовую частоту мы не будем, лишь заметим, что для «разгона» понадобится радиатор и, возможно, вентилятор. Раз так сложилось, что на сегодняшний день Raspberry Pi 2 model B обладает самым производительным процессором среди «одноклассников», выбираем его для тестирования.

Технические особенности рассматриваемой платформы


Процессор

Процессор у нас необычный, семейства RISC. Вкратце можно сказать, что набор инструкций у такого процессора существенно меньше, чем у «обычных», зато простые команды он выполняет очень быстро. Но для выполнения сложных инструкций таких простых команд надо очень много. Поэтому и тактов уходит больше. Так что если кому показалось, что 4 ядра по 900 Mhz — это более, чем достаточно для вебсервера, то стоит сделать поправку — Broadcom BCM2836 quad core Cortex A7 для нашей задачи окажется не быстрее старенького Pentium 300-400 Mhz. Правда, в 6 раз обгоняя предыдущую одноядерную модель на Raspberry Pi, и в 1.9 раза опережая двухядерного соклассника на Banana Pi M2 (который хоть и рекламируется наличием SATA и гигабитного ethernet, но для веб-сервера из-за своего процессора подходит в значительной мере меньше). Именно по причине неторопливости центрального процессора мы наблюдаем рекордно низкое потребление микрокомпьютеров. По доступным данным, Raspberry Pi потребляет от 2 до 3-х ватт, 4 ватта при пиковой нагрузке, 1 ватт при простое. Что ж, 2-3 ватта (5V, 0.4-0.6А) в среднем для всей системы, за исключением питания носителей информации — это то, за что стоит побороться на поприще корпоративного или домашнего вебхостинга, то, что может сделать его выгодным с экономической точки зрения.

Память

Память используется не самая быстрая, это DDR2, но зато имеется вполне достаточный объём — 1GB. Надо сказать, что это хороший объём для обычных вебсерверов под управлением Linux.

Сетевой интерфейс

100-мегабитный сетевой интерфейс вполне достаточен для передачи данных. Больше нам и не нужно — подсистема хранения информации и процессор просто не справятся с большей нагрузкой.

Хранение информации

Переходим к очень интересному моменту — встроенный картридер позволяет системе загружаться только с него (если только не перенаправить загрузчик...), а это в штатной ситуации ограничивает выбор основного носителя микро SD картой. Радует то, что сегодня они могут быть уже значительного объёма и работать быстро. Хотя недостатки уже налицо — мы вряд ли захотим держать на ней файлы вебсайтов, базы данных, swap и логи, во избежании медленной работы и преждевременного сокращения срока жизни носителя. Для этого у нас будет ещё один носитель на шине USB. Такой подход не только увеличит производительность системы, но и даст преимущество модульности — легко заменить носитель на запасной и делать бэкапы всего образа. Вопрос в том, что именно мы хотим использовать в качестве внешнего носителя — SSD диск, HDD или быструю карту памяти. Здесь каждый решает сам для себя, многое зависит от характера хостируемых сайтов. Следует помнить, что на Raspberry Pi 2 используется стандарт USB 2.0, ограничивающий нашу файловую подсистему в скорости передачи данных.

В данном примере в качестве внешнего устройства мы рассмотрим относительно медленный вариант для записи — это USB-картридер с подключенной полноформатной SD-картой Lexar Professional, позволяющей записывать данные на скорости всего лишь около 15Mb/s при этом подключении. Хотя (в общем случае) нам будет маловажна скорость носителя выше 100 мегабит как для чтения, так и для записи, так как связь с внешним миром ограничена этой цифрой. При применении дисковых подсистем стоит задуматься об их энергопотреблении. Винчестер 2.5" потребляет ~5 ватт и, вероятно, потребует отдельного источника питания. Следует также помнить про специфичную организацию ввода-вывода на Raspberry через USB, очевидно, у нас есть ещё одно узкое место:

функциональная блок-схема Raspberry Pi 2 model B

Итак, носители для теста:

«Внутренний»: MicoSD 8Gb class 10
«Внешний»: SD 32Gb class 10+ (UHS)

Установка и состав LAMP


Система должна быть простой, но иметь полноценный функционал. Поэтому одно требование — ничего лишнего, но только Apache спрячем за Nginx, благо память позволяет.

Операционная система

На «внутреннем» носителе ставится Minibian с образа 2015-02-18-wheezy-minibian.img.

Это — Debian 7.8 в минимальной комплектации для Raspberry. Оговоримся, в стандартном репозитарии ждут PHP не выше 5.5 и Apache не выше 2.2. Это никакое не досадное ограничение, но для данной статьи полезно проверить возможность использования самых свежих версий. Для того, чтобы установить не входящие в стандартный репозитарий PHP 5.6.x и Apache 2.4.x, пришлось поменять источник для 8-й версии Raspbian, система после apt-get upgrade стала иметь версию 8.0.

Apache

Версия 2.4.10 (Raspbian). Включен gzip, подключены все наиболее часто используемые модули из стандартной поставки, включая mod_rewrite, mod_cache..., не считая тех, что включены по умолчанию.

PHP

5.6.12-0+deb8u1 (cli). Выполняется в Apache как prefork. Есть php-curl, php-gd и другие популярные библиотеки.

MySQL

5.5.44-0+deb8u1 — (Raspbian).

Nginx

Nginx/1.6.2. Nginx отвечает за статику. Включено сжатие gzip.

Напомню, что все логи пишутся на внешний носитель, база данных MySQL там же, swap не отключен, но пустой на всё время тестирования.

В качестве вспомогательных утилит использую PhpMyAdmin, htop, iostat и webmin. Установлен exim4, но только для отправки сообщений из форм. Как видно, наш сервер вполне современен и функционален. Любителей панели управления VESTA разочарую — к сожалению, производитель не поддерживает ARM процессоры и не собирается этого делать в ближайшее время. Поэтому webmin.

Тестирование


Я сразу не собирался делать никаких синтетических тестов, т. к. они скорее из области очень далёкой теории. На практике же всё сильно зависит от характера хостируемых сайтов, от распределения нагрузки по времени, от канала связи, количества просмотров, времени посетителей на сайте..., а также от настроек. Другими словами, предлагаю посмотреть, что получается на самом деле, на действующих сайтах.

Тестируемые вебсайты не основаны на какой-либо CMS, но используют отображение картинок из базы данных на динамических (PHP) страницах, поэтому может быть довольно интенсивная нагрузка на MySQL. А вот AJAX-соединений нет вовсе. Поскольку наш хостинг пока не претендует на профессиональный, то посчитал достаточным для теста размещение на нём 16-ти действующих сайтов с невысокой посещаемостью, из которых около пяти — около 100-200 человек в сутки, остальные — не более 50-ти посетителей за это же время. Всего — около 800-900 человек в день, что сравнимо по допустимой нагрузке с недорогим виртуальным хостингом. Половина посетителей приходится на вечер, основные посещения случаются в 20-22 часа (~300 человек за два часа, в среднем 4 просмотра = 10 просмотров в минуту по ~700 кб каждый = 116 килобайт трафика в секунду). Это время обозначим «час пик» и в это же время проведём тестирование. Тестов будет всего два вида — оценка производительности с помощью сторонних сервисов и отчёт утилит htop, iostat по реальной работе.

1. Время генерации и загрузки пользователем страниц в «часы пик»

Используем всего два основных параметра — время генерации страницы и время загрузки страницы, для двух типов страниц — «тяжёлых» (тяжёлой для процессора, т. к. много картинок из MySQL, долгая генерация) и «лёгких» (обычная динамическая страница PHP). Повторим каждый тест 10 раз, чтобы уменьшить вероятность случайного результата, а также будем использовать разные сервисы.

Напомню про географию тестирующих серверов и про их возможную загруженность. Поэтому абсолютные результаты могут разниться сильно, это нормально. Повторные замеры делал с перерывами в 5-10 минут, чтобы попадать в разное время загруженности сервисов. Канал тестируемого Raspberry — гигабитная оптика, география — Сибирь, 150 гарантированных мегабит до Москвы. Для того, чтобы убедиться в способности сервера обслуживать несколько одновременных соединений, тестирование запускал одновременно на следующих сайтах-сервисах:

`Лёгкая` страница (547 кб, без обращений к MySQL)

PingDom.com, Швеция

Время загрузки страницы (46 запросов): минимум — 925 мс, максимум — 1124 мс, средняя — 955 мс.

Google PageSpeed Insights

Нареканий по скорости нет.

Sitespeed.ru

Общее время загрузки страницы 3.9-4.2, среднее 4.0. Время генерации страницы от 139 до 157, среднее 145 мс. Вот почему у Гугла нареканий нет — попадаем в допустимые им 200 мс.

`Тяжёлая` страница (843 кб, включая 38 картинок по 10-15 кб из MySQL)

PingDom.com, Швеция

Время загрузки страницы (85 запросов): минимум — 946 мс, максимум — 1001 мс, средняя — 973 мс.

Google PageSpeed Insights

Нареканий по скорости нет.

Sitespeed.ru

Общее время загрузки страницы 5.3-4.2, среднее 4.0. Время генерации страницы от 158 до 169, среднее 162 мс.

2. Отчёт утилиты htop

Как и ожидалось, Htop показал, что основной потребитель процессорного времени — это процессы mysql. Они «скушали» 98 минут из последних суток процессорного времени. Что неудивительно — частые и «тяжёлые» запросы к базе у нас предполагались изначально. Будь картинки в кэше nginx, мы бы имели прирост в производительности, но тест тем и интересен, что с запасом моделирует повышенную нагрузку на MySQL, характерную, кстати, для большинства CMS.

3. Отчёт утилиты iostat

Эта утилита показала средние скорости чтения и записи на носители:
1. «Внутренний» носитель (система) — 0.87 кб / с чтение в среднем, 15,5 кб / с запись в среднем (скорее всего из-за кеширования nginx, есть что доработать в конфигурации).
2. «Внешний» носитель (сайты, логи, базы данных) — 2.4 кб / с чтение и 3 кб / с запись (тут всё нормально, чтение закешировано, пишутся логи).

4. Распределение ресурсов процессора

Распределение процессорного времени по htop, выборка — ровно двое суток работы (обслужено ~1600 уникальных посетителей по данным Яндекс-метрики):

mysql 6.8%
htop 1.8%
nginx 0.75%
apache2 <0.3%

Почти всё остальное время процессор отдыхал.

Как результат, имеем большой запас по свободному процессорному времени, запас по поднятию частоты процессора, запас по скорости работы носителей информации на запись. Доступно множество оптимизаций в настройке как серверных программ (вынести кеш nginx на отдельный носитель, например), так и самих сайтов. Всё вместе — неплохой потенциал для увеличения общей производительности.

Итог


Нашему виртуальному посетителю понравилась скорость работы вебсервера на микрокомпьютере, несмотря на то, что были другие одновременные визиты. Таким образом, несмотря на узкие места (USB и процессор), имеем вполне очевидный вывод — полноценный вебсервер на Raspberry Pi 2 model B реален. Как по программному обеспечению, так и по техническим параметрам. Исходя из совсем невысокой загруженности в рассматриваемом варианте, предположу, что он сможет оперативно обслуживать как минимум пару-тройку тысяч посетителей среднестатистического сайта (сайтов ?) в сутки.

Многопроцессорность помогает быстрее справиться с запросами, памяти достаточно для кеширования, передача данных через USB удовлетворительная, так что сервер-малыш может не только позволить сэкономить на электричестве, но и осуществлять быструю (плюс недорогую!) замену вышедшего из строя оборудования. Такая система может окупать себя при использовании в сети предприятия в качестве корпоративного сервера (сервер базы данных, веб-сервер, сервер резервного копирования, файлообменник) по сравнению с другими популярными решениями. И уж наверняка быть альтернативой виртуальному хостингу в умелых руках. Скажем, на бюджетном источнике бесперебойного питания микрокомпьютер в паре с роутером может работать часами, так что вопрос кратковременного (и не очень) отключения электричества может быть нивелирован в домашних условиях, если на узле провайдера также стоят UPS. А ещё можно управлять электричеством, давать команды различным устройствам, подключить видеокамеру и различные датчики…

Пробуйте, экспериментируйте, микрокомпьютеры — это не только недорого, но и до приятного тихо…

Комментарии (17)


  1. SergeyShibka
    16.09.2015 12:53

    Сайт визитку или тест площадку да потянет, нормальный сайт например хостинг картинок нет. Узкое место сетевая часть и USB. При попытке отдать графический контент начнется «тупление».


    1. DrPass
      17.09.2015 03:51

      Ну что такое «нормальный сайт»? Монстры вида youtube.com или там photobucket.com? Не потянет, конечно. И geektimes.ru тоже не потянет. Но обычный корпоративный сайт с информацией о компании, каталогом продуктов, справочной информацией и какими-нибудь онлайновыми сервисами, и который не является ни хостингом картинок, ни крупным порталом, ни визиткой, вполне потянет. А таких сайтов большинство.


      1. SergeyShibka
        17.09.2015 12:15

        Я про это и написал, что нормальный сайт это нагрузка на файловую систему, а в случае с расбери это «клиника». Поэтому только «визитка», а под ней и подразумевается, что корпоративный сайт это доска объявлений и новостей, при обращении к нему с 5 рабочих мест.


    1. Dorco
      21.09.2015 11:56
      -1

      Сайт-визитка, тест-площадка, нормальный сайт — это не определения для сайта. То есть для директора компании такой подход естественный, но не для специалиста. Специалист определяет нагрузку по количеству посещений и количеству просмотров, по «весу» страниц, по обращениям к внутренним и внешним источникам данных, по сложности обработки отдельных скриптов и т. д. Приведённый выше пример выбран неслучайно — присутствуют и обращения к базам данным и скрипты, строящие страницы на основе текста и картинок из БД. А также присутствуют и вполне реальные посетители во вполне реальном количестве. Это даёт ориентир, информацию для тех, кто решил выбрать микрокомпьютер для своего веб-сервера. Возможно, у читателя в данный момент нет многотысячных посещений, но он хочет организовать хороший веб-сервер с возможностью «побаловаться» с ним вместо того, чтобы зависеть от хостинга и окупить свои вложения со временем. Так отчего бы и нет?

      «Узкое место сетевая часть....»
      100mbit, реальные, не виртуальные — это очень хорошая скорость. Я пока не знаю доступных хостингов, дающих большую скорость на интерфейсе.

      «USB»
      Да, это узкое место. Но сетевой интерфейс — 100 Mbit, а скорость USB — выше. И, оказывается, что достаточная, чтобы обеспечить отдачу 1-го мегабайта до клиента за доли секунды (реально, скорость загрузки страниц выше, чем в тесте, поскольку все клиенты при загрузке страницы в самом конце ждали отзыв от Яндекс-метрики). Причём, как статики, так и динамического содержания (за скорость работы PHP скрипта отвечает процессор, а не USB).

      «Тупление» при отдаче графического контента…
      Сидя на гигабитном интерфейсе рядом с сервером, могу сказать, что реальная СПД на USB + сеть составляет 7 мегабайт в секунду. Вполне достаточная, чтобы раздавать в том числе и мегабайтные картинки. Вполне достаточная «сетевая часть» на мой взгляд, вы ещё поищете хостинг с такими данными.


  1. aik
    16.09.2015 13:43

    в качестве корпоративного сервера (сервер базы данных, веб-сервер, сервер резервного копирования, файлообменник)

    Только если у вас корпорация из трёх компьютеров. :)

    Как временное решение или для статичных сайтов потянет. А вот как только появится динамика или большие файлы — то всё упрется в USB.
    У меня raspberry стоят в паре мест как «индикаторы» — там крутятся всякие пинги, пишутся логи доступности серверов и т.п. Как раз из-за того, что жрёт немного. Вебсервер поднят, но только ради простенькой странички, которая по результатам пингов рисует табличку с красными и зелеными кружочками.


    1. Dorco
      21.09.2015 11:36

      Имелся в виду конечно же один какой-то вариант из тех, что в скобках. И да, для небольшой организации вполне приличный по себестоимости / энергопотреблению. Если в «корпорации» 1000 человек (предположительная нагрузка за сутки 2-3 тысячи людей, выносим в 8 рабочих часов), то окажется вполне нормальный веб-сервер для статики. Плюс, как показывает мой пример, останется «место» для обращений к MySql базам. А 1000 человек — это уже ну никак не 3 компьютера. Будем оптимистичней :)


  1. AbyssMoon
    16.09.2015 14:00

    Использую orange pi pc (практически полный аналог малины, но за $15) для мониторинга удаленных объектов, установлен zabbix-proxy, openvpn, еще пара пакетов и ffserver для подслушивания обстановки встроенным микрофоном через web морду.


  1. druss
    16.09.2015 14:09

    А зачем там Apache + nginx? Почему nginx + php-fpm не выбрали?


    1. BupycNet
      16.09.2015 20:26

      Кстати, еще учитывая что у нас еще 1 гигабайт памяти. то OPcache или его аналоги могли бы улучшить ситуацию с временем ответа.
      Еще интересно — а redis будет ли работать шустрее? Еще вариант с картинками в базе достаточно странный тем более для такого сервера.


      1. Dorco
        21.09.2015 11:11

        Допустим, есть такая ситуация: одни люди пишут сайты, а другие их размещают. Могут попадаться и другие, куда более странные варианты, чем этот с картинками. Насчёт оптимизации — поле не пахано и, кстати, есть настроение вспахать.


    1. Dorco
      21.09.2015 11:08

      Apache и nginx — классическая связка, наиболее известная и понятная. Тот факт, что на многопроцессорной системе может быть лучше в некоторых случаях какие-то отдельные решения, это здорово. Просто здорово и всё. А тот факт, что там может трудиться конкретный apache 2.4.10 — это информация.


  1. Revertis
    16.09.2015 17:44
    +2

    Присоединяюсь к вопросу druss, и хотел бы добавить, что на Odroid-c1 замечательно работает OwnCloud с программкой News (rss-ридер). Например, закачка файлов и сам web-интерфейс OwnCloud'а намного отзывчивее на такой малютке, чем у DropBox'а.


  1. koreec
    17.09.2015 06:05

    Раз так сложилось, что на сегодняшний день Raspberry Pi 2 model B обладает самым производительным процессором среди «одноклассников», выбираем его для тестирования.

    Вообще-то нет: www.hardkernel.com/main/products/prdt_info.php?g_code=G141578608433


    1. Dorco
      21.09.2015 11:31
      -1

      Вообще-то да. По разным отзывам данная штука стоит существенно дороже (точнее, раза в два) при попытке её купить. Попробовал ещё прямо сейчас и не смог найти лучшего предложения, нежели здесь: madrobotics.ru/catalog/single-board/ODROID-C1
      Это примерно 61$. Без доставки.

      А вот то, что, что в статье с доставкой до Вашего почтового отделения:
      www.aliexpress.com/item/2015-New-Original-Raspberry-Pi-2-Model-B-Broadcom-BCM2836-1G-RAM-6-times-faster-than/32285616814.html

      Нехитрыми вычислениями приходим к выводу о реальной разнице ~ в 2 раза. Не в пользу позиционирующегося как «одноклассник-одноценник» Odroid-c1. Может, я плохо искал, но это уже не первый раз, честно старался — с удовольствием приобрету, если найду.


      1. koreec
        21.09.2015 11:37

        Попробовал прямо сейчас на Hardkernel, вышло $37 + $16 за доставку. Итого — $53. Так что либо отзывы врут, либо мы на разные позиции смотрим.


        1. Dorco
          21.09.2015 12:01
          -1

          Вот, ваши данные с доставкой — 53$ за Odroid-с1, мои — 35$ за Raspberry Pi 2. Если это — одноклассники (разница ровно в полтора раза), то значит, что торговые марки Pentium и Celeron — всегда были конкурентами и их придумали зазря.


          1. Dorco
            21.09.2015 12:23
            -1

            Не понял, за что минус моему сообщению. Не нравится абстрактное сравнение? Вот конкретное.

            Вы посчитайте производительность 3-х Raspberry Pi 2 и двух Odroid-c1. Чтобы было понимание разницы в ценовой нише, я подскажу — у Raspberry проивзодительность также меньше в примерно полтора раза по сравнению с Odroid. Другими словами, если убрать разницу в цене (не знаю, почему, но Odroid никак нельзя у нас купить за заявленные 35$ конечному покупателю, у Вас самих не получается), то выходит, что разницы в производительности нет. Также, как нет разницы из-за наличия гигабитного интерфейса — редко найдёшь гигабитный канал по стране для веб-серевера. Тем более, при попытке сэкономить.

            Так что, кроме смеха, ничего этот минус не вызвал. Ну не может быть одним и тем же булка хлеба и полторы булки. Однокомнатная и двухкомнатная квартиры. Разница в цене ощутимая в 50%, её нельзя никак игнорировать, тем более для такого класса компьютеров.