SlideShare una empresa de Scribd logo
1 de 18
Descargar para leer sin conexión
Хранение, обработка и отдача
статики
Мокевнин Кирилл, undev.ru
Хранение загруженных файлов
Хранилище:
• Локальная файловая система.
• База данных.
• NFS.
• Amazon S3.
• Webdav.
Организация файлов в локальной ФС:
• Соглашения.
• Общий подход.
WEBDAV
- это современный и защищённый сетевой протокол
высокого уровня, работающий поверх HTTP для
доступа к объектам и коллекциям объектов.
• Выполнение основных файловых операций над
объектами на удаленном сервере.
• ngx_http_dav_module или mod_dav.
• Для использования в ZF - Zend_Http_Client.
Сервера и их взаимодействие
Сервера и их взаимодействие
Сервера и их взаимодействие
• Один сервер -> VPS -> Кластер.
• Storage хранит только исходники картинок.
• На storage серверах стоит nginx с модулем
ngx_http_dav_module.
• Create_full_put_path on.
• Webdav используется только для загрузки
картинок на storage.
Организация хранилища (пути),
взаимодействие с базой и связь с
сущностями приложения.
Загрузка
Загрузка файлов
• Для каждого файла своя запись в таблице.
• is_deleted и is_ready для отложенной
обработки.
• На основе id генерируется путь
161/374/000473161 до файла на storage
сервере.
• Каждая сущность в базе, имеющая
файл(ы), связывается с id файла.
Формирование урлов, конфигурация
превью картинок.
Отдача файлов
Отдача файлов
Конфигурационный файл с типами картинок и
настройками для ресайза, картинка по
умолчанию (заглушка).
[user_avatar]
resize.big.OutputFileFormat = jpg
resize.big.width = 236
resize.big.height = 177
resize.medium.keepFrame = true
resize.medium.width = 144
resize.medium.height = 108
Отдача файлов
View Helper для генерации ссылок.
$this->image($avatar_file_id, 'user_avatar', 'big')
• http://static.starlook.ru/sets-medium-947826-
4fc400fb-image.jpg
• HTTP_UrlSigner (dklab.ru)
• Если avatar_file_id == null, то возвращает
путь на заглушку.
Устройство ресайзера. Кеширование.
Устройство ресайзера. Кеширование.
• Кеширует nginx, ресайзит php.
• Кешируем на клиенте навсегда.
• В скрипте ресайзера не нужно поднимать
bootstrap ZF).
• В nginx нужно разделять пулы коннектов для
отдачи из кеша и ресайза.
• Благодаря цифровому подписыванию ресайзит
только в разрешенные размеры.
Собирая все вместе
• Создание записи в базе при загрузке картинки и
перемещение исходного файла в необходимую
директорию.
• Файл конфигурации.
• Вью хелпер для урлов.
• Скрипт для генерации картинок (с
кешированием).
Загрузка файлов
$client = new Ext_Webdav_Client($connect_params);
$adapter = new Ext_File_Adapter_Webdav();
$adapter->setClient($adapter);
$transfer = new Ext_File_Transfer();
$transfer->setAdapter($adapter);
Ext_Form_Element_File::setTransfer($transfer);
return $transfer;
Загрузка файлов
public function configure(Ext_File $file) {
$table = new File();
$row = $table->createRow();
list($row->width, $row->height) =
getimagesize($file->getFilePath());
$row->save();
$this->getAdapter()->setUri($this-
>generateUri($row->id));
return $row;
Загрузка файлов
$element = new Ext_Form_Element_File('files');
$element->setIsArray(true);
$element->setConfigurator(new
File_Configurator_WebdavDb());
$value = $element->getValue();
foreach ($value as $row) {
// processing
}
Спасибо за внимание!
E-mail: mokevnin@gmail.com
Блог: www.wddx.ru
twitter.com/mokevnin

Más contenido relacionado

La actualidad más candente

Basis.js – «под капотом»
Basis.js – «под капотом»Basis.js – «под капотом»
Basis.js – «под капотом»Roman Dvornov
 
2013 09 19 кеширование на клиенте и сервере
2013 09 19 кеширование на клиенте и сервере2013 09 19 кеширование на клиенте и сервере
2013 09 19 кеширование на клиенте и сервереYandex
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Ontico
 
Расширенное кеширование в Doctrine2
Расширенное кеширование в Doctrine2Расширенное кеширование в Doctrine2
Расширенное кеширование в Doctrine2Ilyas Salikhov
 
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)Roman Dvornov
 
Web осень 2013 лекция 9
Web осень 2013 лекция 9Web осень 2013 лекция 9
Web осень 2013 лекция 9Technopark
 
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...Fedor Lavrentyev
 
Александр Шуменко - Varnish for authenticated users
Александр Шуменко - Varnish for authenticated usersАлександр Шуменко - Varnish for authenticated users
Александр Шуменко - Varnish for authenticated usersLEDC 2016
 
Web осень 2013 лекция 2
Web осень 2013 лекция 2Web осень 2013 лекция 2
Web осень 2013 лекция 2Technopark
 
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...Fedor Lavrentyev
 
Внутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackВнутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackAlexey Ivanov
 
DevConf 2012 - Yii, его разработка и Yii2
DevConf 2012 - Yii, его разработка и Yii2DevConf 2012 - Yii, его разработка и Yii2
DevConf 2012 - Yii, его разработка и Yii2Alexander Makarov
 
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Ontico
 
JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"oelifantiev
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПzfconfua
 
Impress Application Server for node.js (ru)
Impress Application Server for node.js (ru)Impress Application Server for node.js (ru)
Impress Application Server for node.js (ru)Timur Shemsedinov
 
Продвинутое использование Celery — Александр Кошелев
Продвинутое использование Celery — Александр КошелевПродвинутое использование Celery — Александр Кошелев
Продвинутое использование Celery — Александр КошелевYandex
 
11 - Web-технологии. Работа с СУБД
11 - Web-технологии. Работа с СУБД11 - Web-технологии. Работа с СУБД
11 - Web-технологии. Работа с СУБДRoman Brovko
 
Introduction in Node.js (in russian)
Introduction in Node.js (in russian)Introduction in Node.js (in russian)
Introduction in Node.js (in russian)Mikhail Davydov
 

La actualidad más candente (20)

Basis.js – «под капотом»
Basis.js – «под капотом»Basis.js – «под капотом»
Basis.js – «под капотом»
 
2013 09 19 кеширование на клиенте и сервере
2013 09 19 кеширование на клиенте и сервере2013 09 19 кеширование на клиенте и сервере
2013 09 19 кеширование на клиенте и сервере
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
 
Расширенное кеширование в Doctrine2
Расширенное кеширование в Doctrine2Расширенное кеширование в Doctrine2
Расширенное кеширование в Doctrine2
 
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
 
UWDC 2013, Yii2
UWDC 2013, Yii2UWDC 2013, Yii2
UWDC 2013, Yii2
 
Web осень 2013 лекция 9
Web осень 2013 лекция 9Web осень 2013 лекция 9
Web осень 2013 лекция 9
 
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
 
Александр Шуменко - Varnish for authenticated users
Александр Шуменко - Varnish for authenticated usersАлександр Шуменко - Varnish for authenticated users
Александр Шуменко - Varnish for authenticated users
 
Web осень 2013 лекция 2
Web осень 2013 лекция 2Web осень 2013 лекция 2
Web осень 2013 лекция 2
 
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
 
Внутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackВнутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpack
 
DevConf 2012 - Yii, его разработка и Yii2
DevConf 2012 - Yii, его разработка и Yii2DevConf 2012 - Yii, его разработка и Yii2
DevConf 2012 - Yii, его разработка и Yii2
 
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
 
JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОП
 
Impress Application Server for node.js (ru)
Impress Application Server for node.js (ru)Impress Application Server for node.js (ru)
Impress Application Server for node.js (ru)
 
Продвинутое использование Celery — Александр Кошелев
Продвинутое использование Celery — Александр КошелевПродвинутое использование Celery — Александр Кошелев
Продвинутое использование Celery — Александр Кошелев
 
11 - Web-технологии. Работа с СУБД
11 - Web-технологии. Работа с СУБД11 - Web-технологии. Работа с СУБД
11 - Web-технологии. Работа с СУБД
 
Introduction in Node.js (in russian)
Introduction in Node.js (in russian)Introduction in Node.js (in russian)
Introduction in Node.js (in russian)
 

Destacado

Doctrine 2
Doctrine 2Doctrine 2
Doctrine 2zfconfua
 
Применение Scrum и Kanban для разработки web-приложений
Применение Scrum и Kanban для разработки web-приложенийПрименение Scrum и Kanban для разработки web-приложений
Применение Scrum и Kanban для разработки web-приложенийKirill Klimov
 
Мобильные клиенты интернет-магазинов
Мобильные клиенты интернет-магазиновМобильные клиенты интернет-магазинов
Мобильные клиенты интернет-магазиновMagecom Ukraine
 
1000 миллисекунд из жизни Magento
1000 миллисекунд из жизни Magento1000 миллисекунд из жизни Magento
1000 миллисекунд из жизни MagentoMagecom Ukraine
 
Преимущества использования полнотекстового поиска в интернет-магазинах
Преимущества использования полнотекстового поиска в интернет-магазинахПреимущества использования полнотекстового поиска в интернет-магазинах
Преимущества использования полнотекстового поиска в интернет-магазинахMagecom Ukraine
 
Все дороги ведут в Checkout
Все дороги ведут в CheckoutВсе дороги ведут в Checkout
Все дороги ведут в CheckoutMagecom Ukraine
 
Эволюция ZF: архитектура, шаблоны, рефакторинг
Эволюция ZF: архитектура, шаблоны, рефакторингЭволюция ZF: архитектура, шаблоны, рефакторинг
Эволюция ZF: архитектура, шаблоны, рефакторингzfconfua
 
Юнит тестирование в Zend Framework 2.0
Юнит тестирование в Zend Framework 2.0Юнит тестирование в Zend Framework 2.0
Юнит тестирование в Zend Framework 2.0zfconfua
 
Применение компонент-ориентированной архитектуры для написания Magento Extens...
Применение компонент-ориентированной архитектуры для написания Magento Extens...Применение компонент-ориентированной архитектуры для написания Magento Extens...
Применение компонент-ориентированной архитектуры для написания Magento Extens...Magecom Ukraine
 
Система рендеринга в Magento
Система рендеринга в MagentoСистема рендеринга в Magento
Система рендеринга в MagentoMagecom Ukraine
 
NoSQL и Zend Framework (Никита Грошин)
NoSQL и Zend Framework (Никита Грошин)NoSQL и Zend Framework (Никита Грошин)
NoSQL и Zend Framework (Никита Грошин)zfconfua
 
Встречайте Zend Framework 2.0
Встречайте Zend Framework 2.0Встречайте Zend Framework 2.0
Встречайте Zend Framework 2.0zfconfua
 
Реализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в MagentoРеализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в MagentoMagecom Ukraine
 
Ключ успеха – процесс или продукт?
Ключ успеха – процесс или продукт?Ключ успеха – процесс или продукт?
Ключ успеха – процесс или продукт?Magecom Ukraine
 
Управление продуктом в стиле Magento Unified Process
Управление продуктом в стиле Magento Unified ProcessУправление продуктом в стиле Magento Unified Process
Управление продуктом в стиле Magento Unified ProcessMagecom Ukraine
 
Применение TDD при разработке веб-сервисов
Применение TDD при разработке веб-сервисовПрименение TDD при разработке веб-сервисов
Применение TDD при разработке веб-сервисовMagecom Ukraine
 
Индексирование в Magento
Индексирование в MagentoИндексирование в Magento
Индексирование в MagentoMagecom Ukraine
 
NoSQL и Zend Framework (Ростислав Михайлив)
NoSQL и Zend Framework (Ростислав Михайлив)NoSQL и Zend Framework (Ростислав Михайлив)
NoSQL и Zend Framework (Ростислав Михайлив)zfconfua
 

Destacado (18)

Doctrine 2
Doctrine 2Doctrine 2
Doctrine 2
 
Применение Scrum и Kanban для разработки web-приложений
Применение Scrum и Kanban для разработки web-приложенийПрименение Scrum и Kanban для разработки web-приложений
Применение Scrum и Kanban для разработки web-приложений
 
Мобильные клиенты интернет-магазинов
Мобильные клиенты интернет-магазиновМобильные клиенты интернет-магазинов
Мобильные клиенты интернет-магазинов
 
1000 миллисекунд из жизни Magento
1000 миллисекунд из жизни Magento1000 миллисекунд из жизни Magento
1000 миллисекунд из жизни Magento
 
Преимущества использования полнотекстового поиска в интернет-магазинах
Преимущества использования полнотекстового поиска в интернет-магазинахПреимущества использования полнотекстового поиска в интернет-магазинах
Преимущества использования полнотекстового поиска в интернет-магазинах
 
Все дороги ведут в Checkout
Все дороги ведут в CheckoutВсе дороги ведут в Checkout
Все дороги ведут в Checkout
 
Эволюция ZF: архитектура, шаблоны, рефакторинг
Эволюция ZF: архитектура, шаблоны, рефакторингЭволюция ZF: архитектура, шаблоны, рефакторинг
Эволюция ZF: архитектура, шаблоны, рефакторинг
 
Юнит тестирование в Zend Framework 2.0
Юнит тестирование в Zend Framework 2.0Юнит тестирование в Zend Framework 2.0
Юнит тестирование в Zend Framework 2.0
 
Применение компонент-ориентированной архитектуры для написания Magento Extens...
Применение компонент-ориентированной архитектуры для написания Magento Extens...Применение компонент-ориентированной архитектуры для написания Magento Extens...
Применение компонент-ориентированной архитектуры для написания Magento Extens...
 
Система рендеринга в Magento
Система рендеринга в MagentoСистема рендеринга в Magento
Система рендеринга в Magento
 
NoSQL и Zend Framework (Никита Грошин)
NoSQL и Zend Framework (Никита Грошин)NoSQL и Zend Framework (Никита Грошин)
NoSQL и Zend Framework (Никита Грошин)
 
Встречайте Zend Framework 2.0
Встречайте Zend Framework 2.0Встречайте Zend Framework 2.0
Встречайте Zend Framework 2.0
 
Реализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в MagentoРеализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в Magento
 
Ключ успеха – процесс или продукт?
Ключ успеха – процесс или продукт?Ключ успеха – процесс или продукт?
Ключ успеха – процесс или продукт?
 
Управление продуктом в стиле Magento Unified Process
Управление продуктом в стиле Magento Unified ProcessУправление продуктом в стиле Magento Unified Process
Управление продуктом в стиле Magento Unified Process
 
Применение TDD при разработке веб-сервисов
Применение TDD при разработке веб-сервисовПрименение TDD при разработке веб-сервисов
Применение TDD при разработке веб-сервисов
 
Индексирование в Magento
Индексирование в MagentoИндексирование в Magento
Индексирование в Magento
 
NoSQL и Zend Framework (Ростислав Михайлив)
NoSQL и Zend Framework (Ростислав Михайлив)NoSQL и Zend Framework (Ростислав Михайлив)
NoSQL и Zend Framework (Ростислав Михайлив)
 

Similar a Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социальной сети starlook.ru

(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...ForkConf
 
Rsnx tsvetkov che btrix conf 2015
Rsnx tsvetkov che btrix conf 2015Rsnx tsvetkov che btrix conf 2015
Rsnx tsvetkov che btrix conf 2015Yulia Karpova
 
Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Nikita Borzykh
 
Drupal в облаке - Владимир Юнев
Drupal в облаке - Владимир ЮневDrupal в облаке - Владимир Юнев
Drupal в облаке - Владимир ЮневDrupalCamp MSK
 
Как и зачем создавать NginX-модуль — теория, практика, профит. Часть 2 / Васи...
Как и зачем создавать NginX-модуль — теория, практика, профит. Часть 2 / Васи...Как и зачем создавать NginX-модуль — теория, практика, профит. Часть 2 / Васи...
Как и зачем создавать NginX-модуль — теория, практика, профит. Часть 2 / Васи...Ontico
 
Web deployment
Web deploymentWeb deployment
Web deploymentGetDev.NET
 
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)Ontico
 
Ускоряем Wordpress: кеширование, CDN, Varnish Cache
Ускоряем Wordpress: кеширование, CDN, Varnish CacheУскоряем Wordpress: кеширование, CDN, Varnish Cache
Ускоряем Wordpress: кеширование, CDN, Varnish CacheIgor Sazonov
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктуройdddpaul
 
Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?buranLcme
 
Windows azure общий обзор
Windows azure общий обзорWindows azure общий обзор
Windows azure общий обзорMicrosoft
 
FT & HA Rails приложений приложений — это просто
FT & HA Rails приложений приложений — это простоFT & HA Rails приложений приложений — это просто
FT & HA Rails приложений приложений — это простоАлександр Ежов
 
Client optimization drupal
Client optimization drupalClient optimization drupal
Client optimization drupalYury Glushkov
 
Baseof servletsjava intro
Baseof servletsjava introBaseof servletsjava intro
Baseof servletsjava introalexey1991
 
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow
Zabbix в сервисной компании  ОНЛАНТА -  Zabbix Meetup Moscow Zabbix в сервисной компании  ОНЛАНТА -  Zabbix Meetup Moscow
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow Vadim Nesterov
 
Александр Соловьёв, Griddynamics.com
Александр Соловьёв, Griddynamics.comАлександр Соловьёв, Griddynamics.com
Александр Соловьёв, Griddynamics.comOntico
 
[ONSEC ]XSS vs waf
[ONSEC ]XSS vs waf[ONSEC ]XSS vs waf
[ONSEC ]XSS vs wafd0znp
 
Основные аспекты управления веб-проектом в Microsoft Azure Websites
Основные аспекты управления веб-проектом в Microsoft Azure WebsitesОсновные аспекты управления веб-проектом в Microsoft Azure Websites
Основные аспекты управления веб-проектом в Microsoft Azure WebsitesArtur Baranok
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровYandex
 
11 лекция, петр волков
11 лекция, петр волков11 лекция, петр волков
11 лекция, петр волковkarina krew
 

Similar a Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социальной сети starlook.ru (20)

(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
 
Rsnx tsvetkov che btrix conf 2015
Rsnx tsvetkov che btrix conf 2015Rsnx tsvetkov che btrix conf 2015
Rsnx tsvetkov che btrix conf 2015
 
Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.
 
Drupal в облаке - Владимир Юнев
Drupal в облаке - Владимир ЮневDrupal в облаке - Владимир Юнев
Drupal в облаке - Владимир Юнев
 
Как и зачем создавать NginX-модуль — теория, практика, профит. Часть 2 / Васи...
Как и зачем создавать NginX-модуль — теория, практика, профит. Часть 2 / Васи...Как и зачем создавать NginX-модуль — теория, практика, профит. Часть 2 / Васи...
Как и зачем создавать NginX-модуль — теория, практика, профит. Часть 2 / Васи...
 
Web deployment
Web deploymentWeb deployment
Web deployment
 
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)
 
Ускоряем Wordpress: кеширование, CDN, Varnish Cache
Ускоряем Wordpress: кеширование, CDN, Varnish CacheУскоряем Wordpress: кеширование, CDN, Varnish Cache
Ускоряем Wordpress: кеширование, CDN, Varnish Cache
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктурой
 
Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?
 
Windows azure общий обзор
Windows azure общий обзорWindows azure общий обзор
Windows azure общий обзор
 
FT & HA Rails приложений приложений — это просто
FT & HA Rails приложений приложений — это простоFT & HA Rails приложений приложений — это просто
FT & HA Rails приложений приложений — это просто
 
Client optimization drupal
Client optimization drupalClient optimization drupal
Client optimization drupal
 
Baseof servletsjava intro
Baseof servletsjava introBaseof servletsjava intro
Baseof servletsjava intro
 
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow
Zabbix в сервисной компании  ОНЛАНТА -  Zabbix Meetup Moscow Zabbix в сервисной компании  ОНЛАНТА -  Zabbix Meetup Moscow
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow
 
Александр Соловьёв, Griddynamics.com
Александр Соловьёв, Griddynamics.comАлександр Соловьёв, Griddynamics.com
Александр Соловьёв, Griddynamics.com
 
[ONSEC ]XSS vs waf
[ONSEC ]XSS vs waf[ONSEC ]XSS vs waf
[ONSEC ]XSS vs waf
 
Основные аспекты управления веб-проектом в Microsoft Azure Websites
Основные аспекты управления веб-проектом в Microsoft Azure WebsitesОсновные аспекты управления веб-проектом в Microsoft Azure Websites
Основные аспекты управления веб-проектом в Microsoft Azure Websites
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
 
11 лекция, петр волков
11 лекция, петр волков11 лекция, петр волков
11 лекция, петр волков
 

Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социальной сети starlook.ru

  • 1. Хранение, обработка и отдача статики Мокевнин Кирилл, undev.ru
  • 2. Хранение загруженных файлов Хранилище: • Локальная файловая система. • База данных. • NFS. • Amazon S3. • Webdav. Организация файлов в локальной ФС: • Соглашения. • Общий подход.
  • 3. WEBDAV - это современный и защищённый сетевой протокол высокого уровня, работающий поверх HTTP для доступа к объектам и коллекциям объектов. • Выполнение основных файловых операций над объектами на удаленном сервере. • ngx_http_dav_module или mod_dav. • Для использования в ZF - Zend_Http_Client.
  • 4. Сервера и их взаимодействие
  • 5. Сервера и их взаимодействие
  • 6. Сервера и их взаимодействие • Один сервер -> VPS -> Кластер. • Storage хранит только исходники картинок. • На storage серверах стоит nginx с модулем ngx_http_dav_module. • Create_full_put_path on. • Webdav используется только для загрузки картинок на storage.
  • 7. Организация хранилища (пути), взаимодействие с базой и связь с сущностями приложения. Загрузка
  • 8. Загрузка файлов • Для каждого файла своя запись в таблице. • is_deleted и is_ready для отложенной обработки. • На основе id генерируется путь 161/374/000473161 до файла на storage сервере. • Каждая сущность в базе, имеющая файл(ы), связывается с id файла.
  • 10. Отдача файлов Конфигурационный файл с типами картинок и настройками для ресайза, картинка по умолчанию (заглушка). [user_avatar] resize.big.OutputFileFormat = jpg resize.big.width = 236 resize.big.height = 177 resize.medium.keepFrame = true resize.medium.width = 144 resize.medium.height = 108
  • 11. Отдача файлов View Helper для генерации ссылок. $this->image($avatar_file_id, 'user_avatar', 'big') • http://static.starlook.ru/sets-medium-947826- 4fc400fb-image.jpg • HTTP_UrlSigner (dklab.ru) • Если avatar_file_id == null, то возвращает путь на заглушку.
  • 13. Устройство ресайзера. Кеширование. • Кеширует nginx, ресайзит php. • Кешируем на клиенте навсегда. • В скрипте ресайзера не нужно поднимать bootstrap ZF). • В nginx нужно разделять пулы коннектов для отдачи из кеша и ресайза. • Благодаря цифровому подписыванию ресайзит только в разрешенные размеры.
  • 14. Собирая все вместе • Создание записи в базе при загрузке картинки и перемещение исходного файла в необходимую директорию. • Файл конфигурации. • Вью хелпер для урлов. • Скрипт для генерации картинок (с кешированием).
  • 15. Загрузка файлов $client = new Ext_Webdav_Client($connect_params); $adapter = new Ext_File_Adapter_Webdav(); $adapter->setClient($adapter); $transfer = new Ext_File_Transfer(); $transfer->setAdapter($adapter); Ext_Form_Element_File::setTransfer($transfer); return $transfer;
  • 16. Загрузка файлов public function configure(Ext_File $file) { $table = new File(); $row = $table->createRow(); list($row->width, $row->height) = getimagesize($file->getFilePath()); $row->save(); $this->getAdapter()->setUri($this- >generateUri($row->id)); return $row;
  • 17. Загрузка файлов $element = new Ext_Form_Element_File('files'); $element->setIsArray(true); $element->setConfigurator(new File_Configurator_WebdavDb()); $value = $element->getValue(); foreach ($value as $row) { // processing }
  • 18. Спасибо за внимание! E-mail: mokevnin@gmail.com Блог: www.wddx.ru twitter.com/mokevnin