Дмитрий Андрианов: «Никто не ожидал, что почта окажется такой популярной»

18 октября 2016
Дмитрий Андрианов, Senior Software Architect

Senior software architect DataArt сейчас работает в Лондоне, занимается крупными IoT-проектами и подготовкой стратегических решений в области разработки ПО. В компанию он пришел, не будучи в ней до конца уверенным и размышляя: «Поработаю несколько месяцев и, если что, уйду», – правда, было это 18 лет назад. Мы попросили Дмитрия вспомнить, как создавался сервис Mail.ru, о первом неожиданном успехе DataArt и последовавших за ним непростых моментах нашей истории.

О сервисе Multipop

Когда меня наняли, одна из первых задач, которую поставил передо мной Леша [Алексей Кривенков — прим. ред.] была связана с почтой для клиентов, которую хостил DataArt. Тогда DataArt был небольшой компанией, и разработка ПО была для него не основным, или, по крайней мере, не единственным направлением работы. Также DataArt предоставлял клиентам интернет и немножко занимался хостингом.

Сейчас любой дистрибутив UNIX позволяет хостить на одном сервере любое количество почтовых доменов, но тогда, в 1998 году, было не так, и на FreeBSD, который у нас использовался, было все просто: один IP адрес — один домен. Клиентов было много, а IP адресов — нет. И сделать поддержку виртуальных доменов на одном сервере было здравой идеей. Для этого нужно было взять стандартную UNIX-программу Mail Delivery Agent (mail.local), которая доставляла принятую почту в mailbox пользователя, немного ее доработать, чтобы она знала, что этот mailbox должен находиться в подкаталоге домена этого пользователя. Эту штуку я и поправил первым делом, следующим шагом были аналогичные изменения в POP3-сервере, который позволяет забирать почту — на этом задача была выполнена. В общем-то, не rocket science, но это позволило DataArt существенно упростить свой почтовый хостинг.

Следующей Лешиной идеей было сделать простенькую веб-мордочку для добавления/удаления пользователей (чтобы клиенты могли сами управлять своими доменами без писем в DataArt). Писалось все на Perl. Для меня это был абсолютно новый мир, до этого я никогда не занимался вебом. UNIX и почтой, впрочем, я тоже до этого не занимался, т. ч. правильнее сказать «новые миры».

Вся эта почтовая штука называлась у нас Multipop (или mPOP). Ей-то и было суждено стать тем, из чего вырос весь mail.ru

О появлении Mail.ru

Когда был готов интерфейс управления пользователями, Леша сказал: «Было бы круто еще сделать там же страничку для отправки почты», что тоже было не трудно. А вот последующее: «а может, и читать тогда через веб дадим?», меня реально загрузило — формат писем оказался довольно волосатой штукой с кучей вариаций. Стандарт, который все это описывал (RFC822), для меня — человека ранее почтой не занимавшегося, никаких RFC не читавшего, с BNF (Backus–Naur Form) не знакомого — читался как манускрипт на китайском.

С грехом пополам сделал читалку. Греха было много. В силу указанного выше обстоятельства к стандартам я обращался исключительно в случае крайней необходимости. Остальное время — смотрел на структуру писем, говорил «а, ну понятно» и кодил поддержку еще чего-нибудь. Например, адреса отправителей/получателей парсились при помощи regexp — регулярных выражений, которые, конечно же, не понимали и половины того что в этот адрес можно затолкать согласно стандарту. Спасало, что никто ничего такого в адреса и не заталкивал, т. ч. адреса парсились всегда.

Леша стал носиться с идеей сделать из этого публичный сервис. Он приобрел домен mail.ru у своих друзей, и мы запустились. Деньги, потраченные на домен ($500, по-моему), мне по тем временам казались чудовищным расточительством. Это был сентябрь 1998 года, если я ничего не путаю. Через несколько минут после того, как мы открыли доступ, к нам начали добавляться пользователи, несмотря на то, что мы открытие никак не афишировали — так оно и пошло-поехало. Интересно, что вся эта штука с mPOP делалась ради мультидоменного хостинга, но мы его толком не использовали: акценты сместились очень быстро. На тот момент занимались сервисом три человека: Леша в качестве идейного вдохновителя, я как единственный разработчик, и Андрей Язиков (он же Мартин), который делал дизайн.

Довольно быстро мы узнали обратную сторону популярности: mPOP ведь никогда не писался с расчетом на такую нагрузку — это был просто почтовый сервис для маленького провайдера. Никто не ожидал, что почта окажется такой популярной. Perl, на котором я писал всю веб-часть, я до этого тоже никогда не использовал, т. ч. ходил по граблям и изобретал велосипеды. Наверное, я бы не хотел сейчас увидеть свой собственный код тех времен.

Как только число пользователей начало расти, тормоза начались неимоверные, и оказалось, все, что можно, придется заменять. Нам была нужна нормальная база пользователей — мы запустились без какого бы то ни было SQL, база пользователей была в стандартных UNIX passwd-файлах. А это означает линейный поиск и, конечно, ужасно низкую скорость работы. Пришлось срочно прикручивать MySQL и с четвертого Perl переходить на пятый (потому что как же можно без ООП). Переведя на базу, мы все довольно успешно оптимизировали, работать почта стала гораздо быстрее. А дальше процесс набирал обороты с огромной скоростью: стали брать новых сотрудников, появился Вова Шутов, который сел переписывать всю работу с mailbox на C, и началась совсем другая история.

У нас не было никаких юзабилити-экспертов, только графический дизайнер. Я просто шарился по всяким Yahoo Mail, Hotmail, смотрел, как у них все сделано, искал наиболее удачные идеи. У нас получился очень простой интерфейс, все грузилось моментально, и нам говорили: «Как здорово и быстро у вас все работает!» На тот момент конкуренции фактически не было, людям почта была очень нужна, и мы эту нишу заполнили.

Наш первый сервер mail.ru стоял в ЛИТМО в той же комнате, где сидел DataArt, потому что там был приличный канал в интернет. Довольно быстро трафик стал заметным, и начались какие-то терки с ЛИТМО, который канал предоставлял. Т. ч. в 1999 году серверы перевезли Москву в «Совам телепорт». Операция была довольно забавная: мы оставили одну машину, принимавшую почту в ЛИТМО, настроили ее, чтобы не ругалась, что не может доставить почту в ящик долгое время, заглушили веб-морду и серверы с почтовыми ящиками, и все жесткие диски с ящиками в чемоданах в обычном багаже полетели в Москву. Я тоже полетел, к счастью, не в чемодане.

Надо ли говорить, что на самолете я до этого раза тоже никогда не летал. В Москве за один день Леша купил серверы, мы установили систему и воткнули привезенные жесткие диски. Сделать все оперативно, как планировалось, не получилось — при попытке запуска начал страшно валиться MySQL. Было непонятно, бага в нем или все-таки во FreeBSD, поддержка тредов в котором на тот момент была так себе. Так или иначе, вместе они работать больше пары минут отказывались.

MySQL был одним из первых UNIX-сервисов, активно использующим треды. На старых серверах тоже были какие-то похожие проблемы с MySQL, но они случались крайне редко. В Москве же, видимо все усугубилось тем, что мы взяли последние версии и того, и другого. Хоть версии были взяты стабильные, но не те, которые были на старых серверах. Откатывать все к старой операционке уже не хотелось, да и на новые фичи MySQL мы уже имели планы. Т. ч. на сервер базы был срочно поставлен Linux, на котором MySQL заработал как часы. «Срочно» это, конечно, понятие растяжимое — было уже довольно поздно. Linux я, по уже устоявшейся традиции, видел первый раз в жизни, к тому времени я был уже матерым FreeBSD-шником со своими предубеждениями. А под наши нужды нужно было не просто поставить ОС из коробки, а затюнить ядро.

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

О ранней истории DataArt

Понятие «ранний DataArt» у каждого, наверное, ассоциируется с разными периодами и разными людьми. Леша меня изначально брал именно в DataArt, т. ч. для меня история начинается с января 1998 года. Кривенков, с которым мы учились вместе в одной школе, пригласил меня встретиться с Голандом, который был в Питере в тот момент. Мы все вместе поболтали в кафешке, даже не знаю, было ли это интервью или просто знакомство. Предложение было заманчивым и стремным одновременно: с одной стороны, мне предлагали ровно в два раза больше денег, чем я получал на текущем месте работы (а работал я в Fontlab), плюс обещали интересную работу, с другой — для меня на тот момент никакими признаками надежной компании DataArt не обладал. Я подумал, что надо попробовать, все-таки в два раза — это в два раза.

Когда я пришел, то познакомился с Мишей Завилейским, Антоном Беловым, Алексеем Филимоновым и Сашей Макеенковым, которые там были до меня. В общем-то на тот момент для меня все выглядело так, что это и есть весь DataArt, потому что кроме них и Кривенкова я, наверное, год практически никого другого и не видел. Было несколько человек в Нью-Йорке, но я с ними очень мало пересекался.

Ребята сидели в ЛИТМО в комнате около вахты. Что было довольно удачно, т. к. я почему-то решил, что бросить ходить в университет на первом же курсе, было плохой идеей, и, спустя пять лет после окончания школы, поступил учиться в ЛИТМО. Совпадение было мне на руку — расстояние между работой и учебой составляло пару лестничных пролетов. Еще в этой комнате был ксерокс, на котором студентам за мзду малую ксерили их курсовики.

Я вообще люблю небольшие коллективы — как-то реально проще, ты всех знаешь, люди между собой общаются, есть контакт, как говорится. Так что «начальный» DataArt меня очень радовал — мы всем составом рубились в Quake CTF (что работе совсем не мешало, честное пионерское) и вообще у меня от тех времен только положительные воспоминания.

Но довольно скоро, в том же году, мы разделились на две площадки — те, кто занимались UNIX-вещами вообще и mPOP в частности, переехали на Миллионную улицу, а те, кто исторически был в ЛИТМО — там и остались. Ребята в ЛИТМО работали над системой, которая называлась My Phone Book — онлайн телефонная книга. Писалось это все на Майкрософтных технологиях, так что у нас получилось разделение на два офиса по религиозным соображениям. Как и пять лет назад, географическое разделение работы и учебы начало сказываться на учебе, я стал меньше туда ходить, но в этот раз все-таки не бросил и зачем-то доучился.

Потом (кажется это был 1999-й) у нас был офис на канале Грибоедова, там мы уже активно росли. Для большинства «старичков» DataArt, этот офис и есть «ранняя история DataArt» — слишком уж мало людей работало в DataArt до этого.

В 1999-2000 году была создана инвестиционная компания Рort.ru, и Mail.ru стала ее частью. DataArt же стал чисто девелоперской компанией, и Port.ru был нашим самым крупным заказчиком. Настолько крупным, что его можно было считать единственным. Это было время расцвета доткомов, так что жизнь кипела. Где-то даже через край.

Мы переехали в большой офис на Серпуховской. В том момент мы нанимали очень много сотрудников под реальные и потенциальный проекты, все перло, деньги были. Появлялось огромное количество новых направлений разработки, но понимал ли толком кто-то, куда мы идем, или мы пытались, пока есть возможность, просто быстро расплодиться и занять весь рынок, было непонятно. Была, например, попытка собрать прайс-листы со всех магазинов и сделать общий портал, где можно купить все, что угодно. Ресурсов в эти проекты было вложено очень много, но мало что из этого взлетело. Mail.ru как был стержнем, на котором все крепилось, так им на тот момент и оставался.

Потом пузырь доткомов лопнул, все это бодро сдулось. Port.ru свернула большинство работ, оставив только поддержку самого Mail.ru, а позже и вовсе отказалась от услуг DataArt, который в результате резко сократился — с 200 человек примерно до 30.

Вообще, небольшие кризисы — это даже полезно, позволяет немного «очистить кровь». DataArt рос быстро, деньги не особо считали, была куча проектов на все случаи жизни, появлялись сотрудники с совершенно мутными должностями, люди которые вообще непонятно чем занимались. Кризис встряхивает, позволяет собраться, пересмотреть приоритеты, оптимизировать себя, избавиться от ненужных расходов. Позволяет задаться вопросом — действительно ли нужен в компании заместитель помощника секретаря старшего менеджера по оптимизации процессов. К сожалению, сокращение с 200 до 30 это гораздо больше, чем небольшое кровопускание. Мы тогда потеряли кучу реально хорошего народа. Но зато выжили. И, что важно, когда DataArt позже снова начал разрастаться и мы звали людей обратно — большинство возвращались несмотря на то, что у них давно уже была другая работа. Так я лишний раз убедился, что DataArt — это хорошо, и людям здесь нравится.

В годы кризиса мы брались за все, денег тогда ни у кого не было, кое-что мы даже соглашались делать по бартеру. Кажется, по бартеру как раз проходил один из новогодних корпоративов. Было очень много разных проектов, из них мне особенно запомнился один из тех, в которых я принимал непосредственное участие. Это была аналитика того, как пользователь ходит по сайтам, анализ демографии и т. д. Сейчас это делает, например, Google в реальном времени, а тогда раз в день собирались и процессились чудовищные объемы логов. Чудовищными они, конечно, были только по тем временам, когда слов Big Data и сопутствующих инструментов еще не было.

Вообще же за время работы в DataArt мне приходилось работать, наверное, со всем, что было в ходу — Perl, PHP, C++, Java, Ruby, C#, JavaScript... Под «поработать» я имею в виду не просто «ага, видел», а реальную плотную работу — год и более. По мне, такая «многоязыкость» — вещь полезная, расширяет кругозор. Наверное, поэтому я так и остался в DataArt: любая работа рано или поздно немного достает, а когда ты раз в полгода-год кардинально меняешь область деятельности и используемые фреймворки, это интересно и держит тебя в тонусе. Отчасти это до сих пор так, хотя сама компания, конечно, очень сильно изменилась за эти годы, и масштабы в целом здесь совсем другие.