O slideshow foi denunciado.
Seu SlideShare está sendo baixado. ×

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

Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Carregando em…3
×

Confira estes a seguir

1 de 18 Anúncio

Mais Conteúdo rRelacionado

Diapositivos para si (20)

Quem viu também gostou (18)

Anúncio

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

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

  1. 1. Хранение, обработка и отдача статики Мокевнин Кирилл, undev.ru
  2. 2. Хранение загруженных файлов Хранилище: • Локальная файловая система. • База данных. • NFS. • Amazon S3. • Webdav. Организация файлов в локальной ФС: • Соглашения. • Общий подход.
  3. 3. WEBDAV - это современный и защищённый сетевой протокол высокого уровня, работающий поверх HTTP для доступа к объектам и коллекциям объектов. • Выполнение основных файловых операций над объектами на удаленном сервере. • ngx_http_dav_module или mod_dav. • Для использования в ZF - Zend_Http_Client.
  4. 4. Сервера и их взаимодействие
  5. 5. Сервера и их взаимодействие
  6. 6. Сервера и их взаимодействие • Один сервер -> VPS -> Кластер. • Storage хранит только исходники картинок. • На storage серверах стоит nginx с модулем ngx_http_dav_module. • Create_full_put_path on. • Webdav используется только для загрузки картинок на storage.
  7. 7. Организация хранилища (пути), взаимодействие с базой и связь с сущностями приложения. Загрузка
  8. 8. Загрузка файлов • Для каждого файла своя запись в таблице. • is_deleted и is_ready для отложенной обработки. • На основе id генерируется путь 161/374/000473161 до файла на storage сервере. • Каждая сущность в базе, имеющая файл(ы), связывается с id файла.
  9. 9. Формирование урлов, конфигурация превью картинок. Отдача файлов
  10. 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. 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, то возвращает путь на заглушку.
  12. 12. Устройство ресайзера. Кеширование.
  13. 13. Устройство ресайзера. Кеширование. • Кеширует nginx, ресайзит php. • Кешируем на клиенте навсегда. • В скрипте ресайзера не нужно поднимать bootstrap ZF). • В nginx нужно разделять пулы коннектов для отдачи из кеша и ресайза. • Благодаря цифровому подписыванию ресайзит только в разрешенные размеры.
  14. 14. Собирая все вместе • Создание записи в базе при загрузке картинки и перемещение исходного файла в необходимую директорию. • Файл конфигурации. • Вью хелпер для урлов. • Скрипт для генерации картинок (с кешированием).
  15. 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. 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. 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. 18. Спасибо за внимание! E-mail: mokevnin@gmail.com Блог: www.wddx.ru twitter.com/mokevnin

×