2015-12-12 | azovdevmeetup 2015 | enterprise приложения на php | Павел...
TRANSCRIPT
Enterprise приложенияна PHP
Павел Крынецкий, Аркадия
Немного о себе
Павел Крынецкий
Старший разработчик, ЗАО «Аркадия»
Разработка серверных приложений PHP, Java
Общие сведения
PHP: Hypertext Preprocessor
Скриптовый язык общего назначения
Типизация: слабая динамическая
Мультипарадигменный
Кросплатформенный
Интерпретируемый
С открытым исходным кодом
Испытал влияние Perl, C, C++, Java, Tcl
Популярность
Тогда
PHP/FI 2.0 1995 г. – 1% доменов, или 50 тыс.
Сейчас
Используется сотнями тысяч разработчиков
Находится на 6 месте среди языков программирования
Написаны на PHP
Facebook, Wikipedia, Vkontakte, Habrahabr
ХронологияPHP 1.0 1994
Обработка шаблонов документов на Perl
Обработка форм, выполнение запросов в БД, передача данных
PHP/FI 2.0 1995
PHP, но не такой каким мы его знаем сегодня
Переписан на C
PHP 3.0 1998
Первое появление объектов
Расширение ядра дополнительными модулями
PHP 4.0 2000
Объектно-ориентированное программирование развивается
Новый движок Zend Engine, улучшена производительность, сессии, буферизация, безопасность
PHP 5 2004
Объекты – в самом сердце языка
Zend Engine 2, производительность, XML, ООП. Пространства имён, замыкания, ...
PHP 7
• Улучшение производительности, повышение эффективности использования ОЗУ
• Типы возвращаемого значения (Return Types)
• Удаление артефактов
• Изменения Extension API
3 декабря 2015
Создатели/разработчики
Расмус Лердорф
датский программист, написавший в 1994 году набор скриптов на Perl/CGI, обрабатывающих шаблоны HTML-документов
Энди Гутмансизраильский программист, PHPразработчик и соучредитель ZendTechnologies. В настоящее время являетсягенеральным директором Zend Technologies.
Зеев Сураскиизраильский программист, PHPразработчик и соучредитель ZendTechnologies. Технический директор вZend Technologies.
компания-разработчик ядра языка PHPНазвание Zend было придумано как словослияние их имен, Зеев и Энди.
Рейтинг языков программирования
Java, 24.40%
Python, 11.30%
PHP, 10.90%
C#, 9.10%
C++, 7.70%
C, 7.50%
Javascript, 7.10%
Objective-C, 5.20%
Swift, 2.90%
R, 2.80%
Matlab, 2.70%
Ruby, 2.40%
Visual Basic, 1.90%
VBA, 1.50%
Perl, 1.20%
Scala, 0.90%
lua, 0.50%
Java
Python
PHP
C#
C++
C
Javascript
Objective-C
Swift
R
Matlab
Ruby
Visual Basic
VBA
Perl
Scala
lua
0.00% 5.00% 10.00% 15.00% 20.00% 25.00% 30.00%
PHP IDE
PHPStorm
коммерческая кросс-платформенная интегрированная среда разработки для PHP. Разрабатывается компанией JetBrains на основе платформы IntelliJ IDEA.
US 199$ / 89 $
Eclipse
свободная интегрированная среда разработки модульных кроссплатформенных приложений.
ZendStudio
проприетарная интегрированная среда разработки приложений (IDE) на языке программирования PHP, разработанная Zend Technologies.
US 189$ / 89 $
NetBeans
свободная интегрированная среда разработки приложений (IDE) на языках программирования Java, Python, PHP, JavaScript, C, C++, Ада и ряда других.
PHP Frameworks
1. Agavi
2. Banshee
3. CakePHP
4. CodeIgniter
5. Fat-Free
6. FuelPHP
7. Hazaar MVC
8. Kajona
9. Laravel
10. Lithium
11. Nette Framework
12. Phalcon
13. PHPixie
14. PRADO
15. Silex
16. SilverStripe
17. Symfony
18. TYPO3 Flow
19. Yii 2
20. Zend Framework
Reflection API
PHP 5 включает в себя полноценный Reflection API, который предоставляет возможность проводить реверс-инжиниринг классов, интерфейсов, функций, методов и модулей. Кроме того, Reflection API позволяет получать doc-блоки комментариев функций, классов и методов.
Некоторые классы интерфейса Reflection API
Класс Описание
Reflection Содержит статический метод export(), предоставляющий итоговую информацию о классе
ReflectionClass Позволяет получить информацию о классе и содержит средства для работы с ним
ReflectionMethod Позволяет получить информацию о методах класса и содержит средства для работы с ними
ReflectionParameter Позволяет получить информацию об аргументах метода
ReflectionProperty Позволяет получить информацию о свойствах класса
ReflectionFunction Позволяет получить информацию о функциях и содержит средства для работы с ними
ReflectionExtension Позволяет получить информацию о расширениях PHP
ReflectionException Предназначен для обработки ошибок
Управление зависимостями, Composer
Composer — это пакетный менеджер уровня приложений для языка программирования PHP, который предоставляет средства по управлению зависимостями в PHP-приложении.
Идея создания пакетных менеджеров уровня приложений не нова и его авторы вдохновлялись уже существовавшим на тот момент времени npm для Node.js.
composer.jsonЗависимости проекта и другие метаданные
composer.lockСодержит конкретные версии пакетов
Использование$ php composer install$ php composer require monolog/monolog$ php composer require monolog/monolog 1.0.*$ php composer remove monolog/monolog
Что ещё полезногоAutoloadingPost-install scripts
Symfony Framework
Свободный фреймворк, написанный на PHP5, который использует паттерн Model-View-Controller
Symfony предлагает быструю разработку и управление веб-приложениями, позволяет легко решать рутинные задачи веб-программиста.
Symfony Framework :: Модули
Asset
Управляет генерацией URL и версионизацией веб-ассетов, таких как CSS файлы, JavaScript, картинки.
BrowserKit
Эмулирует поведение браузера.
ClassLoader
Подгружает классы Вашего проекта автоматически при условии соблюдения некоторых PHP соглашений.
Config
Помогает находить, загружать, комбинировать, валидировать конфигурационные параметры.
Console
Облегчает создание красивых и тестируемых интерфейсов коммандной строки.
Symfony Framework :: Модули (2)
CssSelector
Преобразует CSS селекторы в выражения XPath.
Debug
Предоставляет инструменты для облегчения отладки PHP кода.
DependencyInjection
Позволяет стандартизировать и централизовывать конструирование объектов в Вашем приложении.
DomCrawler
Упрощает навигацию по DOM для HTML и XML документов.
EventDispatcher
Реализует паттерн Медиатор просто и эффективно, что позволяет сделать проект легко расширяемым.
Symfony Framework :: Модули (3)
ExpressionLanguage
Предоставляет движок компиляции и вычисления значений выражения.
Filesystem
Предоставляет основные утилиты для взаимодействия с файловой системой.
Finder
Позволяет осуществлять поиск по файлам и директориям через интуитивно понятный интерфейс.
Form
Предоставляет инструменты для простого создания и повторного использования HTML-форм.
Guard
Совмещает множество уровней аутентификации в единое целое, значительно облегчая создание сложных систем аутентификации, где у Вас есть полный контроль над процессом.
Symfony Framework :: Модули (4)
HttpFoundation
Привносит объектно-ориентированный уровень для HTTP-спецификации.
HttpKernel
Предоставляет элементы построения гибких и высокопроизводительных фреймворков, основанных на HTTP.
Icu
Содержит данные библиотеки ICU. Компонент устарел. Используйте Intl вместо него.
Intl
Предоставляет «аварийный» вариант использования Intl для случаев, когда intl-выражения недоступны в среде выполнения.
Ldap
LDAP-клиент для PHP поверх стандартного ldap-расширения.
Symfony Framework :: Модули (5)
Locale
Аварийный вариант на случай недоступности intl-выражений на целевой платформе. Устарел. Вместо него нужно использовать компонент Intl.
OptionsResolver
Позволяет конфигурировать объекты массивами опций.
Process
Выполняет команды в подпроцессах.
PropertyAccess
Предоставляет функции чтения/записи из/в объекты или массивы используя простой строковый синтаксис.
PropertyInfo
Извлекает информацию о свойствах PHP-классов используя популярные механизмы получения метаданных
(Doctrine, PHP Reflection, PHPdoc, и т.д.)
Symfony Framework :: Модули (6)
Routing
Отображает HTTP-запросы на набор конфигурационных параметров.
Security
Предоставляет инфраструктуру для изощрённых систем авторизации.
Serializer
Преобразует объекты в определённый формат (XML, JSON, YAML, …) и обратно.
Stopwatch
Прозволяет выполнять профилирование кода.
Templating
Набор средств, полезных при построении различного рода систем шаблонизации.
Symfony Framework :: Модули (7)
Translation
Набор средств для интернационализации приложения.
Validator
Набор инструментов для валидации классов.
VarDumper
Механизм обхода любой произвольной PHP-переменной.
Yaml
Загружает и формирует YAML-файлы.
ORM: Doctrine
• Объектно-реляционный проектор для PHP >= 5.3.0
• Базируется на DBAL – слой абстракции от СУБД, поддерживает MySQL, PgSQL, Oracle, Sqlite
• Собственный объектный дилект DQL (похож на HQL)
• ООП конструктор запросов
• Основывается на идеях Hibernate
• Генерация DDL из маппинга, обновление существующей структуры БД
• Генерация маппинга и объектных сущностей из DDL
• Валидация данных
• Каскадные операции с сущностями
• Поддержка аннотаций
Runtime
PHP-CGI
Классический CGI
PHP-FPM
С версии 5.3.3, для высоконагруженных сред, предоставляет некоторые дополнительные возможности
Apache Module
Подключаемый модуль
CLI
С версии 4.3.0, для приложений с интерфейсом командной строки
Ложка дёгтя
• Несогласованный синтаксис функций и неортогональность
• Отсутствие обратной совместимости между версиями языка
• Отсутствие поддержки многобайтовых кодировок в ядре языка
• Отсутствие поддержки многопоточности
Пример реального приложения :: Назначение
• CRM, электронный документооборот, хранение и обработка «тяжёлых» медиаданных
• Доступ по Web с ПК и мобильного телефона
• Гибкая система разграничения прав доступа
• Специальные обработчики контента дла определённых типов данных – транкодирование/потоковое вещание видео/аудио с подстройкой под ширину канала, аудиовизуальное «аннотирование» видео и PDF, «водные знаки» для видео, графики и документов
• Текстовые коммуникации между пользователями в приложении
• Email оповещения
• Система статусов и меток для хранимых документов, возможность организации в группы, установка метаданных
• Быстры полнотекстовый поиск, поиск по неограниченному числу параметров, поиск по специфичным параметрам, динамическое добавление критериев поиска
• API для интеграции с внешними системами
• Подсистема логирования, система иформеров, анализирующая логи и визулизирущая определённую информацию в максимально наглядном для пользователя виде.
Пример реального приложения :: Производительность
До 15 тыс. сотрудников, работающих в приложении одновременно
Пример реального приложения :: Архитектура
Web ClientHTML / AngularJS /
Bootstrap
CorePHP
Обработка клиентских запросов
MetaSilex, Doctrine
Бизнес-логика, доступ к данным, REST API
CDSМедиа ресурсы,
Redis, ФС QueuesФоновые задачи, RabbitMQ,
ZMQ
WorkerWorker
Worker
Пример реального приложения :: Средавыполнения
Client CoreMeta
CDS
Queues
Load balancer Load balancer
Apache HTTPD
Nginx
MySQLSMTP
ZMQ
ElasticsearchoAuth
WebSockets PHP FPMRedis
Supervisor
ffmpegNFS
Q & A