18
Хранение, обработка и отдача статики Мокевнин Кирилл, undev.ru

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

Embed Size (px)

DESCRIPTION

Кирилл Мокевнин Senior Developer, undev

Citation preview

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

Хранение, обработка и отдача статики

Мокевнин Кирилл, undev.ru

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

Хранение загруженных файлов

Хранилище:

• Локальная файловая система.

• База данных.

• NFS.

• Amazon S3.

• Webdav.

Организация файлов в локальной ФС:

• Соглашения.

• Общий подход.

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

WEBDAV

- это современный и защищённый сетевой протокол высокого уровня, работающий поверх HTTP для доступа к объектам и коллекциям объектов.

• Выполнение основных файловых операций над объектами на удаленном сервере.

• ngx_http_dav_module или mod_dav.

• Для использования в ZF - Zend_Http_Client.

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

Сервера и их взаимодействие

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

Сервера и их взаимодействие

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

Сервера и их взаимодействие

• Один сервер -> VPS -> Кластер.

• Storage хранит только исходники картинок.

• На storage серверах стоит nginx с модулем ngx_http_dav_module.

• Create_full_put_path on.

• Webdav используется только для загрузки картинок на storage.

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

Организация хранилища (пути), взаимодействие с базой и связь с

сущностями приложения.

Загрузка

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

Загрузка файлов

• Для каждого файла своя запись в таблице.

• is_deleted и is_ready для отложенной обработки.

• На основе id генерируется путь 161/374/000473161 до файла на storage сервере.

• Каждая сущность в базе, имеющая файл(ы), связывается с id файла.

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

Формирование урлов, конфигурация превью картинок.

Отдача файлов

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

Отдача файлов

Конфигурационный файл с типами картинок и настройками для ресайза, картинка по умолчанию (заглушка).

[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

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

Отдача файлов

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, то возвращает путь на заглушку.

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

Устройство ресайзера. Кеширование.

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

Устройство ресайзера. Кеширование.

• Кеширует nginx, ресайзит php.

• Кешируем на клиенте навсегда.

• В скрипте ресайзера не нужно поднимать bootstrap ZF).

• В nginx нужно разделять пулы коннектов для отдачи из кеша и ресайза.

• Благодаря цифровому подписыванию ресайзит только в разрешенные размеры.

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

Собирая все вместе

• Создание записи в базе при загрузке картинки и перемещение исходного файла в необходимую директорию.

• Файл конфигурации.

• Вью хелпер для урлов.

• Скрипт для генерации картинок (с кешированием).

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

Загрузка файлов

$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;

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

Загрузка файлов

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;

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

Загрузка файлов

$element = new Ext_Form_Element_File('files');

$element->setIsArray(true);

$element->setConfigurator(new File_Configurator_WebdavDb());

$value = $element->getValue();

foreach ($value as $row) {

// processing

}

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

Спасибо за внимание!

E-mail: [email protected]

Блог: www.wddx.ru

twitter.com/mokevnin