Задание по проектированию архитектуры высоконагруженной системы (Музыкального сервиса) для Образовательного центра VK
VK Музыка — это один из самых популярных в СНГ сервисов для просулшивания музыки, предоставляемый социальной сетью ВКонтакте. В данном репозитории я попытался представить как могла бы выглядеть архитектура данного высоконагрженного сервиса.
Технология | Область применения | Обоснование |
---|---|---|
Go | Backend | Go и gRPC — это мощная комбинация для разработки высокопроизводительных и масштабируемых микросервисов. Go обеспечивает простоту, производительность и экосистему, необходимые для разработки микросервисов, а gRPC обеспечивает высокую производительность, строгую типизацию и поддержку множества языков для взаимодействия между микросервисами. |
React.js | Frontend | Наиболее часто используемый фреймворк в связке с Go для создания пользовательских интерфейсов. Позволяет легко создавать динамические и интерактивные интерфейсы |
Nginx | Frontend-web-server, Load Balancer | Nginx эффективно обслуживает статические файлы, такие как HTML, CSS, JavaScript, изображения и видео. Nginx может распределять входящие запросы между несколькими серверами, что очень сильно повышает производительность и надежность. |
Redis | Session Storage | Redis как хранилище сессий обеспечивает высокую производительность, масштабируемость, устойчивость, поддержку сложных структур данных, гибкость и автоматическое управление памятью. Это делает его одним из лучших выборов для хранения сессий в высоконагруженных и распределенных системах. |
VK Cloude | Cloude Storage | Ввиду того что VK Cloude является продуктом VK, интегрирование данного облачного хранилища для музыки в VK Музыка будет более простым и дешевым |
VK Cloude | Content Delivery Network | VK Cloud предлагает сервис CDN, который позволяет пользователям ускорить загрузку контента на своих веб-сайтах и приложениях, улучшить производительность и снизить нагрузку на исходные серверы. Это крайне необходимо для того чтобы музыка, которая является довольно тяжелым статическим файлом, загружалась с минимальной задержкой |
Cassandra | DBMS | Cassandra — это распределенная NoSQL база данных, которая хорошо подходит для хранения больших объемов структурированных и полуструктурированных данных с высокой доступностью и масштабируемостью. В контексте VK Cloud, Cassandra может быть использована для хранения метаданных о музыке, таких как информация о треках, альбомах, исполнителях, жанрах и других атрибутах. Ее распределенная архитектура, высокая доступность, масштабируемость и производительность делают ее идеальным выбором для систем, требующих обработки больших объемов данных с высокой скоростью и надежностью. |
C++ | Backend | C++ является отличным выбором для реализации рекомендательных систем благодаря своей высокой производительности, обеспечиваемой низкоуровневым доступом к ресурсам и возможностью точной оптимизации, а также масштабируемости, позволяющей эффективно работать с большими объемами данных и сложными алгоритмами. |
MongoDB | DBMS | MongoDB обеспечивает гибкость в структуре данных, высокую доступность и масштабируемость, что позволяет эффективно хранить рекомендации сгенерированные моделью на C++ |
ClickHouse | Analytics | Столбчатая БД для сохранения данных для аналитики работы сервиса |
Ключевое действие для данного сервиса - это прослушивание музыки, а значит требуется, чтобы в первую очередь, данный процесс был бсытрый и бесперебойный. Для того чтобы хранить саму музыку используется Облачное хранилище, что может быть не самым надежным вариантом для такого рода задач. Для решения проблемы испльзуется CDN (Content Delivery Network):
- Быстрое воспроизведение
- Высокое качество звука
- Бесперебойная работа
- Экономия трафика
- Оптимизация на мобильных устройствах
В случае повышения средней нагрзки на сервис требуется масштабирование. Это например может быть горизонтальное масштабирование путем увеличения количества серверов на микросервисы и установки дополнительных load balancer. Или вертикальное масштабирование, которое достигается увеличением мощностей уже существующих серверов. Так же из за относительно невыского покрытия целевой аудитории сервиса (пределы СНГ) можно рассмотреть географическое масштабирование, это может быть увеличение серверов для CDN или создание региональных центров обработки данных. Если на сервисе резкое возрастание нагрузки, вызванное например релизом ОЧЕНЬ популярного артиста, можно воспользоваться деградацией некоторых его компонентов. К примеру:
- Отключение рекомендаций: Отключение динамических рекомендаций или снижение частоты их обновлений, которые требуют обработки большого объема данных,
- Ограничение доступа к истории прослушивания: Ограничение доступа к истории прослушивания или снижение частоты обновления данных
- Ограничение частоты обновления аналитики: Ограничение частоты обновления аналитических данных
- Отключение уведомлений для некоторых пользователей: Отключение уведомлений для пользователей с низким уровнем активности.