Приёмная Serega Budyakov
520

Ошибка Mandrill в «Юздеске»: история сбоя 4–5 февраля 2019 года

В понедельник утром в мониторинге «Юздеска» появился алерт о том, что уже несколько минут в таблице новых тикетов не появляются новые письма. Иногда такие алерты приходят ночью, когда активность клиентов наших клиентов не очень высокая. Утренний алерт показался странным, потом пришел еще один и стало понятно, что что-то случилось.

В закладки

У Юздеска есть две схемы подключения почты: пересылка и подключение по IMAP. Со вторым методом все понятно — мы напрямую забираем все новые непрочитанные письма из подключенных ящиков. Первый — пересылка — нужен когда по какой-то причине подключиться к ящику напрямую нельзя: политика безопасности, недоступность почтового сервера извне, специфический протокол и т.д.

Для сбора почты по пересылке мы используем внешний сервис — Mandrill. Эта платформа является техническим бэкендом MailChimp, одного из крупнейших мировых сервисов почтовых рассылок. Стабильность Mandrill всегда была на уровне 99.99% (много девяток). Небольшие сбои чинились за пару минут и все сообщения за периоды простоя приходили в течение нескольких следующих минут.

Время этого сбоя совпало с поздней ночью в офисе Mandrill в Атланте. Каково же было наше, а позднее не только наше удивление, что ни саппорт, ни девопсы компании не проснулись. О проблеме им стало известно только утром в начале их рабочего дня, о чем свидетельствует твиттер аккаунт.

Поддержка действовала крайне непрофессионально: обновления публиковались раз в несколько часов и не содержали деталей происходящего. Сравните с ответом их же коллеги из Mailchimp. Кто-то в комментариях спрашивал фотографию команды девопсов, которые ночью разбираются в проблеме. Фотография не последовала.

Ситуация в Mandrill нормализовалась только спустя почти трое суток. Мы столько ждать не могли. Проблемы с нашими внутренними схемами и технологическими провайдерами не должны волновать наших клиентов.

Мы сразу стали предлагать переключение на IMAP. Те клиенты, у которых такое подключение было сразу вообще не почувствовали проблем, но перейти смогли не все. Мы почти целый день ждали решения проблемы у провайдера и попросили какое-то время, пока ситуация не наладится, поработать в почтовике.

Почтовые сервера в интернете работают через специальные MX записи в DNS доменных имен. DNS указывает вашему браузеру к какому серверу пойти, когда вы пишите тот или иной URL в адресной строке или кликаете на результаты поиска в Гугле. MX запись указывает на сервера, которые должны получить письмо, отправленное на какой-либо адрес на каком-либо домене. Письма на @usedesk.ru приходят на адреса Яндекс.Почты, а письма на @inbound.usedesk.ru указывали на Mandrill, который возвращал их нам, так и работала пересылка. Особенность заключается в том, что для одного домена может быть только один провайдер и запустить частичную резервную схему с тем же самым доменом невозможно.

Спустя день стало понятно, что ничего хорошего в ближайшее время ждать не стоит и мы начали работать над подключением альтернативного провайдера. Мы не делали этого раньше, потому что Mandrill довольно плотно сидит в архитектуре Юздеска и смена провайдера в нормальном режиме заняла бы пару недель разработки. Но режим был не нормальным. В общей сложности разработчикам понадобилось 10 часов на интеграцию нового провайдера, тестирование и доставку до всех продакшен серверов. Все другие задачи были отложены.

К концу вторника 5 февраля мы переключили провайдера, поправили ошибки пойманные уже в продакшене и первый раз за 2 дня пошли спать. Теперь мы можем переключаться между почтовыми провайдерами в течение 5 минут, даже во сне.

Заключение

P.S. Если вы не были клиентом Юздеска в эти дни, то можете посмотреть в телеграм канале подробный таймлайн ситуации и ее решения. Я не могу обещать, что у нас больше никогда не случится подобного сбоя, но могу обещать максимально быстрой реакции и честного подробного рассказа о происходящем без скрытия фактов инцидентов со стороны нашей команды.Приношу извинения всем нашим клиентам, которые столкнулись со сложностям в обслуживании своих клиентов.

P.S.S. Прочитать что в итоге случилось у ребят можно в их письме. Что-то там с базой данных Postgres и уход в read-only mode.

Материал опубликован пользователем. Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Serega Budyakov", "author_type": "self", "tags": [], "comments": 0, "likes": 9, "favorites": 1, "is_advertisement": false, "subsite_label": "claim", "id": 57931, "is_wide": false, "is_ugc": true, "date": "Fri, 08 Feb 2019 11:31:08 +0300" }
{ "id": 57931, "author_id": 16722, "diff_limit": 1000, "urls": {"diff":"\/comments\/57931\/get","add":"\/comments\/57931\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/57931"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 199124, "last_count_and_date": null }

Комментариев нет 0 комм.

Популярные

По порядку

0
{ "page_type": "article" }

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } } ]
Компания отказалась от email
в пользу общения при помощи мемов
Подписаться на push-уведомления
{ "page_type": "default" }