Web

PHP, разработка и рок-н-ролл

Манифест «Энтерры» по итогам семинара о микрофреймворках PHP

Мы продолжаем просвещаться на семинарах, которые регулярно проходят в офисе и на которых мы обсуждаем разные технологии разработки. Темой очередного стали микрофреймворки PHP, их задачи, внутреннее устройство и функциональные возможности.

 

«Меньше кода, а не больше», – таков главный вывод, который мы вынесли с семинара. А основные тезисы зафиксировали в манифесте PHP-разработчика, прямо как программист Эд Финклер в своем «The MicroPHP Manifesto», где он сравнил разработку с рок-н-роллом, а кодеров – с рок-звездами, и провозгласил, что лучше играть очень мощные аккорды в панк-рок группе и качать зал, чем писать претензионные рок-оперы.

Нам близка позиция Финклера и поэтому мы торжественно заявляем, что готовы делать сайты и приложения не на многословных решениях и сложноподчиненных библиотеках, а на легковесной основе – микрофреймворках.

Преамбула

  • Язык PHP, несмотря на почтенный возраст, по-прежнему остается востребованным. 80% всех сайтов написаны именно на нем. Но за 20 лет существования он успел обрасти целым набором ненужных и многоуровневых компонентов, которые страшно выглядят и так же страшно не работают.
  • Монструозные full-stack фреймворки типа Zend Framework и F: Symphony, конечно, хороши, и обладают кучей разных возможностей, однако требуют много лишних телодвижений и сильно тормозят процесс разработки. Код в таком «монстре» за пять минут не поправишь и не отредактируешь, так как приходится продираться сквозь бесчисленное множество файлов и директорий. К тому же на небольших проектах все эти примочки не нужны – хватает базового функционала.

Решение

  • Здесь на помощь спешат микрофреймворки. Ключевая часть слова – «микро». Это своего рода каркас сайта или приложения, на который затем как на шампур постепенно нанизывают шашлык – формы обратной связи, кнопки, пуши и так далее.
  • «Начинка» микрофреймворков состоит из роутинга, базовой реализации MVC («Модель-Представление-Контроллер»), обработки HTTP-запросов, обработки ошибок. Это самый минимум, который необходим, чтобы быстро запустить любое приложение. Кроме того, микрофреймворки расширяемы – базовую настройку спокойно можно менять и дополнять.
  • В микрофреймворках обычно отсутствуют такие функции, как ORM, кэширование, шаблонизация, мультиязычность, аутентификация и валидация форм.
  • Микрофреймворки – очень хороший инструмент, когда стоит задача написать мэйлер или какой-то другой промежуточный компонент системы, сделать прототип функционала и показать заказчику на начальных этапах разработки, создать REST API для мобильных приложений или расширить функционал уже существующей системы. Допустим, сайт на CMS работает давно, и к нему внезапно захотелось добавить чего-нибудь эдакого.
  • Микрофреймворки прекрасно подойдут и для создания простых сайтов, например, сайтов-визиток. Когда использовать WordPress как-то не айс, ведь мы же крутые ребята, а Zend Framework слишком громоздкий для нескольких страниц, микрофреймворки – самое то.

Фреймворки

Есть очень много PHP-микрофреймворков. Может показаться, что их даже больше, чем для других языков. Самые популярные среди них – Lumen, Slim, Silex, и Phalcon Micro.

Lumen

  • Самый молодой микрофреймворк из всех представленных, на основе Laravel.
  • Поддерживает версию PHP 5.4 и выше.
  • Довольно быстрый – на втором месте по скорости среди перечисленных.
  • Подойдет для разработки сверхбыстрых микросервисов и API.
  • Занимает на диске около 10 МБ. Многовато для «микро».
  • Имеет хорошую документацию и может легко обновиться до Laravel – более мощного фреймворка.

Slim

  • Поддерживает версию PHP 5.5 и выше.
  • Функционал сильно ограничен: фреймворк, в отличие от других, не содержит встроенных возможностей для работы с базами данных.
  • Имеет HTTP-роутер и поддержку PSR-7 (HTTP message interfaces) – набор PHP интерфейсов, описывающих HTTP запрос и HTTP ответ. Это позволяет быстро реагировать на запросы HTTP.

Silex

    • Микрофреймворк от создателей Symfony2.
    • Поддерживает версию PHP 5.5.9 и выше.
    • Подойдет и для больших проектов.
    • В два раза медленнее и неповоротливее Lumen.
    • Чтобы юзать этот фреймворк, надо хотя бы в общих чертах знать Symfony. А иначе будет ох как тяжко. Но как раз благодаря связи с Symfony он может быть легко интегрирован с другими библиотеками, а встроенные модули помогут не наделать лишнего.

Phalcon Micro

  • Не совсем микрофреймворк в обычном понимании, а скорее расширение для создания сайтов и приложений на PHP.
  • Поддерживает версию PHP 5.5 и выше.
  • Взаимодействует непосредственно с PHP, поэтому считается самым быстрым.
  • Имеет отличную документацию и все стандартные компоненты, включая ORM.
  • Тем не менее, тоже не совершенен – если где-то затеряется одинокий баг, чтобы его исправить, придется подучить C или Zephir, потому что расширение сделано на их основе.

Презентация семинара

Всем фреймворк, всем рок!

Сайт, живи! По следам семинара о балансировке нагрузки веб-серверов

Те, кто читает наши новости ВКонтакте, наверняка заметили, что у нас постоянно проходят семинары. Сотрудники «Энтерры» и гости собираются в офисе и обсуждают разработку и несущиеся вскачь IT-технологии.

Один из недавних семинаров был посвящен балансировке нагрузки веб-серверов.

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

 

Вот основные тезисы семинара.

Проблема

Слабенькие, недостаточно производительные сервера обычно пытаются «лечить» нерадикально, осторожно, например, кэшированием или постепенно наращивая мощность сервера. Но момент, когда выгода не соотносится с усилиями, затраченными на все эти манипуляции, неизбежен.

Решение

  • Балансировка – это выход.
  • Каждый сервер имеет точную копию файлов сайта.
  • При балансировке если отвалится один сервак, сайты и приложения продолжат работать как ни в чем не бывало.
  • Главная составляющая балансировки – Load Balancer, устройство, которое распределяет нагрузку по нескольким серверам.
  • Если Load Balancer даст сбой, то это страшно.

Алгоритмы

  • Алгоритмы балансировки предназначены для разных целей, поэтому важно выбрать именно тот, который будет соответствовать вашим потребностям.
  • Наиболее дешевый алгоритм балансировки – Round Robin. В нем запросы идут по серверам по кругу. Но он же и самый ограниченный. Простейшая реализация Round Robin – Round Robin DNS, в которой балансером выступает DNS-сервер. Такой сервер отвечает на запросы с нескольких IP-адресов и перегрузить его практически невозможно.
  • Другая, более усовершенствованная модификация Round Robin – Weighted Round Robin. По сути, тот же самый Round Robin, только уже учитывается мощность серверов, и запросы распределяются согласно их коэффициентам. Чем больше коэффициент – тем больше запросов.
  • Более «умный» алгоритм – Least Connections. Учитывает количество активных подключений и отправляет запрос туда, где меньше всего соединений. Поэтому и нагрузка на систему намного меньше. Улучшенный вариант – Weighted Least Connections, учитывает еще и весовой коэффициент серверов.
  • Все эти методы обладают досадным недостатком – запросы идут на разные IP-адреса, из-за чего возникают трудности с хранением сессий.
  • Для решения этой проблемы применяется Sticky Sessions. В «липких сессиях» запросы распределяются по серверам на основе IP hash, таким образом пользователь закрепляется за конкретным сервером. Но при отказе сервера можно потерять все данные сессии.

Схемы

  • Балансировка нагрузки действует в основном на транспортном уровне ((TCP, UDP) и уровне приложений (HTTP, FTP, DNS, SNMP, Telnet).
  • Высокоустойчивая схема – схема с двумя балансерами, основным и вспомогательным. Если один вдруг неожиданно прикажет долго жить, второй все вывезет, и система будет работать в обычном режиме.

Программное обеспечение

  • Для TCP и UDP на Linux подойдет LVS (Linux Virtual Server) – коммутатор протоколов четвертого уровня. Этот балансировщик нагрузки и кластеризации довольно неплох, однако не будет работать на более высоком уровне протоколов.
  • Для HTTP и TCP разработан HAProxy – высокопроизводительный прокси и балансировка, который умеет встраивать «cookies» для поддержания «липких сессий» и считается «the best of the best».
  • NGINX – отечественный высокопроизводительный веб-сервер, использующий для балансировки модуль Upstream.

Презентация

Используйте эти приемы – и вы без головной боли наладите работу сервера, а сайты будут просто летать.