SlideShare a Scribd company logo
1 of 53
Download to read offline
5 способов деплоя
PHP-кода в условиях
хайлоада
Юрий Насретдинов
✦ Крупнейшая в мире социальная сеть
для знакомства с новыми людьми
✦ 2 000 серверов с PHP
✦ 150 000 файлов объемом 900 Мб
План
✦ Понятие деплоя кода
✦ Старая система деплоя в Badoo
✦ Другие существующие решения
✦ Новая система — MDK
✦ Заключение
План
✦ Понятие деплоя кода
✦ Старая система деплоя в Badoo
✦ Другие существующие решения
✦ Новая система — MDK
✦ Заключение
Deploy
move (troops) into position
for military action
Процесс деплоя
✦ Получение кода из репозитория (clone / fetch / checkout)
✦ Сборка (build)
✦ Доставка на конечные сервера (deployment)
План
✦ Понятие деплоя кода
✦ Старая система деплоя в Badoo («лупы»)
✦ Другие существующие решения
✦ Новая система — MDK
✦ Заключение
Deploy
move (troops) into position
for military action
Loop
a pseudo-device
that makes a file
accessible as a
block device
Loop
✦ packages/
✦ templates/
✦ config/
✦ public/
build directory
cp -r
mounted loop
✦ packages/
✦ templates/
✦ config/
✦ public/
umount loop
900 MiB
loop
900 MiB
mount
План
✦ Понятие деплоя кода
✦ Старая система деплоя в Badoo
✦ Другие существующие решения
✦ Новая система — MDK
✦ Заключение
Deploy
move (troops) into position
for military action
GPL
GNU
General Public
Licence
Существующие решения
✦ Система контроля версий (svn up / git pull / hg up)
✦ rsync (в новую директорию или «поверх»)
✦ Один файл (phar, hhbc, loop)
✦ rsync + 2 директории + realpath_root
Существующие решения
✦ Система контроля версий (svn up / git pull / hg up)
✦ rsync (в новую директорию или «поверх»)
✦ Один файл (phar, hhbc, loop)
✦ rsync + 2 директории + realpath_root
svn up
+ «Ленивый»
+ Быстрый
+ Легковесный (в случае SVN)
- Неатомарный
+/- Подходит для небольших проектов
Существующие решения
✦ Система контроля версий (svn up / git pull / hg up)
✦ rsync (в новую директорию или «поверх»)
✦ Один файл (phar, hhbc, loop)
✦ rsync + 2 директории + realpath_root
Rsync в новую директорию
+ Атомарный
-- Нагрузка по I/O (заливка нового + удаление старого)
-- Много трафика
Rsync в новую директорию
Существующие решения
✦ Система контроля версий (svn up / git pull / hg up)
✦ rsync (в новую директорию или «поверх»)
✦ Один файл (phar, hhbc, loop)
✦ rsync + 2 директории + realpath_root
Rsync поверх
++ Отправка только изменений
- Неатомарный
- Высокий CPU% на отправляющей стороне
- Отправка и прием списка всех файлов с их stat()
- 3 мб и 1 сек CPU на 150к файлов
- 40-60 сек на 1000 серверов (24 ядра и 1 Гбит/с)
Существующие решения
✦ Система контроля версий (svn up / git pull / hg up)
✦ rsync (в новую директорию или «поверх»)
✦ Один файл (phar, hhbc, loop)
✦ rsync + 2 директории + realpath_root
Один файл
++ Возможность использования uftp / bittorent
+ Простота
+ Атомарность
+ Легкость проверки целостности (md5 от одного файла)
+ Последовательная запись
- Большой объем записи
- Большая нагрузка на сеть
UFTP
✦ Загрузка по протоколу UDP (Multicast) + NACK
✦ Подходит для загрузки на сотни машин
✦ В наших условиях работает лучше bittorrent
✦ Open-source
Один файл (tar.gz)
-- Нагрузка по I/O (создание 150к файлов)
Один файл (phar)
+ Нативный для PHP
- Необходимость адаптировать код для работы из архива
- Нельзя поменять один файл
- OPCache сбрасывается полностью
Один файл (hhbc)
+/- Нативный для HHVM
+ Дополнительные оптимизации (+30% к скорости)
- Необходимость адаптировать код для работы из архива
- Запрещено использовать eval и динамические include
- Нельзя поменять один файл
Один файл (loop)
+ Выглядит, как обычная директория
+ Можно поменять один файл (rw mount)
-- Не совместим с docker (no dynamic mounts)
- OPCache сбрасывается полностью
- Требуется sudo для mount
- Не забывать монтировать при (ре)старте
Один файл (loop), docker
✦ Docker не поддерживает dynamic mounts
✦ loop монтируется динамически
✦ Пробовали понимать локальные NFS, SSHFS
✦ rsync /var/loop/<N>/ /var/www/
✦ /var/www/ — директория, прокинутая в контейнер
✦ Решение плохое, rsync не атомарный
Существующие решения
✦ Система контроля версий (svn up / git pull / hg up)
✦ rsync (в новую директорию или «поверх»)
✦ Один файл (phar, hhbc, loop)
✦ rsync + 2 директории + realpath_root
config:
Atomic deploy
current_link
dir1
dir2
define('ROOT_DIR', __DIR__);
Atomic deploy
current_link -> dir2
Requests:
deploy
current_link -> dir1
Atomic deploy
✦ atomic symlink change using rename(2)
✦ php-fpm reload / apache reload
✦ fork(2)
✦ child: exec(2) and adopt listen socket
✦ parent: close listen socket, drain and exit
- or -
Rasmus-style
document_root A
B
nginx.conf
root $realpath_root;
apache.conf
<IfModule mod_realdoc.c>
RealpathEvery 2
</IfModule>
https://github.com/etsy/mod_realdoc
- or -
rsync
Rasmus-style
+ Не требуется адаптация кода
+ Не требуется reload — переиспользуется OPCache
- Требуется в 2 раза больше памяти под OPCache
- Нельзя деплоиться чаще, чем раз в max_execution_time сек
- Для Apache нужен сторонний модуль
План
✦ Понятие деплоя кода
✦ Старая система деплоя в Badoo
✦ Другие существующие решения
✦ Новая система — MDK
✦ Заключение
Требования
✦ Быстрый деплой на staging и production
✦ Атомарные патчи
✦ Скрипты могут работать несколько часов (CLI)
✦ Малое потребление ресурсов
✦ Сохранность OPCache
✦ Быстрый откат
Требования
✦ Быстрый деплой на staging и production
✦ Атомарные патчи
✦ Скрипты могут работать несколько часов (CLI)
✦ Малое потребление ресурсов
✦ Сохранность OPCache
✦ Быстрый откат
Возможные решения
✦ loop xN (-staging, -docker, -opcache)
✦ rsync xN (-production, -opcache xN)
✦ SVN xN (-production, -opcache xN)
Deploy
move (troops) into position
for military action
© https://www.youtube.com/watch?v=P2HhjHo1EQA
Multiversion Deployment Kit
✦ Возьмем архитектуру хранения деревьев (tree) из Git
✦ Переименуем все файлы из file.php в file.php.<version>
✦ Для скорости напишем её на Go
✦ Готово!
Multiversion Deployment Kit
map:
array(
one => f/a3f4da63,
two => f/c193497a,
map => d/9c134b68,
)
root
deadbeef
one
a3f4da63
two
c193497a
map
9c134b68
three
febe6995
four
75ffdb82
Multiversion Deployment Kit
root
deadbeef
one
a3f4da63
two
c193497a
map
9c134b68
three
febe6995
four
75ffdb82
root*
f7fc6872
map*
21e05ae6
three*
28e967c5
Multiversion Deployment Kit
|- current.map -> f7fc6872.map
|- deadbeef.map
|- f7fc6872.map
|- one.php.a3f4da63
|- two.php.c193497a
|- tree/
| |- 9c134b68.map
| |- 21e05ae6.map
| |- three.php.febe6995
| |- three.php.21e05ae6
Multiversion Deployment Kit
|- current.map -> f7fc6872.map
|- deadbeef.map
|- f7fc6872.map
|- one.php
|- one.php.a3f4da63
|- two.php
|- two.php.c193497a
|- mdk.inc
|- tree/
| |- 9c134b68.map
| |- 21e05ae6.map
| |- three.php
| |- three.php.febe6995
| |- three.php.21e05ae6
one.php:
<?php

require_once "mdk.inc";

require

mdk_resolve_path("a.php");
MDK deploy protocol
1. Получаем корневой map
2.Смотрим, каких файлов не хватает
3.Запрашиваем недостающие файлы
4.Переходим к пункту 2
MDK deploy protocol
root
deadbeef
one
a3f4da63
MDK deploy protocol
root
deadbeef
one
a3f4da63
two
c193497a
tree
9c134b68
MDK deploy protocol
root
deadbeef
one
a3f4da63
two
c193497a
tree
9c134b68
three
febe6995
four
75ffdb82
Multiversion Deployment Kit
+ Быстрый атомарный деплой небольших изменений
+ Низкое потребление CPU
+ OPCache переиспользуется
+ Позволяет скриптам работать сутками
+ Легкий мониторинг
+ Быстрый откат изменений
+ Написана на Go
Multiversion Deployment Kit
- Требуется модификация кода
- Сложная
- Требуется Garbage Collector
- Для редактирования файлов нужны спец. утилиты (mdk-vim)
MDK numbers
Staging deploy 3-5 seconds
Production deploy 2 minutes
Patch deploy 5-10 seconds
Full deploy 40 minutes
Fails count 2
Epic fails count 1
План
✦ Понятие деплоя кода
✦ Старая система деплоя в Badoo
✦ Другие существующие решения
✦ Новая система — MDK
✦ Заключение
Заключение
✦ Rasmus не врет, rsync + realpath_root хорош
✦ «Лупы» тоже работают вполне неплохо
✦ Используйте то, что подходит лично вам
✦ Частый деплой + долгая работа => MDK
✦ Расскажите о своем опыте
✦ Заходите на https://tech.badoo.com/ !
Thank you!
Юрий Насретдинов
nasretdinov@gmail.com

More Related Content

What's hot

Александр Крашенинников "Hadoop High Availability: опыт Badoo"
Александр Крашенинников "Hadoop High Availability: опыт Badoo"Александр Крашенинников "Hadoop High Availability: опыт Badoo"
Александр Крашенинников "Hadoop High Availability: опыт Badoo"IT Event
 
Денис Иванов
Денис ИвановДенис Иванов
Денис ИвановCodeFest
 
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Ontico
 
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Ontico
 
Эволюция программно-аппаратного обеспечения хранения фотографий в Badoo / Дми...
Эволюция программно-аппаратного обеспечения хранения фотографий в Badoo / Дми...Эволюция программно-аппаратного обеспечения хранения фотографий в Badoo / Дми...
Эволюция программно-аппаратного обеспечения хранения фотографий в Badoo / Дми...Ontico
 
Андрей Ситник
Андрей СитникАндрей Ситник
Андрей СитникCodeFest
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Ontico
 
Docker integration into Badoo
Docker integration into BadooDocker integration into Badoo
Docker integration into BadooAnton Turetsky
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Ontico
 
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов НиколайnoBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов НиколайOntico
 
Облако в Badoo год спустя
Облако в Badoo год спустяОблако в Badoo год спустя
Облако в Badoo год спустяYuriy Nasretdinov
 
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)Ontico
 
Docker & Puppet: как их скрестить и надо ли вам это?
Docker & Puppet: как их скрестить и надо ли вам это?Docker & Puppet: как их скрестить и надо ли вам это?
Docker & Puppet: как их скрестить и надо ли вам это?Anton Turetsky
 
Алексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web WorkersАлексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web WorkersAleksey Fomkin
 
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Fwdays
 
Антон Турецкий
Антон ТурецкийАнтон Турецкий
Антон ТурецкийCodeFest
 
Семь тысяч Rps, один go
Семь тысяч Rps, один goСемь тысяч Rps, один go
Семь тысяч Rps, один goBadoo Development
 
2020.10.13 HA Redis is simple. FWDays Highload
2020.10.13 HA Redis is simple. FWDays Highload2020.10.13 HA Redis is simple. FWDays Highload
2020.10.13 HA Redis is simple. FWDays HighloadYehor Herasymchuk
 
Юрий Насретдинов, Badoo
Юрий Насретдинов, BadooЮрий Насретдинов, Badoo
Юрий Насретдинов, BadooOntico
 

What's hot (20)

Александр Крашенинников "Hadoop High Availability: опыт Badoo"
Александр Крашенинников "Hadoop High Availability: опыт Badoo"Александр Крашенинников "Hadoop High Availability: опыт Badoo"
Александр Крашенинников "Hadoop High Availability: опыт Badoo"
 
Денис Иванов
Денис ИвановДенис Иванов
Денис Иванов
 
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
 
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
 
Эволюция программно-аппаратного обеспечения хранения фотографий в Badoo / Дми...
Эволюция программно-аппаратного обеспечения хранения фотографий в Badoo / Дми...Эволюция программно-аппаратного обеспечения хранения фотографий в Badoo / Дми...
Эволюция программно-аппаратного обеспечения хранения фотографий в Badoo / Дми...
 
Андрей Ситник
Андрей СитникАндрей Ситник
Андрей Ситник
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
 
Docker integration into Badoo
Docker integration into BadooDocker integration into Badoo
Docker integration into Badoo
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...
 
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов НиколайnoBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
 
Облако в Badoo год спустя
Облако в Badoo год спустяОблако в Badoo год спустя
Облако в Badoo год спустя
 
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)
 
Docker & Puppet: как их скрестить и надо ли вам это?
Docker & Puppet: как их скрестить и надо ли вам это?Docker & Puppet: как их скрестить и надо ли вам это?
Docker & Puppet: как их скрестить и надо ли вам это?
 
Алексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web WorkersАлексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web Workers
 
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
 
Антон Турецкий
Антон ТурецкийАнтон Турецкий
Антон Турецкий
 
pgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresqlpgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresql
 
Семь тысяч Rps, один go
Семь тысяч Rps, один goСемь тысяч Rps, один go
Семь тысяч Rps, один go
 
2020.10.13 HA Redis is simple. FWDays Highload
2020.10.13 HA Redis is simple. FWDays Highload2020.10.13 HA Redis is simple. FWDays Highload
2020.10.13 HA Redis is simple. FWDays Highload
 
Юрий Насретдинов, Badoo
Юрий Насретдинов, BadooЮрий Насретдинов, Badoo
Юрий Насретдинов, Badoo
 

Viewers also liked

Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)Ontico
 
Как HeadHunter удалось безопасно нарушить RFC 793 (TCP) и обойти сетевые лову...
Как HeadHunter удалось безопасно нарушить RFC 793 (TCP) и обойти сетевые лову...Как HeadHunter удалось безопасно нарушить RFC 793 (TCP) и обойти сетевые лову...
Как HeadHunter удалось безопасно нарушить RFC 793 (TCP) и обойти сетевые лову...Ontico
 
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)Ontico
 
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...Ontico
 
Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав К...
Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав К...Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав К...
Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав К...Ontico
 
Сайт под управлением ERP или ERP под управлением сайта / Станислав Гоц (Lamod...
Сайт под управлением ERP или ERP под управлением сайта / Станислав Гоц (Lamod...Сайт под управлением ERP или ERP под управлением сайта / Станислав Гоц (Lamod...
Сайт под управлением ERP или ERP под управлением сайта / Станислав Гоц (Lamod...Ontico
 
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)Ontico
 
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...Ontico
 
Особенности архитектуры распределённого хранилища в Dropbox / Слава Бахмутов ...
Особенности архитектуры распределённого хранилища в Dropbox / Слава Бахмутов ...Особенности архитектуры распределённого хранилища в Dropbox / Слава Бахмутов ...
Особенности архитектуры распределённого хранилища в Dropbox / Слава Бахмутов ...Ontico
 
Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулов...
Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулов...Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулов...
Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулов...Ontico
 
Побеждаем мейнфрейм / Андрей Николаенко (IBS)
Побеждаем мейнфрейм / Андрей Николаенко (IBS)Побеждаем мейнфрейм / Андрей Николаенко (IBS)
Побеждаем мейнфрейм / Андрей Николаенко (IBS)Ontico
 
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...Ontico
 
Опыт построения СХД на базе Windows Server для использования в публичном обла...
Опыт построения СХД на базе Windows Server для использования в публичном обла...Опыт построения СХД на базе Windows Server для использования в публичном обла...
Опыт построения СХД на базе Windows Server для использования в публичном обла...Ontico
 
Testing applications with traffic control in containers / Alban Crequy (Kinvolk)
Testing applications with traffic control in containers / Alban Crequy (Kinvolk)Testing applications with traffic control in containers / Alban Crequy (Kinvolk)
Testing applications with traffic control in containers / Alban Crequy (Kinvolk)Ontico
 
Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)
Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)
Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)Ontico
 
MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)
MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)
MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)Ontico
 
Измеряем энергопотребление с помощью Arduino / Алексей Лавренюк (Яндекс)
Измеряем энергопотребление с помощью Arduino / Алексей Лавренюк (Яндекс)Измеряем энергопотребление с помощью Arduino / Алексей Лавренюк (Яндекс)
Измеряем энергопотребление с помощью Arduino / Алексей Лавренюк (Яндекс)Ontico
 
Промышленное ускорение сайтов / Николай Мациевский (Айри.рф)
Промышленное ускорение сайтов / Николай Мациевский (Айри.рф)Промышленное ускорение сайтов / Николай Мациевский (Айри.рф)
Промышленное ускорение сайтов / Николай Мациевский (Айри.рф)Ontico
 
Evaluation of High Availability Performance of Kubernetes and Docker Swarm on...
Evaluation of High Availability Performance of Kubernetes and Docker Swarm on...Evaluation of High Availability Performance of Kubernetes and Docker Swarm on...
Evaluation of High Availability Performance of Kubernetes and Docker Swarm on...Ontico
 
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)Ontico
 

Viewers also liked (20)

Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
 
Как HeadHunter удалось безопасно нарушить RFC 793 (TCP) и обойти сетевые лову...
Как HeadHunter удалось безопасно нарушить RFC 793 (TCP) и обойти сетевые лову...Как HeadHunter удалось безопасно нарушить RFC 793 (TCP) и обойти сетевые лову...
Как HeadHunter удалось безопасно нарушить RFC 793 (TCP) и обойти сетевые лову...
 
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
 
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
 
Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав К...
Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав К...Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав К...
Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав К...
 
Сайт под управлением ERP или ERP под управлением сайта / Станислав Гоц (Lamod...
Сайт под управлением ERP или ERP под управлением сайта / Станислав Гоц (Lamod...Сайт под управлением ERP или ERP под управлением сайта / Станислав Гоц (Lamod...
Сайт под управлением ERP или ERP под управлением сайта / Станислав Гоц (Lamod...
 
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)
 
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
 
Особенности архитектуры распределённого хранилища в Dropbox / Слава Бахмутов ...
Особенности архитектуры распределённого хранилища в Dropbox / Слава Бахмутов ...Особенности архитектуры распределённого хранилища в Dropbox / Слава Бахмутов ...
Особенности архитектуры распределённого хранилища в Dropbox / Слава Бахмутов ...
 
Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулов...
Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулов...Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулов...
Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулов...
 
Побеждаем мейнфрейм / Андрей Николаенко (IBS)
Побеждаем мейнфрейм / Андрей Николаенко (IBS)Побеждаем мейнфрейм / Андрей Николаенко (IBS)
Побеждаем мейнфрейм / Андрей Николаенко (IBS)
 
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
 
Опыт построения СХД на базе Windows Server для использования в публичном обла...
Опыт построения СХД на базе Windows Server для использования в публичном обла...Опыт построения СХД на базе Windows Server для использования в публичном обла...
Опыт построения СХД на базе Windows Server для использования в публичном обла...
 
Testing applications with traffic control in containers / Alban Crequy (Kinvolk)
Testing applications with traffic control in containers / Alban Crequy (Kinvolk)Testing applications with traffic control in containers / Alban Crequy (Kinvolk)
Testing applications with traffic control in containers / Alban Crequy (Kinvolk)
 
Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)
Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)
Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)
 
MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)
MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)
MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)
 
Измеряем энергопотребление с помощью Arduino / Алексей Лавренюк (Яндекс)
Измеряем энергопотребление с помощью Arduino / Алексей Лавренюк (Яндекс)Измеряем энергопотребление с помощью Arduino / Алексей Лавренюк (Яндекс)
Измеряем энергопотребление с помощью Arduino / Алексей Лавренюк (Яндекс)
 
Промышленное ускорение сайтов / Николай Мациевский (Айри.рф)
Промышленное ускорение сайтов / Николай Мациевский (Айри.рф)Промышленное ускорение сайтов / Николай Мациевский (Айри.рф)
Промышленное ускорение сайтов / Николай Мациевский (Айри.рф)
 
Evaluation of High Availability Performance of Kubernetes and Docker Swarm on...
Evaluation of High Availability Performance of Kubernetes and Docker Swarm on...Evaluation of High Availability Performance of Kubernetes and Docker Swarm on...
Evaluation of High Availability Performance of Kubernetes and Docker Swarm on...
 
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
 

Similar to 5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)

Компиляция скриптов PHP (Алексей Романенко)
Компиляция скриптов PHP (Алексей Романенко)Компиляция скриптов PHP (Алексей Романенко)
Компиляция скриптов PHP (Алексей Романенко)Ontico
 
CRIU: ускорение запуска PHP в CloudLinux OS -- Руслан Купреев
CRIU: ускорение запуска PHP в CloudLinux OS  -- Руслан КупреевCRIU: ускорение запуска PHP в CloudLinux OS  -- Руслан Купреев
CRIU: ускорение запуска PHP в CloudLinux OS -- Руслан КупреевOpenVZ
 
Alex Krasheninnikov – Hadoop High Availability
Alex Krasheninnikov – Hadoop High AvailabilityAlex Krasheninnikov – Hadoop High Availability
Alex Krasheninnikov – Hadoop High AvailabilityBadoo Development
 
Компиляция скриптов PHP. Алексей Романенко
Компиляция скриптов PHP. Алексей РоманенкоКомпиляция скриптов PHP. Алексей Романенко
Компиляция скриптов PHP. Алексей РоманенкоFuenteovejuna
 
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2rit2011
 
«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр Колесень«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр КолесеньIT Share
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_drupalconf
 
Обзор Continuous integration инструментов
Обзор Continuous integration инструментовОбзор Continuous integration инструментов
Обзор Continuous integration инструментовVitalii Morvaniuk
 
Видеохостинг своими руками
Видеохостинг своими рукамиВидеохостинг своими руками
Видеохостинг своими рукамиStanislavMalkin
 
Опенсорс-инструменты на страже безопасности бэкенда — Петр Волков
Опенсорс-инструменты на страже безопасности бэкенда — Петр ВолковОпенсорс-инструменты на страже безопасности бэкенда — Петр Волков
Опенсорс-инструменты на страже безопасности бэкенда — Петр ВолковYandex
 
Консольные приложения на Go
Консольные приложения на GoКонсольные приложения на Go
Консольные приложения на GoAndrey Smirnov
 
Управление большим количеством физических серверов, Александр Берсенев, Инст...
 Управление большим количеством физических серверов, Александр Берсенев, Инст... Управление большим количеством физических серверов, Александр Берсенев, Инст...
Управление большим количеством физических серверов, Александр Берсенев, Инст...it-people
 
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»Tanya Denisyuk
 
DrupalCafe #1: Екатерина Маршалкина - Права на файлы Drupal в Unix-системах
DrupalCafe #1: Екатерина Маршалкина - Права на файлы Drupal в Unix-системахDrupalCafe #1: Екатерина Маршалкина - Права на файлы Drupal в Unix-системах
DrupalCafe #1: Екатерина Маршалкина - Права на файлы Drupal в Unix-системахDrupalSPB
 
Пакетирование для Debian/Ubuntu
Пакетирование для Debian/UbuntuПакетирование для Debian/Ubuntu
Пакетирование для Debian/Ubuntusamsolutionsby
 
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Ontico
 
Docker в Badoo: ПМЖ или временная регистрация
Docker в Badoo: ПМЖ или временная регистрацияDocker в Badoo: ПМЖ или временная регистрация
Docker в Badoo: ПМЖ или временная регистрацияBadoo Development
 

Similar to 5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo) (20)

Компиляция скриптов PHP (Алексей Романенко)
Компиляция скриптов PHP (Алексей Романенко)Компиляция скриптов PHP (Алексей Романенко)
Компиляция скриптов PHP (Алексей Романенко)
 
CRIU: ускорение запуска PHP в CloudLinux OS -- Руслан Купреев
CRIU: ускорение запуска PHP в CloudLinux OS  -- Руслан КупреевCRIU: ускорение запуска PHP в CloudLinux OS  -- Руслан Купреев
CRIU: ускорение запуска PHP в CloudLinux OS -- Руслан Купреев
 
Alex Krasheninnikov – Hadoop High Availability
Alex Krasheninnikov – Hadoop High AvailabilityAlex Krasheninnikov – Hadoop High Availability
Alex Krasheninnikov – Hadoop High Availability
 
Компиляция скриптов PHP. Алексей Романенко
Компиляция скриптов PHP. Алексей РоманенкоКомпиляция скриптов PHP. Алексей Романенко
Компиляция скриптов PHP. Алексей Романенко
 
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
 
Major mistakes in site moving
Major mistakes in site movingMajor mistakes in site moving
Major mistakes in site moving
 
«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр Колесень«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр Колесень
 
Масштабируемый DevOps
Масштабируемый DevOpsМасштабируемый DevOps
Масштабируемый DevOps
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_
 
Обзор Continuous integration инструментов
Обзор Continuous integration инструментовОбзор Continuous integration инструментов
Обзор Continuous integration инструментов
 
Видеохостинг своими руками
Видеохостинг своими рукамиВидеохостинг своими руками
Видеохостинг своими руками
 
Enter: legacy code
Enter: legacy codeEnter: legacy code
Enter: legacy code
 
Опенсорс-инструменты на страже безопасности бэкенда — Петр Волков
Опенсорс-инструменты на страже безопасности бэкенда — Петр ВолковОпенсорс-инструменты на страже безопасности бэкенда — Петр Волков
Опенсорс-инструменты на страже безопасности бэкенда — Петр Волков
 
Консольные приложения на Go
Консольные приложения на GoКонсольные приложения на Go
Консольные приложения на Go
 
Управление большим количеством физических серверов, Александр Берсенев, Инст...
 Управление большим количеством физических серверов, Александр Берсенев, Инст... Управление большим количеством физических серверов, Александр Берсенев, Инст...
Управление большим количеством физических серверов, Александр Берсенев, Инст...
 
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»
 
DrupalCafe #1: Екатерина Маршалкина - Права на файлы Drupal в Unix-системах
DrupalCafe #1: Екатерина Маршалкина - Права на файлы Drupal в Unix-системахDrupalCafe #1: Екатерина Маршалкина - Права на файлы Drupal в Unix-системах
DrupalCafe #1: Екатерина Маршалкина - Права на файлы Drupal в Unix-системах
 
Пакетирование для Debian/Ubuntu
Пакетирование для Debian/UbuntuПакетирование для Debian/Ubuntu
Пакетирование для Debian/Ubuntu
 
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
 
Docker в Badoo: ПМЖ или временная регистрация
Docker в Badoo: ПМЖ или временная регистрацияDocker в Badoo: ПМЖ или временная регистрация
Docker в Badoo: ПМЖ или временная регистрация
 

More from Ontico

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...Ontico
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Ontico
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Ontico
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Ontico
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Ontico
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)Ontico
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Ontico
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Ontico
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)Ontico
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)Ontico
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Ontico
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Ontico
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Ontico
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Ontico
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)Ontico
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Ontico
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Ontico
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...Ontico
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Ontico
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Ontico
 

More from Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 

5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)

  • 1. 5 способов деплоя PHP-кода в условиях хайлоада Юрий Насретдинов
  • 2. ✦ Крупнейшая в мире социальная сеть для знакомства с новыми людьми ✦ 2 000 серверов с PHP ✦ 150 000 файлов объемом 900 Мб
  • 3. План ✦ Понятие деплоя кода ✦ Старая система деплоя в Badoo ✦ Другие существующие решения ✦ Новая система — MDK ✦ Заключение
  • 4. План ✦ Понятие деплоя кода ✦ Старая система деплоя в Badoo ✦ Другие существующие решения ✦ Новая система — MDK ✦ Заключение
  • 5. Deploy move (troops) into position for military action
  • 6. Процесс деплоя ✦ Получение кода из репозитория (clone / fetch / checkout) ✦ Сборка (build) ✦ Доставка на конечные сервера (deployment)
  • 7. План ✦ Понятие деплоя кода ✦ Старая система деплоя в Badoo («лупы») ✦ Другие существующие решения ✦ Новая система — MDK ✦ Заключение
  • 8. Deploy move (troops) into position for military action Loop a pseudo-device that makes a file accessible as a block device
  • 9. Loop ✦ packages/ ✦ templates/ ✦ config/ ✦ public/ build directory cp -r mounted loop ✦ packages/ ✦ templates/ ✦ config/ ✦ public/ umount loop 900 MiB loop 900 MiB mount
  • 10. План ✦ Понятие деплоя кода ✦ Старая система деплоя в Badoo ✦ Другие существующие решения ✦ Новая система — MDK ✦ Заключение
  • 11. Deploy move (troops) into position for military action GPL GNU General Public Licence
  • 12. Существующие решения ✦ Система контроля версий (svn up / git pull / hg up) ✦ rsync (в новую директорию или «поверх») ✦ Один файл (phar, hhbc, loop) ✦ rsync + 2 директории + realpath_root
  • 13. Существующие решения ✦ Система контроля версий (svn up / git pull / hg up) ✦ rsync (в новую директорию или «поверх») ✦ Один файл (phar, hhbc, loop) ✦ rsync + 2 директории + realpath_root
  • 14. svn up + «Ленивый» + Быстрый + Легковесный (в случае SVN) - Неатомарный +/- Подходит для небольших проектов
  • 15. Существующие решения ✦ Система контроля версий (svn up / git pull / hg up) ✦ rsync (в новую директорию или «поверх») ✦ Один файл (phar, hhbc, loop) ✦ rsync + 2 директории + realpath_root
  • 16. Rsync в новую директорию + Атомарный -- Нагрузка по I/O (заливка нового + удаление старого) -- Много трафика
  • 17. Rsync в новую директорию
  • 18. Существующие решения ✦ Система контроля версий (svn up / git pull / hg up) ✦ rsync (в новую директорию или «поверх») ✦ Один файл (phar, hhbc, loop) ✦ rsync + 2 директории + realpath_root
  • 19. Rsync поверх ++ Отправка только изменений - Неатомарный - Высокий CPU% на отправляющей стороне - Отправка и прием списка всех файлов с их stat() - 3 мб и 1 сек CPU на 150к файлов - 40-60 сек на 1000 серверов (24 ядра и 1 Гбит/с)
  • 20. Существующие решения ✦ Система контроля версий (svn up / git pull / hg up) ✦ rsync (в новую директорию или «поверх») ✦ Один файл (phar, hhbc, loop) ✦ rsync + 2 директории + realpath_root
  • 21. Один файл ++ Возможность использования uftp / bittorent + Простота + Атомарность + Легкость проверки целостности (md5 от одного файла) + Последовательная запись - Большой объем записи - Большая нагрузка на сеть
  • 22. UFTP ✦ Загрузка по протоколу UDP (Multicast) + NACK ✦ Подходит для загрузки на сотни машин ✦ В наших условиях работает лучше bittorrent ✦ Open-source
  • 23. Один файл (tar.gz) -- Нагрузка по I/O (создание 150к файлов)
  • 24. Один файл (phar) + Нативный для PHP - Необходимость адаптировать код для работы из архива - Нельзя поменять один файл - OPCache сбрасывается полностью
  • 25. Один файл (hhbc) +/- Нативный для HHVM + Дополнительные оптимизации (+30% к скорости) - Необходимость адаптировать код для работы из архива - Запрещено использовать eval и динамические include - Нельзя поменять один файл
  • 26. Один файл (loop) + Выглядит, как обычная директория + Можно поменять один файл (rw mount) -- Не совместим с docker (no dynamic mounts) - OPCache сбрасывается полностью - Требуется sudo для mount - Не забывать монтировать при (ре)старте
  • 27. Один файл (loop), docker ✦ Docker не поддерживает dynamic mounts ✦ loop монтируется динамически ✦ Пробовали понимать локальные NFS, SSHFS ✦ rsync /var/loop/<N>/ /var/www/ ✦ /var/www/ — директория, прокинутая в контейнер ✦ Решение плохое, rsync не атомарный
  • 28. Существующие решения ✦ Система контроля версий (svn up / git pull / hg up) ✦ rsync (в новую директорию или «поверх») ✦ Один файл (phar, hhbc, loop) ✦ rsync + 2 директории + realpath_root
  • 30. Atomic deploy current_link -> dir2 Requests: deploy current_link -> dir1
  • 31. Atomic deploy ✦ atomic symlink change using rename(2) ✦ php-fpm reload / apache reload ✦ fork(2) ✦ child: exec(2) and adopt listen socket ✦ parent: close listen socket, drain and exit - or -
  • 32. Rasmus-style document_root A B nginx.conf root $realpath_root; apache.conf <IfModule mod_realdoc.c> RealpathEvery 2 </IfModule> https://github.com/etsy/mod_realdoc - or - rsync
  • 33. Rasmus-style + Не требуется адаптация кода + Не требуется reload — переиспользуется OPCache - Требуется в 2 раза больше памяти под OPCache - Нельзя деплоиться чаще, чем раз в max_execution_time сек - Для Apache нужен сторонний модуль
  • 34. План ✦ Понятие деплоя кода ✦ Старая система деплоя в Badoo ✦ Другие существующие решения ✦ Новая система — MDK ✦ Заключение
  • 35. Требования ✦ Быстрый деплой на staging и production ✦ Атомарные патчи ✦ Скрипты могут работать несколько часов (CLI) ✦ Малое потребление ресурсов ✦ Сохранность OPCache ✦ Быстрый откат
  • 36. Требования ✦ Быстрый деплой на staging и production ✦ Атомарные патчи ✦ Скрипты могут работать несколько часов (CLI) ✦ Малое потребление ресурсов ✦ Сохранность OPCache ✦ Быстрый откат
  • 37. Возможные решения ✦ loop xN (-staging, -docker, -opcache) ✦ rsync xN (-production, -opcache xN) ✦ SVN xN (-production, -opcache xN)
  • 38. Deploy move (troops) into position for military action © https://www.youtube.com/watch?v=P2HhjHo1EQA
  • 39. Multiversion Deployment Kit ✦ Возьмем архитектуру хранения деревьев (tree) из Git ✦ Переименуем все файлы из file.php в file.php.<version> ✦ Для скорости напишем её на Go ✦ Готово!
  • 40. Multiversion Deployment Kit map: array( one => f/a3f4da63, two => f/c193497a, map => d/9c134b68, ) root deadbeef one a3f4da63 two c193497a map 9c134b68 three febe6995 four 75ffdb82
  • 42. Multiversion Deployment Kit |- current.map -> f7fc6872.map |- deadbeef.map |- f7fc6872.map |- one.php.a3f4da63 |- two.php.c193497a |- tree/ | |- 9c134b68.map | |- 21e05ae6.map | |- three.php.febe6995 | |- three.php.21e05ae6
  • 43. Multiversion Deployment Kit |- current.map -> f7fc6872.map |- deadbeef.map |- f7fc6872.map |- one.php |- one.php.a3f4da63 |- two.php |- two.php.c193497a |- mdk.inc |- tree/ | |- 9c134b68.map | |- 21e05ae6.map | |- three.php | |- three.php.febe6995 | |- three.php.21e05ae6 one.php: <?php
 require_once "mdk.inc";
 require
 mdk_resolve_path("a.php");
  • 44. MDK deploy protocol 1. Получаем корневой map 2.Смотрим, каких файлов не хватает 3.Запрашиваем недостающие файлы 4.Переходим к пункту 2
  • 48. Multiversion Deployment Kit + Быстрый атомарный деплой небольших изменений + Низкое потребление CPU + OPCache переиспользуется + Позволяет скриптам работать сутками + Легкий мониторинг + Быстрый откат изменений + Написана на Go
  • 49. Multiversion Deployment Kit - Требуется модификация кода - Сложная - Требуется Garbage Collector - Для редактирования файлов нужны спец. утилиты (mdk-vim)
  • 50. MDK numbers Staging deploy 3-5 seconds Production deploy 2 minutes Patch deploy 5-10 seconds Full deploy 40 minutes Fails count 2 Epic fails count 1
  • 51. План ✦ Понятие деплоя кода ✦ Старая система деплоя в Badoo ✦ Другие существующие решения ✦ Новая система — MDK ✦ Заключение
  • 52. Заключение ✦ Rasmus не врет, rsync + realpath_root хорош ✦ «Лупы» тоже работают вполне неплохо ✦ Используйте то, что подходит лично вам ✦ Частый деплой + долгая работа => MDK ✦ Расскажите о своем опыте ✦ Заходите на https://tech.badoo.com/ !