Вместе с CIO Игорем Кудриным и CTO Никитой Прудниковым написали подробную статью о технической начинке нашей платформы.
3 февраля 2020
Как устроена наша инфраструктура, и почему мы не боимся пожаров
В статье: на каком железе работает облачная платформа, как мы выкупили все приличные SSD в России, автоматизировали закупки серверных стоек и масштабируем рост с помощью облачных технологий. Особенно интересно будет IT-директорам, специалистам по ИБ и разработчикам.
Немного цифр:
- Отправляем 1,3 млрд email-сообщений в месяц, до 70 миллионов в день
- Обрабатываем более 5 млрд запросов к нашему API в месяц
- На нашей программе лояльности работает более 5000 онлайн и офлайн-магазинов по всей России и СНГ
- Храним более 350 млн профилей
- 25 млрд фактов о клиентах суммарно по всем БД
- 47 тысяч сегментов
- Общий объем БД — 41TB
- Ежедневно рассчитываем более 1 млрд персональных рекомендаций
- Пересчитываем рекомендации в реальном времени в течение 5 секунд
Как устроены передача и хранение клиентских данных
Данные попадают к нам через единый API шлюз. В среднем мы обрабатываем 150 тысяч запросов в минуту в дневное время.
Количество запросов в минуту и за сутки
Данные распределяются по раздельным клиентским базам данных (БД). Из соображений безопасности у каждого клиента база данных изолирована, и данные одного клиента никак не пересекаются с данными других клиентов. Так мы гарантируем безопасное хранение.
Накопленные данные хранятся в платформе. На основе собранных данных маркетолог клиента без помощи IT настраивает и запускает механики, строит сегменты, настраивает акции, отправляет рассылки, выгружает отчеты.
После внедрения платформы «Флорист.ру» снизил затраты IT на поддержку рассылок до нуля — маркетолог всё делает сам
С технической точки зрения, активности маркетолога сводятся к тому, чтобы прочитать данные из БД, каким-то образом их обработать и записать результат обработки обратно в БД. Таким образом, типы нагрузки можно разделить на два: хранение данных и их обработка. Не случайно Федеральный закон № 152-ФЗ «О Федеральных данных» и GDPR (General Data Protection Regulation) оперируют именно этими двумя категориями.
Что за железо использует платформа, и где оно находится физически
Физически данные располагаются на наших собственных серверах на территории РФ в ЦОДе Data Line. Это дата-центр уровня Tier III: в России нет более высокоуровневых коммерческих ЦОДов, чем этот. Для всех ресурсов, включая питание и охлаждение, обеспечивается резерв по схеме N+1, есть два ввода электропитания от разных подстанций. Данные передаются по 10-гигабитной оптической сети на оборудовании Dell.
Здание расположено отдельно, территория изолирована и охраняется. Data Line аттестован на соответствие Федеральному закону № 152-ФЗ. Mindbox также отвечает требованиям ФЗ: летом 2019 года компания прошла первичный аудит корпоративной безопасности в Group-IB и получила положительное заключение. Также компания успешно выдержала тесты на проникновение.
Машинные залы и инженерные помещения размещаются в гермозонах, которые защищают оборудование от протечек и пыли и сдерживают распространение огня в течение 45 минут
Мы работаем с Data Line 11 лет, почти с момента основания компании, и за всё это время по вине ЦОД было всего два инцидента. Про них расскажет CIO Mindbox, Игорь Кудрин.
«Первый инцидент был очень давно, лет 7 или 8 назад. Ветром с крыши соседнего здания на крышу нашего ЦОДа сдуло металлоконструкции и повредило чиллеры, промышленные устройства для охлаждения. Температура поползла вверх. Мы приняли волевое решение: выключили только резервные серверы, примерно треть. Нас упрашивали потушить и активные серверы, но мы рискнули и «проехали». А недавно был пожар. После этого мы задумались о том, что нам нужен второй ЦОД».
CIO Игорь Кудрин не боится пожаров
Какие серверы мы закупаем
Для хранения данных мы используем серверы бренда Dell. Типовая конфигурация сервера выглядит так:
- Процессор 2x CPU Intel Xeon Gold 6146 3.2 Ghz
- Оперативная память 192GB RAM
- Жесткий диск 6,4TB NVME SSD
Эта самая эффективная конфигурация под MS SQL Server Standard — ПО баз данных, которое мы используем, — с точки зрения производительности и стоимости лицензий.
При этом нужные нам диски SSD с большой производительностью IOPS на чтение данных — большая редкость, и на рынке появляются по одной-две штуки. Мы выкупаем все доступные диски в РФ и встаем на очередь за следующими, поэтому у наших поставщиков («Никс», Regard) всегда дефицит.
Всего у нас 50 серверов БД. Используем автоматическую модель закупок, которая отслеживает актуальное потребление серверов, а также смотрит планы продаж и заранее, за 3 месяца, ставит закупку в бюджет.
Фрагмент автоматической модели закупок. Начиная с июня планируем закупать по 2 сервера в месяц
Иными словами, мы всегда имеем запас по производительности и вовремя реагируем на изменения в планах.
Обработка данных — другая задача, поэтому под неё покупается другое оборудование. Оперативной памяти гораздо больше, а накопительные диски — меньше:
- Процессор 2x Intel Xeon Gold 6154 CPU
- Оперативная память 384 GB RAM
- Жесткий диск 256GB SSD
Эта нагрузка требует много CPU и мало дисковой памяти: данные не пишутся на диск, а обрабатываются в памяти. По этой причине их гораздо проще запускать — к ним не нужно покупать дефицитные SSD.
Как обеспечивается бесперебойность работы
Mindbox использует стандартные метрики: CPU (количество миллисекунд процессора, которое потрачено на задачу) и wall-clock time (календарное время, которое потрачено на задачу).
«Оба типа нагрузки у нас подробно покрыты метриками. Недавно мы оптимизировали и переписали текущую инфраструктуру рассылок, чтобы поддерживать кратно бóльшие скорости, и отдельно выгрузили каждое узкое место. Тестировали с тем расчетом, чтобы через них проходило 500 тысяч писем в минуту. Таким образом, с ростом количества клиентов и рассылок мы сможем всё это «переварить».
За бесперебойную работу серверов отвечают двое SRE (Server Reliability Engineer). Они не отключают телефоны на ночь и получают SMS при возникновении проблем, например, в случае превышения нагрузки на CPU сервера. Если затронута какая-то важная часть продукта уровня рекомендаций или программы лояльности, SMS приходит и архитекторам этой фичи — сейчас таких людей в компании шесть человек.
CTO Никита Прудников — один из тех, кому приходят ночные SMS
На все потенциально узкие места также настроены алерты, а разработчики проектируют систему так, чтобы она переживала отказы.
«Изначально наша задача была — расти, и старая архитектура была рассчитана на то, что мы резервируемся на уровне железа: если первый сервер откажет, то второй вступит в работу. А сейчас мы проектируем нашу архитектуру таким образом, что, даже если оба сервера откажут, большая часть продукта продолжит функционировать. Например, если у нас перестанут работать персональные рекомендации, мы просто покажем популярные или скроем весь блок».
«Когда у тебя растет количество стоек, а ты ещё хочешь гео-распределенные приложения (то есть такие, которые работают сразу в нескольких ЦОДах), нагрузка на инфраструктуру и требования к надежности этого узла, к сети растут геометрически. Облако решит эту проблему. Мы планируем переезд в Яндекс.Облако, но проектируем архитектуру таким образом, чтобы не быть привязанными к конкретному облаку».
Что будет дальше
Сейчас в Mindbox более 300 клиентов, завершивших интеграцию. В этом году мы планируем увеличить их количество на 160: плюс 60% нагрузки. Чтобы улучшить масштабирование и снизить риск ошибок, планируем переехать со своих серверов в облако. Это повлечет за собой увеличение расходов на железо, но избавит от необходимости обслуживания сети.
Сейчас разработчики Mindbox трудятся над тем, чтобы разделить монолитное приложение, которое подвержено отказам и остро на них реагирует, на микросервисы, которые менее подвержены отказам. По словам Игоря, смена парадигмы поможет Mindbox обслуживать и тысячу, и три тысячи клиентов.