Прошло чуть более полутора лет с тех пор, как команда TechDivisionGmbH давала интервью здесь, на Sitepoint, об их системе смены парадигм сервера приложений PHP, называемой appserver.io . Во время интервью appserver был просто альфа. С тех пор произошло много событий, и appserver теперь является GA как производственной системой, в настоящее время в версии 1.0.6, с версией 1.1.0 на горизонте.
Вы, вероятно, спрашиваете: «Почему меняется парадигма appserver?»
Ответ заключается в том, что он решает последний рубеж разработки приложений PHP: высокую производительность для больших приложений с точки зрения оптимизации ресурсов сервера и совместной работы. Это область разработки PHP, к которой призывали многие профессиональные PHP-разработчики, например Мануэль Лемос в своем блоге «Возможности и дата выпуска PHP7 » (см. Раздел «Автономный многопоточный веб-сервер») и Fabien. Potencier, отец Symfony, в своей презентации «My Take on PHP» , где он отмечает, что он также сам работает над таким решением для сервера приложений. Ну, не смотри больше, Фабьен, у нас уже есть действительно хорошее решение с appsever.io.
Appserver Community Edition лицензируется в соответствии с Open Source License 3.0 . Команда TechDivsion также предлагает Professional Edition и Enterprise Edition .
Appserver по-прежнему нужен разработчик
Хотя внутри appserver существует потенциал, позволяющий повысить производительность и улучшить взаимодействие между веб-серверами в среде веб-приложений, он не может сделать это в одиночку. Это также требует нового мышления от разработчика PHP. Это другой взгляд на решение проблем, в который мы углубимся, в этой серии из 3 частей.
В этой первой части мы рассмотрим концепции очень высокого уровня, которые делают appserver особенным, и помогут вам приступить к первой установке. Во второй части мы подробно расскажем о компонентах, предлагаемых appserver. И, наконец, в третьей части мы будем работать с некоторыми вариантами использования, предоставленными нам через пример приложения, представленного в установочном пакете.
Общей целью этой серии будет открытие вашей перспективы в новом мире, возможно, более производительной системы приложений с PHP и сервером приложений, а также о том, как это требует изменений в мышлении разработки и в некоторых случаях рабочего процесса.
Темы и потоки
Вы можете понимать многопоточность как технологию, которая позволяет современным компьютерам выполнять несколько задач одновременно. Это правильно, и откуда на самом деле происходит термин « многозадачность ».
Потоки или многозадачность в мире PHP на самом деле довольно редки. В те дни, когда был создан PHP, многопоточность в компьютерах не была проблемой. PHP сохранил свою однопоточную архитектуру, также называемую архитектурой «без разделения ресурсов», и по сей день.
Однако большинство людей не осознают, что PHP фактически создан для поддержки многозадачности. Эта жемчужина функциональности была в основном неизвестна до тех пор, пока Джо Уоткинс не создал pthreads , мощное расширение PHP, которое позволяет разработчику создавать многопоточные приложения на PHP. Именно эту функцию, помимо других важных функций, реализует appserver для поддержки разработки многопоточных приложений.
Тем не менее, вы можете быть похожим на меня и удивляться, почему этот многопотоковый контент имеет какое-то значение для приложения PHP Для этого мы должны взглянуть с высоты птичьего полета на современную технологию веб-сервера.
Стандартный сценарий веб-сервера PHP
Для нас, PHP-разработчиков, в контексте веб-серверов мысль о многопоточности далеко от нас. Это потому, что сами веб-серверы и / или менеджеры процессов PHP фактически выполняют эту работу. Вы можете сказать: «Отлично! Это меньше проблем для меня », и вы были бы абсолютно правы, говоря это. Однако такая обработка потоков на уровне управления процессами веб-сервера / PHP обходится довольно дорого. Ниже приведена анимация того, как PHP выполняет свои процессы с помощью веб-сервера, такого как Nginx.
Потоки выполняются путем дублирования, построения и уничтожения одних и тех же вещей снова и снова для каждого запроса, который получает сервер. Вы можете подумать, это не выглядит так плохо, верно? Чтобы увидеть реальную стоимость, нам нужно немного глубже погрузиться в процесс сборки / уничтожения.
Это изображение показывает, что обычное, обычно более крупное приложение, поддерживаемое некоторой платформой MVC, должно делать для каждого отдельного вызова. Мы можем спорить о последовательности событий. Тем не менее, важно отметить, что много работы делается только для полного уничтожения после отправки ответа. Как уже упоминалось выше, это много дублированных и напрасных усилий для машины. Эти отходы = потеря производительности!
Теперь давайте посмотрим на сценарий с сервером приложений с высоты птичьего полета.
Сценарий Appserver
Как видите, ничего особенного. Однако с помощью appserver веб-сервер написан на PHP и является неотъемлемой частью приложения. Теперь у вас меньше забот и, при необходимости, больше контроля над тем, что происходит внутри веб-сервера. Кроме того, благодаря интеграции веб-сервера общая часть современных PHP-фреймворков, которые работают с HTTP-запросами и ответами, в основном помещается на свое место в стеке внутри самого веб-сервера.
Уже одно это было бы большим улучшением по сравнению со стандартным веб-сервером, однако становится еще лучше. Давайте посмотрим на следующий уровень вниз, как мы делали ранее.
Обратите внимание, что некоторые части программирования больше не уничтожаются. Что разрушено или нет, теперь в руках разработчика. Это означает, что разработчик может, например, разрешить процессу начальной загрузки оставаться «многопоточным» и его никогда не придется перестраивать для каждого запроса. Загрузочное приложение всегда готово к работе.
Разница в мышлении
Когда различие между appserver и стало «щелкать» у меня в голове, это о том, что я чувствовал (нажмите, чтобы посмотреть).
Веселиться? О да! И самая важная часть фильма — это то, что Бог говорит после этой сцены.
Расстаться с твоим супом не чудо, Брюс. Это магический трюк. Одинокая мама, которая работает на двух работах и все еще находит время, чтобы отвести своего ребенка на футбольную тренировку, это чудо. Подросток, который говорит «нет» наркотикам и «да» образованию, это чудо. Люди хотят, чтобы я сделал все для них. Но они не понимают, что у них есть сила. Хочешь увидеть чудо, сынок? Будь чудом.
Хорошо, может быть, это немного мелодраматично, но наверняка «чудо» или способность заставить части вашей программы в основном сохраняться внутри самого сервера — это мощный инструмент для повышения производительности ваших приложений. Это позволяет вам, как разработчику PHP, иначе думать о том, как приложение может работать лучше и быстрее. Хотя, как правило, идет …
С большой властью приходит большая ответственность.
Другими словами, хотя у вас могут быть новые полномочия с appserver, вы также должны понимать значение этих полномочий, как их использовать, а также возможные побочные эффекты, которые могут возникнуть, если вы не будете осторожны. Мы поговорим об этом подробнее в последующих частях серии.
А пока давайте начнем работать с экземпляром appserver.
Установка и начало работы
Appserver готов к установке для большого количества операционных систем . Рекомендуемый подход к локальной разработке — использовать виртуальную машину Vagrant, созданную с помощью Virtualbox . Или вы можете бежать с быстрым наконечником Бруно, чтобы построить его приусадебный ящик . Мы будем устанавливать версию appserver для Debian Wheezy, и вам фактически потребуется только работающая ОС.
После того, как вы установили виртуальную машину и она запустилась, вставьте в нее SSH и выполните эти команды как суперпользователь.
echo "deb http://deb.appserver.io/ wheezy main" > /etc/apt/sources.list.d/appserver.list
wget http://deb.appserver.io/appserver.gpg -O - | apt-key add -
apt-get update
apt-get install appserver-dist
Процесс установки так же прост с другими операционными системами.
Независимо от того, какой метод вы использовали для установки appserver, вы должны работать с appserver. Процедура установки автоматически запускает процесс appserver после завершения установки. Чтобы проверить это быстро, введите следующее.
service appserver status
Вы должны увидеть работающий сервер приложений.
[ ok ] appserver is running.
Небольшое примечание: если вы перезагрузите виртуальную машину, сервер приложений не запустится автоматически. Если вы хотите, чтобы он работал при перезагрузке, вам нужно настроить службу для запуска во время загрузки. С Debian вы можете выполнить эту команду.
update-rc.d appserver defaults
Если вы хотите, чтобы appserver фактически обслуживал ваши веб-приложения в целом, вы также можете изменить порт прослушивания appserver на 80
Чтобы сделать это, теперь вам нужно внести простые изменения в файл конфигурации ядра в appserver. Перейдите в / opt / appserver / etc / appserver, и вы найдете файл с именем appserver.xml. Это основной файл конфигурации для веб-сервера, очень похожий на файлы Apache httpd.conf или Nginx nginx.conf.
Откройте его в вашем любимом редакторе и найдите эти строки.
<server
name="http"
....
<param name="admin" type="string">[email protected]</param>
<param name="transport" type="string">tcp</param>
<param name="address" type="string">0.0.0.0</param>
<param name="port" type="integer">9080</param>
Если вы просто экспериментируете, лучше оставить порт как есть. Таким образом, вы можете играть с сервером приложений рядом с любыми другими проектами PHP.
С веб-сервером и этим файлом конфигурации можно сделать гораздо больше. Мы рассмотрим некоторые возможности в следующих постах.
Если вы внесли какие-либо изменения в файл конфигурации, вам необходимо перезапустить appserver, чтобы изменения вступили в силу.
service appserver restart
Если все прошло хорошо, вы сможете ввести IP-адрес своей виртуальной машины с :9080/example
http://10.10.10.10:9080/example
Это оно! Теперь у вас есть запущенный сервер приложений. В следующей части серии мы рассмотрим возможности сервера приложений и посмотрим, что он предлагает из коробки. Оставайтесь с нами, чтобы узнать больше!