SlideShare a Scribd company logo
1 of 26
Profit from the Cloud
TM
23 Декабря 2014
Александр Андреев
Методики тестировния производительности
database-centric приложений
на базе продукта Parallels Automation и PostgreSQL
Profit from the Cloud
TM
• поделимся своим опытом тестирования производительности
database-centric приложения со структурой данных в виде графа
О чём доклад?
3 Profit from the Cloud
TM
Cross-platform (Virtualization)
• Parallels Desktop (for Mac)
• Parallels Access (iPhone, Android)
Server Virtualization
• Parallels Cloud Server
• Parallels Cloud Storage
• Parallels Containers for Windows
SAAS solutions for service providers
• Plesk
• Plesk Automation
• Parallels Automation
Продукты Parallels
4 Profit from the Cloud
TM
Services
Services
Что такое “Parallels Automation”?
Parallels Automation
(продукт для сервис провайдеров)
Services
Services
Services
Payment
systems
Основные бизнес-функции Parallels Automation:
• Деплоймент сервисов (локальных или удалённых)
• Менеджмент сервисов, аккаунтов и подписок на сервисы
• Фоновые задачи (сбор статистики, отчётов)
• Биллинг
• Интеграция с различными Payment Systems
• предоставление внешнего API для интеграции с другими системами
• shared hosting
• domain hosting
• qMail / Exchange
• O365
• ... +400 more
• VISA
• MasterCard
• PayPal
• ... +100 more
• аккаунты / пользователи
• сервисные планы
• подписки на сервисы
APIAPI
5 Profit from the Cloud
TM
Resources
(Website)
APS2 Graph Data Model used in APS2
User #1
(Иван, сисадмин)
User #2
(Мария, бухгалтер)
Account #1
(ООО Цветочный
магазин)
User #3
(Илья, программист)
User #5
(Виктор, юрист)
User #4
(Василий, сисадмин)
User #6
(Елена, директор)
Account #2
(ЗАО Вебстудия)
Service #1
(Shared Hosting)
Service #2
(Exchange)
“disk space”: “10GB”,
“template”: “standard”,
“backup schedule”: “none”
...
“address”: “url”,
...
“platform”: “Linux”,
...
Resources
(Website)
Resource
(Website)
“disk space”: “10GB”,
“spam filter”: “yes”
...
Resources
(Mailbox)
Resource
(Mailbox)
6 Profit from the Cloud
TM
Parallels Automation actors (security principals)
Parallels Automation
Application
(i.e. Service)
Anonymous
Registered
User
Provider
Reseller
7 Profit from the Cloud
TM
Resource representation
• Рёбра графа определяют его структуру и “visibility” / “security” для actor’ов
Resource
Property
Links
Scoping
Structure
*
**
Все ресурсы
Фильтр по
property (что
actor хочет
видеть)
Видимые
ресурсы
Фильтр по
security (что actor
может видеть)
Выборка подграфа
ресурсов требует
как минимум 2
фильтров
• каждый из фильтров может выгребать огромные данные в зависимости от actor’a,
даже если пересечение мало!
• SQL оптимизатор иногда сваливается в full scan -> получаем слабую
производительность
8 Profit from the Cloud
TM
• хранить графы
• у нас разные actor’ы / security principal’ы
• рёбра графа определяют visibility и security
• schema-less (из-за зоопарка сервисов на APS2)
• до 1-3 миллионов users в одной системе
• поддержка сложного внешнего API (REST + RQL + security principal tokens)
• кросс-платформенность (Linux, Windows)
Итого, что нам нужно?
Возможно стоило бы попробовать MongoDB, или “graph
database” или “RDF database”...
но решили оставить PostgreSQL!!!
• помимо графа есть большое количество стандартных реляционных данных
• важна надёжность, производительность, поддержка, тулзы, etc.
9 Profit from the Cloud
TM
• 20 таблиц под хранение всего графа
• пока никаких application-level кэшей
• почти нет денормализации
• никакого ORM (только SQL abstraction layer for C++)
• при 1 миллионе users имеем:
• до 20 миллионов строк в некоторых таблицах
• база до 100GB на диске, включая индексы
• SQL запросы иногда под 300 строк
Что получили в итоге?
Странно, но всё работает достаточно хорошо,
правда есть проблема – “хрупкость кода”...
• Parallels Automation – это платформа, соответственно
большое количество комбинаций и corner cases
• любой патч может внести деградацию в неожиданном
месте из-за generic data access pattern
Качественное тестирование – очень важно!
10 Profit from the Cloud
TM
• Разбиваем на простейшие бизнес сценарии, например у нас это:
• создание аккаунта и пользователей
• развёртывание сервиса (создание web-сайта, создание mail box’a, etc)
• пользовательские сценарии в web-UI
• login/logout
• стандартные и часто используемые внешние API запросы
• Разбираемся с бизнес требованиями
• какое ожидается максимальное кол-во пользователей?
• какая ожидается нагрузка на систему по каждому сценарию?
• Пишем удобные тесты на каждый бизнес сценарий
• стандартный command line и output у всех тестов
• лучше иметь отдельно тесты, отдельно “запускач” и “генератор отчётов”
• Обеспечиваем удобный/автоматический поиск узких мест
• логирование входа/выхода во всех методах в коде и SQL запросов
• пишем умный log анализатор для логов Parallels Automation
• используем auto_explain в postgresql для медленных запросов (>100 ms)
• собираем автоматом статистику ядра /proc/
• собираем статистику postgresql (расскажем далее)
Как тестировать производительность продукта?
11 Profit from the Cloud
TM
Результаты тестов производительности зависят от многих
факторов
а также
• от версий софта; настроек; характеристик железа...
В идеале нужно тестировать множество комбинаций, но это долго! 
12 Profit from the Cloud
TM
• Запускаем тесты на все бизнес функции
• В основном тестируем throughput, сразу на мощном железе, сразу на большой базе
• Если что-то медленно, но удовлетворяет требованиям – то ничего не делаем
• Начинаем с наиболее медленных, но в то же время наиболее важных сценариев
• Находим “узкое” место в коде (например по логам или с помощью профайлера)
• Сначала разбираемся “что делает этот код” и можно ли его “почистить”?
• Оптимизируем “вертикально” до разумного предела
• Если всё-равно медленно, думаем про “горизонтальное” масштабирование
• начинаем сначала
Общая стратегия оптимизации
Усилия
Ускорение
20%
80%
принцип Парето
“20% усилий дают 80% результата”
Бесконечная оптимизация стоит бесконечных денег
13 Profit from the Cloud
TM
Методика “быстрого” тестирования
Кол-во пользователей в базе
Производительность
Сценарий #1. Создание пользователей
Кол-во пользователей в базе
Производительность
Кол-во пользователей в базе
Производительность
Сценарий #2. скорость загрузки Home screen
Сценарий #3. скорость покупки подписки
1Mil
1Mil
1Mil
требование
Забиваем баг, разбираемся с проблемой, фиксим,
накатываем новый билд продукта поверх той же DB опять всё плохо, опять разбираемся
14 Profit from the Cloud
TM
Методика “быстрого” тестирования
15 Profit from the Cloud
TM
• основные принципы
• “быстро отсекаем лишнее”
• нагружаем систему по максимуму и должны увидеть 100% CPU usage in user space
• какой ресурс узкое место: CPU, disk, network, RAM? Запускаем “vmstat 1”
• если “bi”, “bo” большие – то много IO
o кто генерит нагрузку? – “iotop”
o какой IO pattern, какой у нас fsync rate? – “blktrace -d /dev/sdXXX -o - | blkparse -i –”
o вся ли база влезла в RAM?
o помогает ли отключение sync? mount -o remount,barrier=0 /my/mount/point
• если “sy” большое – то много сидим в ядре
o что делает ядро? – используем “perf” или “oprofile”. Обычно это context switch, page fault
• если “id” большое, но у нас запущено много параллельных тестов на системе:
o скорее всего есть локи в приложении
o или на уровне базы данных: https://wiki.postgresql.org/wiki/Lock_Monitoring
• наиболее эффективный способ
• добавить логирование на вход-выход из функции (или использовать gprof)
• написать интеллектуальный log анализатор
• в database-centric приложениях узкое место - сервер БД
• тулзы – pg-top, pg-stat, pg-info
• активно используем EXPLAIN, auto_explain в postgresql
Поиск узких мест
16 Profit from the Cloud
TM
Пример “умного” лог-анализатора
17 Profit from the Cloud
TM
Что полезного в лог-анализаторах?
• суммарный подсчёт времени
• wall time (общее время по “настенным часам”)
• total call time (общее время всех вызовов всех методов; >= wall time)
• total SQL time (можно быстро понять где узкое место – SQL или APP?)
• дерево вызовов
• дерево всех вызовов включая SQL запросы
• чистое время вызова
• полное время (с учётом всех вложенных вызовов)
• общая статистика
• список наиболее медленных внешних вызовов
• список наиболее медленных внутренних методов/вызовов
• список наиболее медленных SQL запросов
• список одинаковых SQL запросов
• оффлайновость
• можно анализировать логи с production систем
18 Profit from the Cloud
TM
pg-top – аналог “top”, но для таблиц postgresql
• смотрим что происходит с таблицами в реальном времени
• writes, inserts, deletes, updates, index update, index scan, seq scan, etc
• можно сортировать по колонкам, ставить на паузу, etc.
Например, можно быстро понять что происходит при каком-то тесте
19 Profit from the Cloud
TM
pg-stat – аналог “vmstat”, но для postgresql
• смотрим что происходит в общем и целом с базой в реальном времени
• writes, inserts, deletes, updates, index update, index scan, seq scan, etc
• как и в vmstat видим “шлейф” статистики
20 Profit from the Cloud
TM
pg-info – быстрая информация по базе
• общая информацию по базе - размер данных и индексов на диске
• размер таблиц по убыванию
• часто/редко используемые индексы
• часто/редко используемые/изменяемые таблицы
21 Profit from the Cloud
TM
Типичные “простые” проблемы на уровне SQL
• отсутствие индексов, лишние индексы, база не влезает в RAM
• легко понять с помощью встроенной postgresql статистики (pg-top, pg-info)
• SELECT (вложенный) оперирующий большой таблицей содержит !=, >,
>=, <, <=
• Финальная выборка как правило всегда маленькая, но внутренняя фильтрация (вложенные
SELECT) могут оперировать большими данными
• UNION вместо UNION ALL
• лишняя сортировка и исключение дубликатов
• SELECT user_name FROM Users WHERE LEFT(user_name, 1) = ‘A’
• индексы не работают
• заменяем на: WHERE user_name LIKE ‘A%’
• ... ТЫСЯЧИ ИХ!
22 Profit from the Cloud
TM
Более сложные проблемы...
• заранее может быть неизвестно, какой из подзапросов (фильтров по property и security)
нужно применить раньше. Вся надежда только на оптимизатор запросов
• другие чудеса (свежайшая проблема)
SELECT ai.uuid, ai.app_instance_id, ai.app_id, app_ver, service_instance_id AS root_service_instance_id,
uri, app_conf_id, ai.prov_type, a.name,
CASE WHEN a.icon_name IS NULL OR a.icon_name = '' THEN '' ELSE
COALESCE(a.images_root_path,'') || a.icon_name END AS app_icon_name,
master_app_instance_id, ai.owner_id, resource_id, sr.sub_id, ai.status, si.disabled, si.unprovided
FROM aps_application_instances ai
LEFT JOIN aps_service_instances si ON ai.app_instance_id = si.app_instance_id
AND service_instance_id =
(SELECT service_instance_id
FROM aps_service_instances
WHERE app_instance_id = ai.app_instance_id
ORDER BY service_instance_id LIMIT 1)
JOIN aps_applications a ON ai.app_id = a.app_id
LEFT JOIN subs_resources sr ON ai.resource_id = sr.rt_instance_id
WHERE ai.app_instance_id = ?
ORDER BY ai.app_instance_id
если ? = 15, получаем <10 msec. http://explain.depesz.com/s/sr9
если ? = 20, получаем 4.8 sec http://explain.depesz.com/s/3nGj
23 Profit from the Cloud
TM
Быстрый план
24 Profit from the Cloud
TM
Тот же запрос, другой параметр, медленный план
25 Profit from the Cloud
TM
Итого
• хранить графы в PostgreSQL - это реально (даже на postgresql-9.1)
• 1 Млн юзеров, 100 Млн вершин в графе
• правда нам нужно всего 300 параллельных UI cессий, 100 UI кликов в секунду
• на QA ложится большая нагрузка
• нужно понимать основные бизнес сценарии
• аккуратно тестировать пограничные случаи
• быстро находить bottleneck
• чем круче ваш “tools set”, тем выше в итоге скорость баг фиксинга
• vmstat, top, iotop, perf, oprofile, blktrace,
iostathttp://www.brendangregg.com/Perf/linuxperftools.png
• EXPLAIN, EXPLAIN ANALYZE - http://explain.depesz.com/
• pg-top, pg-info, pg-stat – https://github.com/CloudServer/postgresql-perf-tools
• log analyzers rulez!
• charts help!
• простые рекомендации
• вся база должна быть в RAM
• для ускорения сommit’ов используем SAN storage, в крайнем случае RAID с BBU
• для быстрой проверки иногда можно отключить sync
• крутим настройки postgresql (pg_tune)
26 Profit from the Cloud
TM
Спасибо!
Ваш фидбэк будет крайне полезен!!!
aandreev@parallels.com
наши тулзы:
https://github.com/CloudServer/postgresql-perf-tools

More Related Content

What's hot

Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...Ontico
 
ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)
ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)
ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)Ontico
 
Вебинар: Основы распараллеливания С++ программ при помощи OpenMP
Вебинар: Основы распараллеливания С++ программ при помощи OpenMPВебинар: Основы распараллеливания С++ программ при помощи OpenMP
Вебинар: Основы распараллеливания С++ программ при помощи OpenMPFlyElephant
 
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...Ontico
 
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)Ontico
 
Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)
Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)
Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)Ontico
 
Нагрузочное тестирование с помощью Яндекс.Танка
Нагрузочное тестирование с помощью Яндекс.ТанкаНагрузочное тестирование с помощью Яндекс.Танка
Нагрузочное тестирование с помощью Яндекс.ТанкаAleksandr Boichenko
 
presentation_r00t_conf
presentation_r00t_confpresentation_r00t_conf
presentation_r00t_confMax Glekov
 
Что нового в MySQL 8.0? / Дмитрий Ленев (Oracle)
Что нового в MySQL 8.0? / Дмитрий Ленев (Oracle)Что нового в MySQL 8.0? / Дмитрий Ленев (Oracle)
Что нового в MySQL 8.0? / Дмитрий Ленев (Oracle)Ontico
 
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...Ontico
 
Практический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQLПрактический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQLAlex Chistyakov
 
Android Telegram S Optimizations
Android Telegram S OptimizationsAndroid Telegram S Optimizations
Android Telegram S OptimizationsStepan Korshakov
 
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...Ontico
 
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...Ontico
 
"Новые возможности MySQL 5.7"
"Новые возможности MySQL 5.7""Новые возможности MySQL 5.7"
"Новые возможности MySQL 5.7"Badoo Development
 
Пишем свою платформу для управления данными. Это очень просто / Суханов Васил...
Пишем свою платформу для управления данными. Это очень просто / Суханов Васил...Пишем свою платформу для управления данными. Это очень просто / Суханов Васил...
Пишем свою платформу для управления данными. Это очень просто / Суханов Васил...Ontico
 
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)Ontico
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Ontico
 
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)Ontico
 
Веб-сервер Phantom
Веб-сервер PhantomВеб-сервер Phantom
Веб-сервер Phantomyaevents
 

What's hot (20)

Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
 
ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)
ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)
ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)
 
Вебинар: Основы распараллеливания С++ программ при помощи OpenMP
Вебинар: Основы распараллеливания С++ программ при помощи OpenMPВебинар: Основы распараллеливания С++ программ при помощи OpenMP
Вебинар: Основы распараллеливания С++ программ при помощи OpenMP
 
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...
 
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
 
Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)
Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)
Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)
 
Нагрузочное тестирование с помощью Яндекс.Танка
Нагрузочное тестирование с помощью Яндекс.ТанкаНагрузочное тестирование с помощью Яндекс.Танка
Нагрузочное тестирование с помощью Яндекс.Танка
 
presentation_r00t_conf
presentation_r00t_confpresentation_r00t_conf
presentation_r00t_conf
 
Что нового в MySQL 8.0? / Дмитрий Ленев (Oracle)
Что нового в MySQL 8.0? / Дмитрий Ленев (Oracle)Что нового в MySQL 8.0? / Дмитрий Ленев (Oracle)
Что нового в MySQL 8.0? / Дмитрий Ленев (Oracle)
 
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
 
Практический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQLПрактический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQL
 
Android Telegram S Optimizations
Android Telegram S OptimizationsAndroid Telegram S Optimizations
Android Telegram S Optimizations
 
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
 
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
 
"Новые возможности MySQL 5.7"
"Новые возможности MySQL 5.7""Новые возможности MySQL 5.7"
"Новые возможности MySQL 5.7"
 
Пишем свою платформу для управления данными. Это очень просто / Суханов Васил...
Пишем свою платформу для управления данными. Это очень просто / Суханов Васил...Пишем свою платформу для управления данными. Это очень просто / Суханов Васил...
Пишем свою платформу для управления данными. Это очень просто / Суханов Васил...
 
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
 
Веб-сервер Phantom
Веб-сервер PhantomВеб-сервер Phantom
Веб-сервер Phantom
 

Viewers also liked

Мифы и легенды о проекте OpenVZ
Мифы и легенды о проекте OpenVZМифы и легенды о проекте OpenVZ
Мифы и легенды о проекте OpenVZOpenVZ
 
Parallels Automation Executive Summary Apr2010
Parallels Automation Executive Summary Apr2010Parallels Automation Executive Summary Apr2010
Parallels Automation Executive Summary Apr2010acallaly
 
Виртуализация инфраструктуры ЦОД российской разработки // Владимир Порохов (O...
Виртуализация инфраструктуры ЦОД российской разработки // Владимир Порохов (O...Виртуализация инфраструктуры ЦОД российской разработки // Владимир Порохов (O...
Виртуализация инфраструктуры ЦОД российской разработки // Владимир Порохов (O...IBS
 
Briliant
BriliantBriliant
Brilianticcplus
 
Управление контейнерами в облаках
 Управление контейнерами в облаках Управление контейнерами в облаках
Управление контейнерами в облакахAleksey Zalesov
 

Viewers also liked (7)

Мифы и легенды о проекте OpenVZ
Мифы и легенды о проекте OpenVZМифы и легенды о проекте OpenVZ
Мифы и легенды о проекте OpenVZ
 
Parallels Automation Executive Summary Apr2010
Parallels Automation Executive Summary Apr2010Parallels Automation Executive Summary Apr2010
Parallels Automation Executive Summary Apr2010
 
Odin mnogo
Odin mnogoOdin mnogo
Odin mnogo
 
Per! А что дальше?
Per! А что дальше?Per! А что дальше?
Per! А что дальше?
 
Виртуализация инфраструктуры ЦОД российской разработки // Владимир Порохов (O...
Виртуализация инфраструктуры ЦОД российской разработки // Владимир Порохов (O...Виртуализация инфраструктуры ЦОД российской разработки // Владимир Порохов (O...
Виртуализация инфраструктуры ЦОД российской разработки // Владимир Порохов (O...
 
Briliant
BriliantBriliant
Briliant
 
Управление контейнерами в облаках
 Управление контейнерами в облаках Управление контейнерами в облаках
Управление контейнерами в облаках
 

Similar to 2014.12.23 Александр Андреев, Parallels

20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...IT-Portfolio
 
Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"Fwdays
 
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностей
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностейПакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностей
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностейCisco Russia
 
Maksym Bezuglyi "Universal highload patterns on a specific example of a game ...
Maksym Bezuglyi "Universal highload patterns on a specific example of a game ...Maksym Bezuglyi "Universal highload patterns on a specific example of a game ...
Maksym Bezuglyi "Universal highload patterns on a specific example of a game ...Fwdays
 
Александр Коротин. Безопасность систем управления турбинами в электроэнергетике
Александр Коротин. Безопасность систем управления турбинами в электроэнергетикеАлександр Коротин. Безопасность систем управления турбинами в электроэнергетике
Александр Коротин. Безопасность систем управления турбинами в электроэнергетикеKaspersky
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrusAlex Chistyakov
 
Новости и анонсы конференции Oracle Open World 2013
Новости и анонсы конференции Oracle Open World 2013Новости и анонсы конференции Oracle Open World 2013
Новости и анонсы конференции Oracle Open World 2013Andrey Akulov
 
владивосток форум производительность_ha
владивосток форум производительность_haвладивосток форум производительность_ha
владивосток форум производительность_haElena Ometova
 
PostgreSQL performance recipes
PostgreSQL performance recipesPostgreSQL performance recipes
PostgreSQL performance recipesAlexey Ermakov
 
"Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно..."Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно...it-people
 
Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...
Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...
Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...Ontico
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)Pavel Tsukanov
 
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)Badoo Development
 
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)Ontico
 
Облако в Badoo год спустя
Облако в Badoo год спустяОблако в Badoo год спустя
Облако в Badoo год спустяYuriy Nasretdinov
 
Open source technologies in Microsoft cloud - MS SWIT 2014
Open source technologies in Microsoft cloud - MS SWIT 2014Open source technologies in Microsoft cloud - MS SWIT 2014
Open source technologies in Microsoft cloud - MS SWIT 2014Alexey Bokov
 
Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoFDmitry Buzdin
 
Fors и big data appliance
Fors и big data applianceFors и big data appliance
Fors и big data applianceCleverDATA
 
разработка бизнес приложений (9)
разработка бизнес приложений (9)разработка бизнес приложений (9)
разработка бизнес приложений (9)Alexander Gornik
 

Similar to 2014.12.23 Александр Андреев, Parallels (20)

20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
 
Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"
 
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностей
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностейПакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностей
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностей
 
Maksym Bezuglyi "Universal highload patterns on a specific example of a game ...
Maksym Bezuglyi "Universal highload patterns on a specific example of a game ...Maksym Bezuglyi "Universal highload patterns on a specific example of a game ...
Maksym Bezuglyi "Universal highload patterns on a specific example of a game ...
 
Александр Коротин. Безопасность систем управления турбинами в электроэнергетике
Александр Коротин. Безопасность систем управления турбинами в электроэнергетикеАлександр Коротин. Безопасность систем управления турбинами в электроэнергетике
Александр Коротин. Безопасность систем управления турбинами в электроэнергетике
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrus
 
Новости и анонсы конференции Oracle Open World 2013
Новости и анонсы конференции Oracle Open World 2013Новости и анонсы конференции Oracle Open World 2013
Новости и анонсы конференции Oracle Open World 2013
 
владивосток форум производительность_ha
владивосток форум производительность_haвладивосток форум производительность_ha
владивосток форум производительность_ha
 
PostgreSQL performance recipes
PostgreSQL performance recipesPostgreSQL performance recipes
PostgreSQL performance recipes
 
"Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно..."Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно...
 
Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...
Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...
Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...
 
Sivko
SivkoSivko
Sivko
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
 
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
 
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
 
Облако в Badoo год спустя
Облако в Badoo год спустяОблако в Badoo год спустя
Облако в Badoo год спустя
 
Open source technologies in Microsoft cloud - MS SWIT 2014
Open source technologies in Microsoft cloud - MS SWIT 2014Open source technologies in Microsoft cloud - MS SWIT 2014
Open source technologies in Microsoft cloud - MS SWIT 2014
 
Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoF
 
Fors и big data appliance
Fors и big data applianceFors и big data appliance
Fors и big data appliance
 
разработка бизнес приложений (9)
разработка бизнес приложений (9)разработка бизнес приложений (9)
разработка бизнес приложений (9)
 

More from Nikolay Samokhvalov

Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва... Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...Nikolay Samokhvalov
 
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данныхПромышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данныхNikolay Samokhvalov
 
The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San Jose
The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San JoseThe Art of Database Experiments – PostgresConf Silicon Valley 2018 / San Jose
The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San JoseNikolay Samokhvalov
 
Nancy CLI. Automated Database Experiments
Nancy CLI. Automated Database ExperimentsNancy CLI. Automated Database Experiments
Nancy CLI. Automated Database ExperimentsNikolay Samokhvalov
 
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросыNikolay Samokhvalov
 
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросыNikolay Samokhvalov
 
Database First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБДDatabase First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБДNikolay Samokhvalov
 
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6Nikolay Samokhvalov
 
#noBackend, или Как выжить в эпоху толстеющих клиентов
#noBackend, или Как выжить в эпоху толстеющих клиентов#noBackend, или Как выжить в эпоху толстеющих клиентов
#noBackend, или Как выжить в эпоху толстеющих клиентовNikolay Samokhvalov
 
#PostgreSQLRussia в банке Тинькофф, доклад №1
#PostgreSQLRussia в банке Тинькофф, доклад №1#PostgreSQLRussia в банке Тинькофф, доклад №1
#PostgreSQLRussia в банке Тинькофф, доклад №1Nikolay Samokhvalov
 
SFPUG 2015.11.20 lightning talk "PostgreSQL in Russia"
SFPUG 2015.11.20 lightning talk "PostgreSQL in Russia"SFPUG 2015.11.20 lightning talk "PostgreSQL in Russia"
SFPUG 2015.11.20 lightning talk "PostgreSQL in Russia"Nikolay Samokhvalov
 
Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...
Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...
Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...Nikolay Samokhvalov
 
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...Nikolay Samokhvalov
 
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...Nikolay Samokhvalov
 
Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...
Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...
Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...Nikolay Samokhvalov
 
2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4
2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.42014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4
2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4Nikolay Samokhvalov
 
2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ru2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ruNikolay Samokhvalov
 
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussiaNikolay Samokhvalov
 
2014.10.15 блиц-доклад PostgreSQL kNN search
2014.10.15 блиц-доклад PostgreSQL kNN search2014.10.15 блиц-доклад PostgreSQL kNN search
2014.10.15 блиц-доклад PostgreSQL kNN searchNikolay Samokhvalov
 

More from Nikolay Samokhvalov (20)

Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва... Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данныхПромышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
 
The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San Jose
The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San JoseThe Art of Database Experiments – PostgresConf Silicon Valley 2018 / San Jose
The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San Jose
 
Nancy CLI. Automated Database Experiments
Nancy CLI. Automated Database ExperimentsNancy CLI. Automated Database Experiments
Nancy CLI. Automated Database Experiments
 
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
 
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
 
Database First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБДDatabase First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБД
 
2016.10.13 PostgreSQL in Russia
2016.10.13 PostgreSQL in Russia2016.10.13 PostgreSQL in Russia
2016.10.13 PostgreSQL in Russia
 
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
 
#noBackend, или Как выжить в эпоху толстеющих клиентов
#noBackend, или Как выжить в эпоху толстеющих клиентов#noBackend, или Как выжить в эпоху толстеющих клиентов
#noBackend, или Как выжить в эпоху толстеющих клиентов
 
#PostgreSQLRussia в банке Тинькофф, доклад №1
#PostgreSQLRussia в банке Тинькофф, доклад №1#PostgreSQLRussia в банке Тинькофф, доклад №1
#PostgreSQLRussia в банке Тинькофф, доклад №1
 
SFPUG 2015.11.20 lightning talk "PostgreSQL in Russia"
SFPUG 2015.11.20 lightning talk "PostgreSQL in Russia"SFPUG 2015.11.20 lightning talk "PostgreSQL in Russia"
SFPUG 2015.11.20 lightning talk "PostgreSQL in Russia"
 
Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...
Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...
Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...
 
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...
 
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...
 
Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...
Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...
Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...
 
2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4
2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.42014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4
2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4
 
2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ru2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ru
 
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
 
2014.10.15 блиц-доклад PostgreSQL kNN search
2014.10.15 блиц-доклад PostgreSQL kNN search2014.10.15 блиц-доклад PostgreSQL kNN search
2014.10.15 блиц-доклад PostgreSQL kNN search
 

2014.12.23 Александр Андреев, Parallels

  • 1. Profit from the Cloud TM 23 Декабря 2014 Александр Андреев Методики тестировния производительности database-centric приложений на базе продукта Parallels Automation и PostgreSQL
  • 2. Profit from the Cloud TM • поделимся своим опытом тестирования производительности database-centric приложения со структурой данных в виде графа О чём доклад?
  • 3. 3 Profit from the Cloud TM Cross-platform (Virtualization) • Parallels Desktop (for Mac) • Parallels Access (iPhone, Android) Server Virtualization • Parallels Cloud Server • Parallels Cloud Storage • Parallels Containers for Windows SAAS solutions for service providers • Plesk • Plesk Automation • Parallels Automation Продукты Parallels
  • 4. 4 Profit from the Cloud TM Services Services Что такое “Parallels Automation”? Parallels Automation (продукт для сервис провайдеров) Services Services Services Payment systems Основные бизнес-функции Parallels Automation: • Деплоймент сервисов (локальных или удалённых) • Менеджмент сервисов, аккаунтов и подписок на сервисы • Фоновые задачи (сбор статистики, отчётов) • Биллинг • Интеграция с различными Payment Systems • предоставление внешнего API для интеграции с другими системами • shared hosting • domain hosting • qMail / Exchange • O365 • ... +400 more • VISA • MasterCard • PayPal • ... +100 more • аккаунты / пользователи • сервисные планы • подписки на сервисы APIAPI
  • 5. 5 Profit from the Cloud TM Resources (Website) APS2 Graph Data Model used in APS2 User #1 (Иван, сисадмин) User #2 (Мария, бухгалтер) Account #1 (ООО Цветочный магазин) User #3 (Илья, программист) User #5 (Виктор, юрист) User #4 (Василий, сисадмин) User #6 (Елена, директор) Account #2 (ЗАО Вебстудия) Service #1 (Shared Hosting) Service #2 (Exchange) “disk space”: “10GB”, “template”: “standard”, “backup schedule”: “none” ... “address”: “url”, ... “platform”: “Linux”, ... Resources (Website) Resource (Website) “disk space”: “10GB”, “spam filter”: “yes” ... Resources (Mailbox) Resource (Mailbox)
  • 6. 6 Profit from the Cloud TM Parallels Automation actors (security principals) Parallels Automation Application (i.e. Service) Anonymous Registered User Provider Reseller
  • 7. 7 Profit from the Cloud TM Resource representation • Рёбра графа определяют его структуру и “visibility” / “security” для actor’ов Resource Property Links Scoping Structure * ** Все ресурсы Фильтр по property (что actor хочет видеть) Видимые ресурсы Фильтр по security (что actor может видеть) Выборка подграфа ресурсов требует как минимум 2 фильтров • каждый из фильтров может выгребать огромные данные в зависимости от actor’a, даже если пересечение мало! • SQL оптимизатор иногда сваливается в full scan -> получаем слабую производительность
  • 8. 8 Profit from the Cloud TM • хранить графы • у нас разные actor’ы / security principal’ы • рёбра графа определяют visibility и security • schema-less (из-за зоопарка сервисов на APS2) • до 1-3 миллионов users в одной системе • поддержка сложного внешнего API (REST + RQL + security principal tokens) • кросс-платформенность (Linux, Windows) Итого, что нам нужно? Возможно стоило бы попробовать MongoDB, или “graph database” или “RDF database”... но решили оставить PostgreSQL!!! • помимо графа есть большое количество стандартных реляционных данных • важна надёжность, производительность, поддержка, тулзы, etc.
  • 9. 9 Profit from the Cloud TM • 20 таблиц под хранение всего графа • пока никаких application-level кэшей • почти нет денормализации • никакого ORM (только SQL abstraction layer for C++) • при 1 миллионе users имеем: • до 20 миллионов строк в некоторых таблицах • база до 100GB на диске, включая индексы • SQL запросы иногда под 300 строк Что получили в итоге? Странно, но всё работает достаточно хорошо, правда есть проблема – “хрупкость кода”... • Parallels Automation – это платформа, соответственно большое количество комбинаций и corner cases • любой патч может внести деградацию в неожиданном месте из-за generic data access pattern Качественное тестирование – очень важно!
  • 10. 10 Profit from the Cloud TM • Разбиваем на простейшие бизнес сценарии, например у нас это: • создание аккаунта и пользователей • развёртывание сервиса (создание web-сайта, создание mail box’a, etc) • пользовательские сценарии в web-UI • login/logout • стандартные и часто используемые внешние API запросы • Разбираемся с бизнес требованиями • какое ожидается максимальное кол-во пользователей? • какая ожидается нагрузка на систему по каждому сценарию? • Пишем удобные тесты на каждый бизнес сценарий • стандартный command line и output у всех тестов • лучше иметь отдельно тесты, отдельно “запускач” и “генератор отчётов” • Обеспечиваем удобный/автоматический поиск узких мест • логирование входа/выхода во всех методах в коде и SQL запросов • пишем умный log анализатор для логов Parallels Automation • используем auto_explain в postgresql для медленных запросов (>100 ms) • собираем автоматом статистику ядра /proc/ • собираем статистику postgresql (расскажем далее) Как тестировать производительность продукта?
  • 11. 11 Profit from the Cloud TM Результаты тестов производительности зависят от многих факторов а также • от версий софта; настроек; характеристик железа... В идеале нужно тестировать множество комбинаций, но это долго! 
  • 12. 12 Profit from the Cloud TM • Запускаем тесты на все бизнес функции • В основном тестируем throughput, сразу на мощном железе, сразу на большой базе • Если что-то медленно, но удовлетворяет требованиям – то ничего не делаем • Начинаем с наиболее медленных, но в то же время наиболее важных сценариев • Находим “узкое” место в коде (например по логам или с помощью профайлера) • Сначала разбираемся “что делает этот код” и можно ли его “почистить”? • Оптимизируем “вертикально” до разумного предела • Если всё-равно медленно, думаем про “горизонтальное” масштабирование • начинаем сначала Общая стратегия оптимизации Усилия Ускорение 20% 80% принцип Парето “20% усилий дают 80% результата” Бесконечная оптимизация стоит бесконечных денег
  • 13. 13 Profit from the Cloud TM Методика “быстрого” тестирования Кол-во пользователей в базе Производительность Сценарий #1. Создание пользователей Кол-во пользователей в базе Производительность Кол-во пользователей в базе Производительность Сценарий #2. скорость загрузки Home screen Сценарий #3. скорость покупки подписки 1Mil 1Mil 1Mil требование Забиваем баг, разбираемся с проблемой, фиксим, накатываем новый билд продукта поверх той же DB опять всё плохо, опять разбираемся
  • 14. 14 Profit from the Cloud TM Методика “быстрого” тестирования
  • 15. 15 Profit from the Cloud TM • основные принципы • “быстро отсекаем лишнее” • нагружаем систему по максимуму и должны увидеть 100% CPU usage in user space • какой ресурс узкое место: CPU, disk, network, RAM? Запускаем “vmstat 1” • если “bi”, “bo” большие – то много IO o кто генерит нагрузку? – “iotop” o какой IO pattern, какой у нас fsync rate? – “blktrace -d /dev/sdXXX -o - | blkparse -i –” o вся ли база влезла в RAM? o помогает ли отключение sync? mount -o remount,barrier=0 /my/mount/point • если “sy” большое – то много сидим в ядре o что делает ядро? – используем “perf” или “oprofile”. Обычно это context switch, page fault • если “id” большое, но у нас запущено много параллельных тестов на системе: o скорее всего есть локи в приложении o или на уровне базы данных: https://wiki.postgresql.org/wiki/Lock_Monitoring • наиболее эффективный способ • добавить логирование на вход-выход из функции (или использовать gprof) • написать интеллектуальный log анализатор • в database-centric приложениях узкое место - сервер БД • тулзы – pg-top, pg-stat, pg-info • активно используем EXPLAIN, auto_explain в postgresql Поиск узких мест
  • 16. 16 Profit from the Cloud TM Пример “умного” лог-анализатора
  • 17. 17 Profit from the Cloud TM Что полезного в лог-анализаторах? • суммарный подсчёт времени • wall time (общее время по “настенным часам”) • total call time (общее время всех вызовов всех методов; >= wall time) • total SQL time (можно быстро понять где узкое место – SQL или APP?) • дерево вызовов • дерево всех вызовов включая SQL запросы • чистое время вызова • полное время (с учётом всех вложенных вызовов) • общая статистика • список наиболее медленных внешних вызовов • список наиболее медленных внутренних методов/вызовов • список наиболее медленных SQL запросов • список одинаковых SQL запросов • оффлайновость • можно анализировать логи с production систем
  • 18. 18 Profit from the Cloud TM pg-top – аналог “top”, но для таблиц postgresql • смотрим что происходит с таблицами в реальном времени • writes, inserts, deletes, updates, index update, index scan, seq scan, etc • можно сортировать по колонкам, ставить на паузу, etc. Например, можно быстро понять что происходит при каком-то тесте
  • 19. 19 Profit from the Cloud TM pg-stat – аналог “vmstat”, но для postgresql • смотрим что происходит в общем и целом с базой в реальном времени • writes, inserts, deletes, updates, index update, index scan, seq scan, etc • как и в vmstat видим “шлейф” статистики
  • 20. 20 Profit from the Cloud TM pg-info – быстрая информация по базе • общая информацию по базе - размер данных и индексов на диске • размер таблиц по убыванию • часто/редко используемые индексы • часто/редко используемые/изменяемые таблицы
  • 21. 21 Profit from the Cloud TM Типичные “простые” проблемы на уровне SQL • отсутствие индексов, лишние индексы, база не влезает в RAM • легко понять с помощью встроенной postgresql статистики (pg-top, pg-info) • SELECT (вложенный) оперирующий большой таблицей содержит !=, >, >=, <, <= • Финальная выборка как правило всегда маленькая, но внутренняя фильтрация (вложенные SELECT) могут оперировать большими данными • UNION вместо UNION ALL • лишняя сортировка и исключение дубликатов • SELECT user_name FROM Users WHERE LEFT(user_name, 1) = ‘A’ • индексы не работают • заменяем на: WHERE user_name LIKE ‘A%’ • ... ТЫСЯЧИ ИХ!
  • 22. 22 Profit from the Cloud TM Более сложные проблемы... • заранее может быть неизвестно, какой из подзапросов (фильтров по property и security) нужно применить раньше. Вся надежда только на оптимизатор запросов • другие чудеса (свежайшая проблема) SELECT ai.uuid, ai.app_instance_id, ai.app_id, app_ver, service_instance_id AS root_service_instance_id, uri, app_conf_id, ai.prov_type, a.name, CASE WHEN a.icon_name IS NULL OR a.icon_name = '' THEN '' ELSE COALESCE(a.images_root_path,'') || a.icon_name END AS app_icon_name, master_app_instance_id, ai.owner_id, resource_id, sr.sub_id, ai.status, si.disabled, si.unprovided FROM aps_application_instances ai LEFT JOIN aps_service_instances si ON ai.app_instance_id = si.app_instance_id AND service_instance_id = (SELECT service_instance_id FROM aps_service_instances WHERE app_instance_id = ai.app_instance_id ORDER BY service_instance_id LIMIT 1) JOIN aps_applications a ON ai.app_id = a.app_id LEFT JOIN subs_resources sr ON ai.resource_id = sr.rt_instance_id WHERE ai.app_instance_id = ? ORDER BY ai.app_instance_id если ? = 15, получаем <10 msec. http://explain.depesz.com/s/sr9 если ? = 20, получаем 4.8 sec http://explain.depesz.com/s/3nGj
  • 23. 23 Profit from the Cloud TM Быстрый план
  • 24. 24 Profit from the Cloud TM Тот же запрос, другой параметр, медленный план
  • 25. 25 Profit from the Cloud TM Итого • хранить графы в PostgreSQL - это реально (даже на postgresql-9.1) • 1 Млн юзеров, 100 Млн вершин в графе • правда нам нужно всего 300 параллельных UI cессий, 100 UI кликов в секунду • на QA ложится большая нагрузка • нужно понимать основные бизнес сценарии • аккуратно тестировать пограничные случаи • быстро находить bottleneck • чем круче ваш “tools set”, тем выше в итоге скорость баг фиксинга • vmstat, top, iotop, perf, oprofile, blktrace, iostathttp://www.brendangregg.com/Perf/linuxperftools.png • EXPLAIN, EXPLAIN ANALYZE - http://explain.depesz.com/ • pg-top, pg-info, pg-stat – https://github.com/CloudServer/postgresql-perf-tools • log analyzers rulez! • charts help! • простые рекомендации • вся база должна быть в RAM • для ускорения сommit’ов используем SAN storage, в крайнем случае RAID с BBU • для быстрой проверки иногда можно отключить sync • крутим настройки postgresql (pg_tune)
  • 26. 26 Profit from the Cloud TM Спасибо! Ваш фидбэк будет крайне полезен!!! aandreev@parallels.com наши тулзы: https://github.com/CloudServer/postgresql-perf-tools