Spotify 系统架构

简介: Spotify 系统架构

Spotify 是全球最流行的音乐流媒体平台之一,为全球近 4 亿用户提供音乐服务。这篇文章简单分析了 Spotify 的系统架构,可以作为学习流媒体平台需求和架构的入口。原文:Spotify System Architecture[1]


目前有很多音乐流媒体平台,比如 Spotify、Apple Music、Pandora、Soundcloud 和 Tidal 等。今天,我打算详细分析一下 Spotify,这是一个集所有功能于一体的流媒体音乐服务,允许用户访问世界各地艺术家的数百万首歌曲以及其他媒体形式。相信每个年轻人都喜欢听不同韵律的音乐,为了充分利用 Spotify 的功能,强烈建议订阅 Spotify 的付费服务,它可以让你在没有任何限制的情况下收听无广告的音乐,还可以下载音乐和离线收听高质量的音频。实话实说,Spotify 没有给我广告费,如果你订阅了 Spotify 的任何服务,Spotify 也不会给我任何好处。


功能性系统需求


  1. 下载音乐(同一账号最多可在 5 台设备上下载 10,000 首歌曲)
  2. 推荐音乐(系统将根据算法生成量身定制的播放列表)
  3. Spotify Connect(提供在不同设备上播放音乐的授权,可以通过手机控制同一账户下的 PC 播放音乐)
  4. 发现朋友的活动,发现他们喜欢的音乐(允许关注朋友,获取朋友的实时播放内容,当链接到 Facebook、Instagram 等其他社交媒体上时,通过搜索列表可以看到朋友的推荐)
  5. 可以通过其他平台与朋友分享音乐(复制歌曲链接,嵌入代码和 Spotify URL,并分享到您的其他社交媒体应用程序)
  6. 为大部分歌曲提供歌词(Spotify 和 Genius 合作,将为精选歌曲提供歌词)
  7. 创建播放列表(可以把任何一个播放列表变成与朋友合作的播放列表,朋友可以编辑、添加、删除或者重新排序歌曲)
  8. 私密模式(朋友们将无法看到你听了什么)
  9. 适配多种设备类型(手机、平板电脑、PC、网络播放器、电视、车载音响、智能手表、游戏机、智能显示器等)
  10. 每日推荐(Daily Mixes,根据以前听过的音乐和喜欢的音乐类型创建的播放列表 = 你的音乐品味)
  11. Spotify 广播
  12. 用户可以查看收听历史
  13. 用户可以搜索想听的歌曲
  14. 随机播放
  15. 播客和娱乐节目
  16. 排序和过滤
  17. 关注喜欢的艺术家
  18. 自动播放
  19. 音乐会
  20. 音乐切换淡入淡出效果
  21. 为艺术家捐款
  22. 基于 WinAmp 的可视化
  23. 无广告
  24. 无限切歌


非功能性系统需求


  1. 可用性
  2. 可靠性
  3. 良好的性能
  4. 低延时

容量预估


  1. 活跃用户基数 = 3.65 亿
  2. 活跃付费用户基数 = 1.58 亿
  3. 低质量 = 每首歌 3MB
  4. 高质量 = 每首歌 10MB
  5. 最多可以下载一万首歌
  6. 支持超过 30 种语言
  7. 每天上传超过 6 万首歌曲
  8. 每年有 800 万名歌曲创作者
  9. 8000 个活跃的艺术家

系统组件设计

概要设计


image.png

我们的假设是:


  • 用户已经登录
  • 是否适合数百万用户
  • 用户播放特定的歌曲


1. 负载均衡


  • 维护和处理进入服务器的流量
  • 当用户访问特定歌曲时,将转到负载均衡器
  • 我们使用轮询负载均衡,以最小的流量将请求分发到服务器,从而实现低延迟


延伸阅读:

What is Round Robin Load Balancing? https://avinetworks.com/glossary/round-robin-load-balancing/


2. 发布/订阅


  • 一个消息队列系统,用于收集所有请求,然后进行处理
  • 支持 RabbitMQ、Apache Kafka
  • 当用户点击播放时,系统会处理请求,数据将被更新到艺术家服务器。用户听这首歌的次数将被存储在 Artist’s-User 数据库中,也可以在系统中添加缓存
  • 新信息将被更新到数据仓库中


3. 应用服务器生产者/应用服务器消费者


  • 生产者来自访问歌曲的客户端应用程序,应用服务器消费者读取并处理请求。生产者和消费者是完全解耦的,彼此不可知,可以实现高可伸缩性。


4. 数据仓库


  • 存储数百万或数十亿的数据(歌曲)
  • 使用 Hadoop 分布式文件系统


5. 支付网关


  • 结账 API——尝试验证支付细节并启动支付工作流,内部实现了相关状态机。
  • 计费 API——与支付服务供应商通信,向用户收费。这个 API 是支付提供者与其支付后端之间的桥梁,是支付发生时调用的第二个内部 API。

推荐算法


  • 潜在因素模型(Latent Factor Models,机器学习算法)


延伸阅读:

Latent Variable Model: https://en.wikipedia.org/wiki/Latent_variable_model


  • 潜在因素模型基于可观察变量。
  • 因为可观察变量不是固定的,因此通常比较复杂,这将带来两个问题:方程式可能无法推导出来即使把方程式整理出来,也很难应用
  • 埃里克·伯恩哈德森(Erik Bernhardsson)花了 6 年时间开发 Spotify 的首个音乐算法
  • 下面的链接分享了一些关于这个模型的深刻信息:


延伸阅读:

Model benchmarks: https://erikbern.com/2013/11/02/model-benchmarks.html


  • 该推荐系统采用基于潜在因素模型的隐式协同过滤方法来检测元素(用户、音乐、频率)的相似性。因此,类似的歌曲将被推荐给用户。
  • Erik Bernhardsson 还创建了一个开源的数据管道引擎(Luigi 和 Annoy),目前 Spotify 仍在使用这个引擎
  • 下面的延伸阅读文章包含了更进一步的信息


延伸阅读:

Annoy: https://github.com/spotify/annoy

Luigi: https://github.com/spotify/luigi


进一步学习


延伸阅读:

Spotify UX Analysis and Redesign: https://blog.prototypr.io/spotify-reverse-engineering-8f6a0d9850c8


  • Spotify 收购了音乐智能公司 Echo Nest


延伸阅读:

How to build an amazing music recommendation system: https://towardsdatascience.com/how-to-build-an-amazing-music-recommendation-system-4cce2719a572

SpotifyRecommenderSystems: https://github.com/AmolMavuduru/SpotifyRecommenderSystem

Scio, Spark and Scalding: https://spotify.github.io/scio/Scio,-Scalding-and-Spark.html


  • 推荐结果由 Apollo 编写,并由 Cassandra 提供支持


延伸阅读:

Apollo: https://github.com/spotify/apollo

Sparkey: https://github.com/spotify/sparkey


参考资料

The Best Music Streaming Services: https://www.digitaltrends.com/music/best-music-streaming-services/

Spotify Architecture: https://engineering.atspotify.com/tag/architecture/

The Brilliance of Spotify Internal APIs to Mitigate Payments: https://nordicapis.com/the-brilliance-of-spotify-internal-apis-to-mitigate-payments/

Key Spotify Statistics Driving Music Streaming Adoption in 2021:  https://www.mobileappdaily.com/spotify-stats-in-depth

Recommending music on Spotify wiht deep learning:  https://benanne.github.io/2014/08/05/spotify-cnns.html

Spotify Is Migrating from Homegrown Orchestration to Kubernetes:  https://youtu.be/pruIWWBe_1o


References:

[1] Spotify System Architecture: https://medium.com/interviewnoodle/spotify-system-architecture-6bb418db6084


目录
相关文章
|
7月前
|
XML 数据库 数据格式
微服务技术系列教程(15) - SpringCloud - 互联网网站架构演变过程
微服务技术系列教程(15) - SpringCloud - 互联网网站架构演变过程
51 0
|
22天前
|
API C++ 微服务
微服务新体验之Aspire初体验
该文指导安装Aspire项目。首先,需检查VS版本,若低于17.9.7则须更新。通过“帮助”菜单选择“检查更新”并安装。接着创建Aspire项目,然后在AspireApp1.AppHost的launchSettings.json中添加"ASPIRE_ALLOW_UNSECURED_TRANSPORT": "true"。运行AspireApp1.AppHost项目,最后访问AspireApp1.Web以查看结果。文中代码展示了如何在AspireApp1.Web中注入并调用apiservice的API。作者为吴晓阳。
54 3
微服务新体验之Aspire初体验
|
1月前
|
前端开发 JavaScript 搜索推荐
微服务项目|基于SpringCloud微服务技术的旅游信息平台的设计与实现
微服务项目|基于SpringCloud微服务技术的旅游信息平台的设计与实现
193 1
|
10月前
|
NoSQL 架构师 Java
京东T7架构师推出的电子版SpringBoot,从构建小系统到架构大系统
Java 的各种开发框架发展了很多年,影响了一代又一代的程序员,现在无论是程序员,还是架构师,使用这些开发框架都面临着两方面的挑战。 1. 一方面是要快速开发出系统,这就要求使用的开发框架尽量简单,无论是新手还是老手都能快速上手,快速掌握页面渲染、数据库访问等常用技术。也要求开发框架能尽量多地集成第 方工具,以便信手拈来。最后,还希望在开发调试过程中,方便代码更改后能快速重启。
|
7月前
|
开发框架 监控 BI
NetCore多租户开源项目,快速后台开发企业框架,赚钱就靠她了
NetCore多租户开源项目,快速后台开发企业框架,赚钱就靠她了
66 0
|
9月前
|
NoSQL Java Nacos
GitHub最火的成熟私活利器:基于微服务架构的前后端分离博客系统
博客使用了一些监控的 SpringCloud 组件,但是并不一定都需要部署,必须启动的服务包含 nacos,nginx,rabbitmq, redis,mysql,mogu-gateway,mogu-sms,mogu-picture, mogu-web, mogu-admin 其它的服务都可以不启动,也不影正常使用,可以根据自身服务器配置来启动 最低配置:1核2G 【需开启虚拟内存】【容易宕机】
|
JSON 自然语言处理 Java
「微服务架构」Google和eBay在构建微服务生态系统方面的深刻教训
「微服务架构」Google和eBay在构建微服务生态系统方面的深刻教训
|
机器学习/深度学习 存储 Devops
Spotify 高质量工程生产力实践
Spotify 高质量工程生产力实践
178 0
Spotify 高质量工程生产力实践
|
存储 缓存 搜索推荐
从 0 开始设计 Twitter 系统架构
从 0 开始设计 Twitter 系统架构
857 0
从 0 开始设计 Twitter 系统架构
|
开发框架 监控 前端开发
一个宝藏级微服务开源项目,是真的牛批!
不仅仅是一个开发架构,而是努力打造一套从 前端模板 - 基础框架 - 分布式架构 - 开源项目 - 持续集成 - 自动化部署 - 系统监测 - 无缝升级 的全方位J2EE企业级开发解决方案。
一个宝藏级微服务开源项目,是真的牛批!