Как научить почтовый сервер Exim под нагрузкой 1 000 000 писем/мин. переживать отказ ЦОД без простоя с помощью FUSE и Tarantool, а также развернуть такую систему в K8s Архитектуры и масштабируемость
Работает в Mail.ru над инфраструктурой доставки электронной почты 5 лет, за это время прошёл путь от стажёра на полставки до ведущего программиста. Последние 3 года занимается проектом распределённой почтовой очереди.
Работает, в основном, на чистом C и на Lua под Tarantool, реже на Go. Любит хардкорную низкоуровневую разработку и хайлоад — сложные задачи всегда интереснее простых.
Тезисы
В Почте Mail.ru стояла задача: научить бэкенд на основе почтового сервера Exim с нагрузкой 1 000 000 писем/мин. переживать отказ ЦОД без простоя и потери писем. Основная сложность была в том, что почтовый сервер использует локальный диск для хранения очереди писем в процессе доставки.
Для решения проблемы мы построили отказоустойчивую распределённую очередь на основе Tarantool и in-house объектного хранилища. Чтобы не менять логику почтового сервера, мы написали свою файловую систему в userspace на Tarantool и FUSE, которая инкапсулирует взаимодействие с распределенной очередью.
В своем докладе я покажу, как на уровне архитектуры очереди мы гарантируем отсутствие потерь писем, покажу Tarantool с новой стороны — как движок для реализации асинхронных приложений на C, немного расскажу о базовых концепциях файловых систем и поделюсь опытом эксплуатации FUSE в K8s на продакшне.
