SlideShare a Scribd company logo
1 of 60
Смерть от распродажи:
как Яндекс.Деньги
попытались разогнаться
к Black Friday и выстоять
Анатолий Пласковский,
исследователь производительности
Опыт ребят из QIWI
Газеты о множестве операций в секунду
马王堆汉墓帛书‧足臂十一脉灸经释文
足
(胂);其直者贯臀,夹(挟)脊,出项,上于豆(脰);枝颜下,之耳;其直者贯目
内渍(眦),之鼻 1000 。
疾。‧
Специфика акций в России
Смерть от распродажи
Все участники распродажи
Банк-эквайринг A
Банк-эквайринг B
Банк-эквайринг C
Банк-эмитент A
Банк-эмитент B
Банк-эмитент C
Магазин А
Магазин В
Магазин С
Блокировка Списание
Распродажа в Яндекс.Деньгах
• Порядка 10 000 магазинов
• Несколько банков-эквайрингов
• Все возможные банки-эмитенты.
11
09.11.2017 12
Наши ожидания…
Первые замеры на тестовой среде
5 TpS
Использование заглушек для эквайринга
• «Тупая» заглушка
• «Умная» заглушка
• «Интеллектуальная» заглушка
09.11.2017 15
Использование заглушек для эквайринга
09.11.2017 16
Адекватный аналог эквайра
Идем на прод
• тестовая маршрутизация параллельно пользовательской
• тестовые карты, но только для тестовой маршрутизации
• вопросы с безопасностью, ограничениями по числу операций и
числу запросов
09.11.2017 17
«Канареечная ветка»
09.11.2017 18
19
Первая стрельба на проде
20
Первые узкие места
• провалы в сохранении данных в БД Магазов
• дефицит памяти в БД Магазов
09.11.2017 21
09.11.2017 22
Что не так с БД???
«Ж**а там с БД, блокировки и ожидания,
отсюда и время такое, всё CPU выжрали
своими экспериментами на базке» (с)
09.11.2017 23
Оптимизация на стороне DB:
• размеры буферов shared, work_mem уменьшены;
• включен fsync;
• checkpoints_segment увеличены;
• archive_mode выключено;
• убраны commit_delay, commit_siblings.
09.11.2017 24
Почему мы просели с БД?
• При обновлении LOB-сегмента старые данные пишутся не в UNDO
и остаются на месте, а новые попадают в другие блоки.
• LOB-сегменты имеют опцию RETENTION, поэтому UPDATE не
переписывает старые LOB-данные, пока не истечет
undo_retention.
• С ростом сеансов увеличивается объем изменений LOB, и UPDATE
«будто INSERT» пишет LOB-данные в новые блоки, вызывая
постоянный рост LOB-сегмента.
09.11.2017 25
Подробнее про БД
• Растет LOB-сегмент;
• Многократно сдвигаются HWM сегменты таблиц;
• Скачкообразно возрастает объем ввода-вывода, что приводит к
длительному сдвигу HWM сегментов;
• Торможение ввода-вывода (NetApp) от 20 до 1000 мс.
09.11.2017 26
Планы на тюнинг
• реорганизации хранилища на NetАpp
• замены серверов БД
• чистка БД – согласование с безопасниками, юристами,
коммерцией
09.11.2017 27
Оптимизировать выгрузку логов
09.11.2017 28
Оптимизировать выгрузку логов
09.11.2017 29
Жива ли вообще заглушка?
Спустя пару недель… 300 TpS!!!
09.11.2017 30
Теперь узкое место – база Скарта
09.11.2017 32
• await’ы на дисках базы достигали 100 мс
• sdb utilize была 100%
• CPU util на Скарт DB превысило 90%
На БД мы упираемся в диск
09.11.2017 33
Скарт выедает CPU на своей БД, вака-вака
09.11.2017 34
Что делать?
09.11.2017 35
А пока проверим 100 TpS на стабильность
09.11.2017 36
Диски нашлись!
09.11.2017 37
Вуаля – 600 TpS
09.11.2017 38
Теперь узкое место – Скарт и его CPU
09.11.2017 39
• Оптимизация работы пары Скарт+Защитника: эвристика и
введение кэширования для работы с блэклистами.
• Распараллеливаем работу с КА и Магазами.
• В итоге: у нас останется только вставка операций в Скарт DB и
обновление их статуса.
Теперь узкое место – Скрат и его CPU
09.11.2017 40
Время захода в Скарт теперь – 25 мс
09.11.2017 41
09.11.2017 42
В итоге получаем – рост с 600 до 2000 TpS
Да и CPU Скарт теперь не высоко
09.11.2017 43
ЗАГЛУШКАМ!
Идем стрелять в эквайринги
09.11.2017 46
Нам нужно:
09.11.2017 47
• Цель-терминал со стороны эквайра:
и non3ds, и без cvv
• Тысячи вполне себе реальных карт, откуда будем стрелять
• Бюджет на все это мероприятие
Бюджет состоит из:
09.11.2017 48
• деньги МПС за выпуск карт;
• деньги МПС за сумму от оборота карт;
• деньги МПС за каждую операции;
• деньги эквайру – за эквайринг.
• деньги нам – на операции.
09.11.2017 49
09.11.2017 50
Мы помогаем друг другу
09.11.2017 52
• Мы объясняем это эквайру, прислушиваемся к его словам и
вместе уходим на «подкрутить что-то»
• Возвращаемся. Стреляемся. Раскручиваемся.
• С нашим первым эквайром мы добились результата за 5 минут до
начала распродажи.
Если магазины КА не готовы ждать больше 5
секунд
09.11.2017 55
А вот и распродажа
09.11.2017 56
Сама распродажа с точки зрения одного
эквайра
09.11.2017 57
Во время распродажи есть минутка расслабиться
09.11.2017 58
Но расслабляться некогда 
• Автоприёмка релизов на производительность
• Регулярные боевые стрельбы на проде
• Постоянные ревью кода и тюнинг
09.11.2017 59
Эпилог
• Боевые стрельбы с нашими партнерами и коллегами
продолжаются
• Сейчас мы технически можем провести исследование
производительности любой эмиссии и эквайринга с
определённой степенью точности
Контакты
@fourwingedsun
plaskovskii@yamoney.ru
Ваши вопросы?
Анатолий Пласковский
Руководитель группы исследований
производительности

More Related Content

Viewers also liked

Полнотекстовый поиск в PostgreSQL / Александр Алексеев (Postgres Professional)
Полнотекстовый поиск в PostgreSQL / Александр Алексеев (Postgres Professional)Полнотекстовый поиск в PostgreSQL / Александр Алексеев (Postgres Professional)
Полнотекстовый поиск в PostgreSQL / Александр Алексеев (Postgres Professional)
Ontico
 
Искусство предсказания: как давать более точные оценки времени проекта / Андр...
Искусство предсказания: как давать более точные оценки времени проекта / Андр...Искусство предсказания: как давать более точные оценки времени проекта / Андр...
Искусство предсказания: как давать более точные оценки времени проекта / Андр...
Ontico
 
NoSQL Best Practices for PostgreSQL / Дмитрий Долгов (Mindojo)
NoSQL Best Practices for PostgreSQL / Дмитрий Долгов (Mindojo)NoSQL Best Practices for PostgreSQL / Дмитрий Долгов (Mindojo)
NoSQL Best Practices for PostgreSQL / Дмитрий Долгов (Mindojo)
Ontico
 

Viewers also liked (17)

Блокчейн. Lego для интересующихся / Александр Боргардт (GolosCore)
Блокчейн. Lego для интересующихся / Александр Боргардт (GolosCore) Блокчейн. Lego для интересующихся / Александр Боргардт (GolosCore)
Блокчейн. Lego для интересующихся / Александр Боргардт (GolosCore)
 
Полнотекстовый поиск в PostgreSQL / Александр Алексеев (Postgres Professional)
Полнотекстовый поиск в PostgreSQL / Александр Алексеев (Postgres Professional)Полнотекстовый поиск в PostgreSQL / Александр Алексеев (Postgres Professional)
Полнотекстовый поиск в PostgreSQL / Александр Алексеев (Postgres Professional)
 
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
 
Искусство предсказания: как давать более точные оценки времени проекта / Андр...
Искусство предсказания: как давать более точные оценки времени проекта / Андр...Искусство предсказания: как давать более точные оценки времени проекта / Андр...
Искусство предсказания: как давать более точные оценки времени проекта / Андр...
 
Погружение в виртуальную память и большие страницы / Константин Новаковский (...
Погружение в виртуальную память и большие страницы / Константин Новаковский (...Погружение в виртуальную память и большие страницы / Константин Новаковский (...
Погружение в виртуальную память и большие страницы / Константин Новаковский (...
 
Встреча докладчиков Hl++ 2017
Встреча докладчиков Hl++ 2017Встреча докладчиков Hl++ 2017
Встреча докладчиков Hl++ 2017
 
Применение блокчейна в RTB. Можно ли масштабировать децентрализованную базу д...
Применение блокчейна в RTB. Можно ли масштабировать децентрализованную базу д...Применение блокчейна в RTB. Можно ли масштабировать децентрализованную базу д...
Применение блокчейна в RTB. Можно ли масштабировать децентрализованную базу д...
 
Lua в нагруженных телеком-системах / Дмитрий Борисов (ИП Борисов Дмитрий Нико...
Lua в нагруженных телеком-системах / Дмитрий Борисов (ИП Борисов Дмитрий Нико...Lua в нагруженных телеком-системах / Дмитрий Борисов (ИП Борисов Дмитрий Нико...
Lua в нагруженных телеком-системах / Дмитрий Борисов (ИП Борисов Дмитрий Нико...
 
NoSQL Best Practices for PostgreSQL / Дмитрий Долгов (Mindojo)
NoSQL Best Practices for PostgreSQL / Дмитрий Долгов (Mindojo)NoSQL Best Practices for PostgreSQL / Дмитрий Долгов (Mindojo)
NoSQL Best Practices for PostgreSQL / Дмитрий Долгов (Mindojo)
 
Как мы сделали многопользовательскую браузерную игру для HL++ с воксельной гр...
Как мы сделали многопользовательскую браузерную игру для HL++ с воксельной гр...Как мы сделали многопользовательскую браузерную игру для HL++ с воксельной гр...
Как мы сделали многопользовательскую браузерную игру для HL++ с воксельной гр...
 
Рост с нуля до 15000 сообщений в секунду. Мучительный и поучительный / Юрий К...
Рост с нуля до 15000 сообщений в секунду. Мучительный и поучительный / Юрий К...Рост с нуля до 15000 сообщений в секунду. Мучительный и поучительный / Юрий К...
Рост с нуля до 15000 сообщений в секунду. Мучительный и поучительный / Юрий К...
 
Проксирование HTTP-запросов web-акселератором / Александр Крижановский (Tempe...
Проксирование HTTP-запросов web-акселератором / Александр Крижановский (Tempe...Проксирование HTTP-запросов web-акселератором / Александр Крижановский (Tempe...
Проксирование HTTP-запросов web-акселератором / Александр Крижановский (Tempe...
 
Database First! О распространённых ошибках использования РСУБД / Николай Само...
Database First! О распространённых ошибках использования РСУБД / Николай Само...Database First! О распространённых ошибках использования РСУБД / Николай Само...
Database First! О распространённых ошибках использования РСУБД / Николай Само...
 
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...
 
Как построить хороший performance review: опыт Badoo / Алексей Рыбак (Badoo)
Как построить хороший performance review: опыт Badoo / Алексей Рыбак (Badoo)Как построить хороший performance review: опыт Badoo / Алексей Рыбак (Badoo)
Как построить хороший performance review: опыт Badoo / Алексей Рыбак (Badoo)
 
После подключения DDoS-защиты: как "положат" Ваши ресурсы / Рамиль Хантимиров...
После подключения DDoS-защиты: как "положат" Ваши ресурсы / Рамиль Хантимиров...После подключения DDoS-защиты: как "положат" Ваши ресурсы / Рамиль Хантимиров...
После подключения DDoS-защиты: как "положат" Ваши ресурсы / Рамиль Хантимиров...
 
Масштабирование сети VR-аттракционов CinemaVR / Андрей Татаринов (VRTech)
Масштабирование сети VR-аттракционов CinemaVR / Андрей Татаринов (VRTech)Масштабирование сети VR-аттракционов CinemaVR / Андрей Татаринов (VRTech)
Масштабирование сети VR-аттракционов CinemaVR / Андрей Татаринов (VRTech)
 

More from Ontico

Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
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...
 

Смерть от распродажи: как Яндекс.Деньги попытались разогнаться к Black Friday и выстоять / Анатолий Пласковский (Яндекс.Деньги)