2015-12-12 | azovdevmeetup 2015 | enterprise приложения на php | Павел...

28
Enterprise приложения на PHP Павел Крынецкий, Аркадия

Upload: jsc-arcadia-inc

Post on 22-Jan-2018

2.496 views

Category:

Software


0 download

TRANSCRIPT

Page 1: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий

Enterprise приложенияна PHP

Павел Крынецкий, Аркадия

Page 2: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий

Немного о себе

Павел Крынецкий

Старший разработчик, ЗАО «Аркадия»

Разработка серверных приложений PHP, Java

[email protected]

Page 3: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий

Общие сведения

PHP: Hypertext Preprocessor

Скриптовый язык общего назначения

Типизация: слабая динамическая

Мультипарадигменный

Кросплатформенный

Интерпретируемый

С открытым исходным кодом

Испытал влияние Perl, C, C++, Java, Tcl

Page 4: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий

Популярность

Тогда

PHP/FI 2.0 1995 г. – 1% доменов, или 50 тыс.

Сейчас

Используется сотнями тысяч разработчиков

Находится на 6 месте среди языков программирования

Написаны на PHP

Facebook, Wikipedia, Vkontakte, Habrahabr

Page 5: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий

Хронология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, ООП. Пространства имён, замыкания, ...

Page 6: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий

PHP 7

• Улучшение производительности, повышение эффективности использования ОЗУ

• Типы возвращаемого значения (Return Types)

• Удаление артефактов

• Изменения Extension API

3 декабря 2015

Page 7: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий

Создатели/разработчики

Расмус Лердорф

датский программист, написавший в 1994 году набор скриптов на Perl/CGI, обрабатывающих шаблоны HTML-документов

Энди Гутмансизраильский программист, PHPразработчик и соучредитель ZendTechnologies. В настоящее время являетсягенеральным директором Zend Technologies.

Зеев Сураскиизраильский программист, PHPразработчик и соучредитель ZendTechnologies. Технический директор вZend Technologies.

компания-разработчик ядра языка PHPНазвание Zend было придумано как словослияние их имен, Зеев и Энди.

Page 8: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий

Рейтинг языков программирования

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%

Page 9: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий

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++, Ада и ряда других.

Page 10: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий

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

Page 11: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий

Reflection API

PHP 5 включает в себя полноценный Reflection API, который предоставляет возможность проводить реверс-инжиниринг классов, интерфейсов, функций, методов и модулей. Кроме того, Reflection API позволяет получать doc-блоки комментариев функций, классов и методов.

Некоторые классы интерфейса Reflection API

Класс Описание

Reflection Содержит статический метод export(), предоставляющий итоговую информацию о классе

ReflectionClass Позволяет получить информацию о классе и содержит средства для работы с ним

ReflectionMethod Позволяет получить информацию о методах класса и содержит средства для работы с ними

ReflectionParameter Позволяет получить информацию об аргументах метода

ReflectionProperty Позволяет получить информацию о свойствах класса

ReflectionFunction Позволяет получить информацию о функциях и содержит средства для работы с ними

ReflectionExtension Позволяет получить информацию о расширениях PHP

ReflectionException Предназначен для обработки ошибок

Page 12: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий

Управление зависимостями, 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

Page 13: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий

Symfony Framework

Свободный фреймворк, написанный на PHP5, который использует паттерн Model-View-Controller

Symfony предлагает быструю разработку и управление веб-приложениями, позволяет легко решать рутинные задачи веб-программиста.

Page 14: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий

Symfony Framework :: Модули

Asset

Управляет генерацией URL и версионизацией веб-ассетов, таких как CSS файлы, JavaScript, картинки.

BrowserKit

Эмулирует поведение браузера.

ClassLoader

Подгружает классы Вашего проекта автоматически при условии соблюдения некоторых PHP соглашений.

Config

Помогает находить, загружать, комбинировать, валидировать конфигурационные параметры.

Console

Облегчает создание красивых и тестируемых интерфейсов коммандной строки.

Page 15: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий

Symfony Framework :: Модули (2)

CssSelector

Преобразует CSS селекторы в выражения XPath.

Debug

Предоставляет инструменты для облегчения отладки PHP кода.

DependencyInjection

Позволяет стандартизировать и централизовывать конструирование объектов в Вашем приложении.

DomCrawler

Упрощает навигацию по DOM для HTML и XML документов.

EventDispatcher

Реализует паттерн Медиатор просто и эффективно, что позволяет сделать проект легко расширяемым.

Page 16: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий

Symfony Framework :: Модули (3)

ExpressionLanguage

Предоставляет движок компиляции и вычисления значений выражения.

Filesystem

Предоставляет основные утилиты для взаимодействия с файловой системой.

Finder

Позволяет осуществлять поиск по файлам и директориям через интуитивно понятный интерфейс.

Form

Предоставляет инструменты для простого создания и повторного использования HTML-форм.

Guard

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

Page 17: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий

Symfony Framework :: Модули (4)

HttpFoundation

Привносит объектно-ориентированный уровень для HTTP-спецификации.

HttpKernel

Предоставляет элементы построения гибких и высокопроизводительных фреймворков, основанных на HTTP.

Icu

Содержит данные библиотеки ICU. Компонент устарел. Используйте Intl вместо него.

Intl

Предоставляет «аварийный» вариант использования Intl для случаев, когда intl-выражения недоступны в среде выполнения.

Ldap

LDAP-клиент для PHP поверх стандартного ldap-расширения.

Page 18: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий

Symfony Framework :: Модули (5)

Locale

Аварийный вариант на случай недоступности intl-выражений на целевой платформе. Устарел. Вместо него нужно использовать компонент Intl.

OptionsResolver

Позволяет конфигурировать объекты массивами опций.

Process

Выполняет команды в подпроцессах.

PropertyAccess

Предоставляет функции чтения/записи из/в объекты или массивы используя простой строковый синтаксис.

PropertyInfo

Извлекает информацию о свойствах PHP-классов используя популярные механизмы получения метаданных

(Doctrine, PHP Reflection, PHPdoc, и т.д.)

Page 19: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий

Symfony Framework :: Модули (6)

Routing

Отображает HTTP-запросы на набор конфигурационных параметров.

Security

Предоставляет инфраструктуру для изощрённых систем авторизации.

Serializer

Преобразует объекты в определённый формат (XML, JSON, YAML, …) и обратно.

Stopwatch

Прозволяет выполнять профилирование кода.

Templating

Набор средств, полезных при построении различного рода систем шаблонизации.

Page 20: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий

Symfony Framework :: Модули (7)

Translation

Набор средств для интернационализации приложения.

Validator

Набор инструментов для валидации классов.

VarDumper

Механизм обхода любой произвольной PHP-переменной.

Yaml

Загружает и формирует YAML-файлы.

Page 21: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий

ORM: Doctrine

• Объектно-реляционный проектор для PHP >= 5.3.0

• Базируется на DBAL – слой абстракции от СУБД, поддерживает MySQL, PgSQL, Oracle, Sqlite

• Собственный объектный дилект DQL (похож на HQL)

• ООП конструктор запросов

• Основывается на идеях Hibernate

• Генерация DDL из маппинга, обновление существующей структуры БД

• Генерация маппинга и объектных сущностей из DDL

• Валидация данных

• Каскадные операции с сущностями

• Поддержка аннотаций

Page 22: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий

Runtime

PHP-CGI

Классический CGI

PHP-FPM

С версии 5.3.3, для высоконагруженных сред, предоставляет некоторые дополнительные возможности

Apache Module

Подключаемый модуль

CLI

С версии 4.3.0, для приложений с интерфейсом командной строки

Page 23: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий

Ложка дёгтя

• Несогласованный синтаксис функций и неортогональность

• Отсутствие обратной совместимости между версиями языка

• Отсутствие поддержки многобайтовых кодировок в ядре языка

• Отсутствие поддержки многопоточности

Page 24: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий

Пример реального приложения :: Назначение

• CRM, электронный документооборот, хранение и обработка «тяжёлых» медиаданных

• Доступ по Web с ПК и мобильного телефона

• Гибкая система разграничения прав доступа

• Специальные обработчики контента дла определённых типов данных – транкодирование/потоковое вещание видео/аудио с подстройкой под ширину канала, аудиовизуальное «аннотирование» видео и PDF, «водные знаки» для видео, графики и документов

• Текстовые коммуникации между пользователями в приложении

• Email оповещения

• Система статусов и меток для хранимых документов, возможность организации в группы, установка метаданных

• Быстры полнотекстовый поиск, поиск по неограниченному числу параметров, поиск по специфичным параметрам, динамическое добавление критериев поиска

• API для интеграции с внешними системами

• Подсистема логирования, система иформеров, анализирующая логи и визулизирущая определённую информацию в максимально наглядном для пользователя виде.

Page 25: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий

Пример реального приложения :: Производительность

До 15 тыс. сотрудников, работающих в приложении одновременно

Page 26: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий

Пример реального приложения :: Архитектура

Web ClientHTML / AngularJS /

Bootstrap

CorePHP

Обработка клиентских запросов

MetaSilex, Doctrine

Бизнес-логика, доступ к данным, REST API

CDSМедиа ресурсы,

Redis, ФС QueuesФоновые задачи, RabbitMQ,

ZMQ

WorkerWorker

Worker

Page 27: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий

Пример реального приложения :: Средавыполнения

Client CoreMeta

CDS

Queues

Load balancer Load balancer

Apache HTTPD

Nginx

MySQLSMTP

ZMQ

ElasticsearchoAuth

WebSockets PHP FPMRedis

Supervisor

ffmpegNFS

Page 28: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий

Q & A