3. What is Spotify?
• On-demand music streaming service
• Available in 7 European countries
• Over 13 million tracks
• Over 1 million paying users
• Over 10 million total users
• Legal
• Really fast
4. Business idea
• Free ad-funded version
• Paid subscription where users get:
• No advertisements
• Mobile access
• Offline playback
• API access
5. “music itself is going to become
like running water or electricity”
David Bowie, 2002
6. Accessibility
• People should be able to enjoy music
• Whenever they want
• Wherever they are
• Whatever they’re doing
12. Latency sucks
• High latency can be a problem, not only in
First Person Shooters
• Slow performance is one of the major
reasons users abandon services
• Users don't come back
How to avoid it?
13. Repeating songs?
• Player caches tracks it has played
• Default policy is to use 10% of free space
(capped at 10 GB)
• Caches are large (56% are over 5 GB)
• LRU policy for cache eviction
14. Streaming
• Request first piece from Spotify servers
• Meanwhile, search for peers with track
• Download data in-order
• When buffers are sufficient, switch to P2P
• Towards end of a track, prefetch next one
15. When to start playing?
• Trade off between stutter & latency
• Look at last 15 min of transfer rates
• Model as Markov chain and simulate
• Coupled with some heuristics
16. How well does it work?
• Current median latency to begin playing a
track in Spotify is 265ms
• Due to disk lookup, at times it's actually
faster to start playing a track from network
than from disk
• Below 1% of playbacks experienced stutter
17. Spotify is fast, we get it,
but you must have cool
infrastructure, right?
18.
19. Production storage
• Production storage is a cache with fast
drives & lots of RAM
• Serves the most popular content
• A cache miss will generate a request to
master storage, slightly higher latency
• Production storage is available in several
data centers to ensure closeness to the
user (latency wise)
20. Master storage
• Works as a DHT, with some redundancy
• Contains all available tracks but has slower
drives and access
• Tracks are kept in several formats, adding
up to around 290TB
21.
22. Why P2P?
• Easier to scale
• Less servers
• Less bandwidth
• Better uptime
• Less costs
• Cool!
23. P2P overview
• Not a piracy network, all tracks are added
by Spotify
• Used on all desktop clients
• All nodes are equal (no super nodes)
• A track is downloaded from several peers
24. P2P custom protocol
• Ask for most urgent pieces first
• If a peer is slow, re-request from new
peers
• When buffers run low, download from
central servers
• If loading from servers, estimate at what
point P2P will catch up
25. P2P resource usage
We care a lot about user experience, so we:
• Cap number of neighbors
• Cap number of simultaneous uploads
• If buffers are very low, stop uploading
• Cap cache size
• Mobile clients don’t participate in P2P
26. P2P finding peers
• Partial central tracker (BitTorrent-style)
• Broadcast query in small neighborhood
(Gnutella-style)
• Two mechanisms results in higher
availability
• Limited broadcast for local (LAN) peer
discovery (cherry on top...)
27. Security
• P2P network needs to be safe and trusted
• All peers should be trusted Spotify clients
• Our client needs to be able to read
metadata and play music
• But we have to prevent reverse
engineering from doing the same
Security trough obscurity: we don't openly
discuss the details…
28. …but here’s a few tips
• Closed environment
• Integrity of downloaded files is checked
• Data transfers are encrypted
• Usernames are not exposed in P2P
network, all peers assigned pseudonym
• Software obfuscation, makes life difficult for
reverse engineers
30. So, what's the
outcome?
• At over 10 million users the responses are:
• 55.4% from client cache
• 35.8% from the P2P network
• 8.8% from the servers
31.
32. Not enough info?
If you would like to know more:
• Get in touch with us
• Checkout Gunnar Kreitz's slides and
academic papers on the subject:
http://kreitz.se/spotify-p2p10/
33. Oh btw,
we have a
lotta fun
as well! :D
spotify.com/jobs
jobs@spotify.com