Архитектура почтовой системы Рамблер Основная секция
Тезисы
Почта это больше, чем обычное web-приложение. Много данных, много протоколов, много событий в единицу времени. С проблемой масштабирования сталкиваешься, даже создавая почтовую систему масштаба предприятия. В публичной почте всё должно хорошо масштабироваться и работать (или хотя бы пытаться) вне зависимости от аппаратных проблем.
Из чего состоит почта Рамблера? Подсистемы минимальная информация о пользователях (directory), данные (storage), доступ по http, клиентский smtp/pop3, входящий smtp. Дополнительные подсистемы фильтрация спама, фильтрация вирусов. Слабая связанность подсистем как средство упрощения разработки.
Подробнее о
- Directory. Хранит минимальные знания о пользователе (сервер, на котором живет пользователь + ещё немного), MySQL + master-slave репликация.
- Storage хранение данных. Внутренние сервера с IMAP/POP3/SMTP доступом.
- Доступ по HTTP. Фронтенды на nginx. CGI apache+mod_perl, доступ к содержимому почтового ящика по IMAP'у, доступ к directory по необходимости (на чтение к репликам, если нужна запись на master'а). Хранение временных данных и кеширование в memcached.
- Клиентский SMTP/POP3 nginx, авторизация через cgi cluster, прямое проксирование авторизованных POP3 соединений на нужный пользователю storage backend, проксирование авторизованных SMTP соединений на реальный SMTP-сервер.
- Лирическое отступление: зачем нужен nginx для SMTP.
- Входящий SMTP. Ходят к репликам directory и подсистемам фильтрации, при наличии соединения со storage backend'ами отдают им почту. Могут легко разбиваться на географически раздельные блоки, связность не критична.
Подводя итоги: проблемы решённые и проблемы остающиеся. Масштабируется и резервируется практически всё.