вторник, 27 мая 2014 г. - www.msmirnov.ru

Архитектура небольшой социальной сети

Некоторое время назад перед моей командой стояла задача построения средней социальной сети музыкантов и их фанатов, рассчитанной на 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 использовались для авторизации в социальной сети.

Мой сайт - www.msmirnov.ru