Блог компании Mail.Ru Group
29 октября 2010

Как создаются платежные системы: часть первая

Летом 2009 года компания Mail.Ru объявила о запуске новой платежной системы, созданной силами собственных разработчиков (напомним, что до этого технологическую и сервисную поддержку проекта Деньги@Mail.Ru осуществляла платежная система «МаниМэйл»). Новый проект должен был, помимо всего прочего, предложить пользователям портала единый, удобный и безопасный механизм оплаты услуг различных сервисов компании — от развлекательных проектов (Игры, Приложения в Моем Мире) до проектов электронной коммерции (Товары, Недвижимость, Рассылки).

Прошел год. Деньги@Mail.Ru продолжают развитие, наращивая количество финансовых инструментов как для пользователей, так и для магазинов. Для пользователей это возможность переводов внутри системы, оплаты различных услуг и товаров (от оплаты многочисленных игр, сотовой связи, интернета и услуг ЖКХ до покупки одежды и билетов), возможность ввода с банковских карт и вывода на виртуальные карты Visa. Для магазинов активно развиваются инструменты для автоматизации приема оплаты или пополнения счетов пользователей — многие функции платежной системы доступны через API.

Кроме упомянутых явных функций есть и технологические, о которых рассказывают гораздо реже, но которые не менее значимы для компании в целом. Например, у сервисов портала и магазинов, подключенных к Деньгам@Mail.Ru, есть возможность принимать платежи от пользователей, которые держат свои электронные средства в других платежных системах — WebMoney, «Яндекс.Деньги» и ряде других. Не менее важная часть системы — это процессинг sms, с помощью которых посетители из многих стран могут оплачивать услуги различных сервисов портала без необходимости открывать счет в платежной системе.

Этой статьей мы открываем целый цикл рассказов о том, как устроена наша платежная система изнутри, какие инструменты мы используем для обеспечения ее надежной работы, как обеспечивается работа с десятками внешних систем, с какими проблемами нам довелось столкнуться, как мы их решали и какие выводы сделали. Помимо технических статей попробуем рассказать о том, как с помощью нашей платежной системы расширить финансово-активную аудиторию ваших интернет-магазинов и приложений для социальных сетей. Если вам интересны какие-то иные темы касательно Денег@Mail.Ru, спрашивайте, постараемся осветить.

Как закалялась сталь


Задача начать работу над новым проектом была поставлена перед нашим отделом в конце 2008-го года. На тот момент времени платежные системы не относились к тем видам проектов, которые в Mail.Ru привыкли разрабатывать, запускать и успешно эксплуатировать. Однако уже на этапе постановки задачи было понимание, что нужно было учесть и реализовать в процессе разработки.

Мы назвали эти требования «МММ» (это, конечно, шутка) по первым буквам. Вот они:
  • Масштабируемость
  • Мультивалютность
  • Многовитринность
Чуть подробнее о каждом из них.

Масштабируемость


Не секрет, что иногда проект «выстреливает» неожиданно для создавших его людей, получает большое количество пользователей, и перед разработчиками встает проблема, как быстро справиться с резко возросшими нагрузками. Обкладывание проекта memcache’ами, подъем master-slave репликации — эти понятия знакомы многим людям, пытавшимся что-то сделать, чтобы проект не тормозил. К сожалению, даже этими нехитрыми способами обычно не получается помочь быстро — надо учить компоненты системы ходить в кэш, использовать один сервер баз данных для записи и множество для чтения и так далее. Быстро обеспечить хорошее горизонтальное масштабирование (scale-out) — задача не всегда тривиальная. И нам не хотелось столкнуться через неделю-месяц-год после запуска с тем, что для решения этой задачи придется переписывать проект, который всё это время не будет справляться со своей основной задачей — электронными платежами. Поэтому уже на этапе проектирования системы нужно было заложить фундамент для простого масштабирования Денег@Mail.Ru.

Мультивалютность


Опять же не секрет, что иногда код, прекрасно работающий с яблоками, отказывается работать, когда на обслуживаемом им складе появляются бананы. Ну не предусмотрена в коде работа с разными сущностями! Во многих случаях, которые доводилось видеть, задача часто решалась заведением для апельсинов нового набора таблиц, аналогичного «яблочным», и копированием ранее написанного кода с заменой $iApples на $iBananas. В других случаях решение задачи было более адекватным — в базе появлялись дополнительные поля, классы наследовались от уже готовых с добавлением каких-то новых методов и свойств (например, атрибут «кожура» для яблока обрабатывается совсем не так, как для банана). Но даже это решение иногда требовало достаточно больших изменений в коде. Поэтому заложить в систему мультивалютность нужно было сразу же.

Многовитринность


Самое загадочное свойство на первый взгляд, но объяснение очень и очень простое. Витриной мы называем точку входа в систему, которая может работать с независимыми от основной точки входа настройками — от другого адреса домена и своей собственной валюты до своего метода авторизации пользователей и своего интерфейса. Запуск такой новой витрины тоже должен быть очень простым — не сложнее добавления пары строк в конфигурационные файлы системы и при необходимости новых шаблонов пользовательского интерфейса.

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

Удалось ли нам это сделать? Да, удалось в полной мере.

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

Мы можем процессить все имеющиеся в мире валюты (национальные банки, ау!), не задумываясь о том, как будет себя вести система. Чтобы не быть голословным — сейчас в системе уже используется несколько валют (ох уж эти юридические заморочки!).

Ну а в качестве примера витрин можно привести версию сайта для отладки магазинов, на которой используется тестовая валюта; мобильную версию сайта, у которой собственный набор доступных действий и собственные шаблоны. Еще один пример — витрина для работы магазинов с API, где используется метод авторизации, отличный от того, с помощью которого в Деньгах@Mail.Ru идентифицируются пользователи портала. Запуск этих витрин для системы действительно выглядел всего лишь как появление в файлах конфигурации блоков с описанием витрин и пары папок с шаблонами. Ровно так же мы можем обеспечить, например, работу на нашем движке платежной системы Деньги@ВКонтакте.Ру или любой другой, которая выскажет такое желание.

Думаю, многим интересно, как с технической точки зрения нам это всё удалось реализовать. Поэтому в следующей статье мы расскажем об инструментах и технологиях, которые позволили нам сделать нашу платежную систему такой, какая она есть, а так же остановимся на общей архитектуре проекта. Оставайтесь с нами!

Команда Денег@Mail.Ru
+19
17,2k 37
Комментарии 55
Похожие публикации
Популярное за сутки