«Лучшие предложения aviasales.ru, или как не упустить важное...

Post on 14-Jun-2015

752 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

Антон Щербаков, Senior Backend Developer, Aviasales Выступление на hpc4.itmozg.ru (25 апреля 2013, Санкт-Петербург)

TRANSCRIPT

Лучшие предложения Aviasales.ru, или как не упустить важное среди 150 000 000 билетов в сутки.

Антон Щербаков, Senior Backend Developer, Aviasales.ru

Поисковый движок

Технологии реализации поискового движка

•  Ruby, Ruby on Rails; •  NGINX with Passenger; •  HAProxy; •  MySQL, Redis, MongoDB;

Нагрузка

•  200 000 поисковых запросов в сутки. •  250 запросов к MySQL в секунду, 300 запросов

к MongoDB в секунду. •  Исходящий трафик поискового движка – 25 Мбит. •  Десятки гигабайт json c билетами в сутки.

Сервисы Aviasales.ru

Полный стек технологий

Дополнительные сервисы Aviasales.ru

Aviasales.ru - поисковик дешевых авиабилетов.

Календарь минимальных цен

Карта минимальных цен

Лучшие предложения за последние 48 часов

Лучшие предложения за последние 48 часов

Рассылка минимальных цен

Рассылка минимальных цен

Рассылка минимальных цен

•  Большие возможности пользовательской настройки рассылки.

•  Письма отправляются сразу после

нахождения цены.

•  Ежедневно отправляется в среднем 35 тысяч писем.

Рассылка минимальных цен

•  DomainKeys Identified Mail (DKIM).

•  Sender Policy Framework (SPF).

•  Дополнительные заголовки письма (Precedence:bulk; X-List-Unsubscribe).

Задачи

•  Упрощение логики получения информации о минимальных ценах.

•  Упрощение схемы актуализации данных. •  Вынесение отдельных сервисов в целях

повышения отказоустойчивости системы.

Внутренняя организация системы хранения минимальных цен

Redis •  Богатая модель данных. •  Атомарные операции. •  Транзакции.

Сохранение минимальных цен

SETEX key: "economy:LED:BOJ:2013-06-01:2013-06-11:zero_weeks" value: "14612:1366179887:1666" expires_in: 172800 SETEX key: "economy:MOW:MCX:2013-05-02:2013-05-08:zero_week" value: "14050:1366179888:1534" expires_in: 86400

Загрузка данных для календаря

MGET "economy:LED:BOJ:2013-06-01:2013-06-11:zero_changes" "economy:LED:BOJ:2013-06-01:2013-06-11:one_change" "economy:LED:BOJ:2013-06-01:2013-06-11:two_changes" "economy:LED:BOJ:2013-06-01:2013-06-12:zero_changes" "economy:LED:BOJ:2013-06-01:2013-06-12:one_change" "economy:LED:BOJ:2013-06-01:2013-06-12:two_changes" "economy:LED:BOJ:2013-06-01:2013-06-13:zero_changes" "economy:LED:BOJ:2013-06-01:2013-06-13:one_change" "economy:LED:BOJ:2013-06-01:2013-06-13:two_changes"…

Загрузка минимальных цен для сервиса лучших предложений

Загрузка минимальных цен для сервиса лучших предложений

Загрузка минимальных цен для сервиса лучших предложений

Загрузка минимальных цен для сервиса лучших предложений

Загрузка минимальных цен для сервиса лучших предложений

Загрузка минимальных цен для сервиса лучших предложений

Загрузка минимальных цен для карты

Загрузка минимальных цен для карты

Схема добавления данных в хранилище

1.  Сбор информации о минимальных ценах. 2.  Фильтрация. 3.  Сохранение цен в хранилище. 4.  Обновление соответствующих

упорядоченных наборов.

Схема добавления данных в хранилище

Схема добавления данных в хранилище

Нагрузка

•  3 000 000 минимальных цен в сутки. •  2000 команд Redis в секунду. •  700 000 запросов через API

минимальных цен в сутки.

Плюсы и минусы перехода на Redis

Плюсы: 1.  Упростилась схема работы с устаревшими

минимальными ценами. 2.  Упростилась логика выборки данных,

необходимых для успешной работы сервисов. 3.  Возросла производительность сервисов. 4.  Упростилось решение задачи постраничной

отрисовки цен. 5.  Отпала необходимость сортировки данных для

некоторых сервисов.

Плюсы и минусы перехода на Redis

Минусы: 1.  Значительные издержки потребления

оперативной памяти. 2.  Риск потери данных при отключении физической

машины.

Выводы

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

top related