Некоторое время назад перед моей командой стояла задача построения средней социальной сети музыкантов и их фанатов, рассчитанной на 25 миллионов пользователей.
Инструментарий, выбранный для реализации проекта я описывал в статье TeamCity и другие. В этой статье я бы хотел поделиться архитектурой, которая была создана для реализации этой локальной сети.
На следующей диаграмме отображена выбранная нами архитектура:
Архитектура была основана на принципах архитектур высоконагруженных приложений. Она изначально предусматривала балансировку и распределение нагрузки и не имела единой точки отказа.
Архитектура включала в себя несколько слоев – слой пользовательского интерфейса UI, слой бизнес-логики и слой хранения данных.
Слои UI и бизнес-логики не хранили в себе никаких состояний (stateless) и могли иметь любое количество независимых инстансов, балансирующих нагрузку.
Слои UI был реализован как Single Page Application (SPA), основанное на технологиях Bootstrap, Angular и jQuery, способное работать на любом виде устройств.
Слой бизнес-логики был реализован в виде ASP.NET Web API-приложения, обменивающегося с UI сообщениями в формате JSON.
MySQL хранил информацию о пользователях, денежных транзакциях и т.п., разбитую вертикально (vertical sharding) на несколько инстансов.
Memcached кешировал часто запрашиваемую из MySQL информацию – данные о пользователях, контент сайта и т.п.. Кеш автоматически распределялся между несколькими инстансами Memcached.
MongoDB была выбрана в качестве NoSQL-хранилища взаимосвязей между пользователями и различными объектами – подписки, ленты событий, комментарии, альбомы фотографий и пр.
Task processor – сервис для выполнения фоновых задач – отправка писем, СМС. обслуживание баз и пр.
Authorize.NET использовался в качестве средства проведения платежей, обслуживания банковских карточек и т.п.
dotCMS использовалась в качестве средства управления контентом на сайте, шаблонами сообщений, хранение картинок и т.п.
Система не использовала никакие собственные хранилища для размещения информации, которая могла потребовать много дискового пространства и не хранила никакую небезопасную информацию (номера карточек и т.п.)
YouTube использовался в качестве хранилища видео-данных и средства проведения review.
Облачное хранилище Amazon Web Services (AWS) использовалось для хранения фотографий и музыкального контента.
Google, Facebook, Twitter и Instagram использовались для авторизации в социальной сети.
Комментариев нет:
Отправить комментарий