Spotify Sistem dizaynı
Spotify Sistem dizaynı
Problemin Təsviri:
Spotify kimi musiqi streaming servisi dizayn etmək lazımdır. Sistem aşağıdakı əsas komponentləri dəstəkləməlidir:
- User authentication və authorization
- Musiqi və artist idarəetməsi/yükləmə
- Real-time musiqi streaming
- Statistika
Functional Requirements:
Əsas Funksiyalar:
- User Management və Authentication
- User qeydiyyatı və authentication
- Profile idarəetməsi
- Free və premium tier idarəetməsi
- Musiqi və Artist İdarəetməsi
- Artist profil idarəetməsi
- Musiqi content yükləmə və idarəetmə
- Album və mahnı metadata idarəetməsi
- Content versiyalaşdırma
- Music Streaming
- Real-time audio streaming
- Müxtəlif keyfiyyət səviyyələri (low, medium, high)
- Adaptive bitrate streaming
- Multi-device dəstəyi
- Analytics və Statistika
- Real-time streaming analytics
- Artist üçün statistika (play count, listeners)
- User engagement metrics
- Revenue tracking
Non-Functional Requirements
Performance:
- Streaming başlamaq üçün aşağı latency (< 200ms)
- Yüksək throughput (milyonlarla concurrent stream)
- 99.99% uptime availability
Scalability:
- Milyardlarla mahnı dəstəyi
- Milyonlarla concurrent user
- Petabyte səviyyəsində data
- Qlobal user base
Capacity Estimation: Fərziyyələr (Assumptions)
- 500 milyon active user
- 100 milyon daily active user (DAU)
- Hər user gündə orta hesabla 20 mahnı dinləyir
- Orta mahnı ölçüsü: 5 MB (compressed)
- Kataloqda 100 milyon mahnı
- Read:Write ratio = 1000:1
Music Content Storage:
- Total mahnılar: 100 milyon
- Hər mahnı üçün müxtəlif keyfiyyətlər:
- Low quality (96kbps): 2 MB
- Medium quality (160kbps): 3.5 MB
- High quality (320kbps): 7 MB
- Total hər mahnı: ~12.5 MB
- Total music storage: 100M × 12.5 MB = 1.25 PB
- 3x replication ilə: 3.75 PB
User Data Storage:
- 500M user × 1 KB = 500 GB
- Preferences və history: ~5 TB
Metadata Storage:
- Mahnı metadata: 100M × 5 KB = 500 GB
- Album metadata: 10M × 10 KB = 100 GB
- Artist metadata: 5M × 10 KB = 50 GB
Total Storage: ~4 PB
Bandwidth Təxmini:
Gündəlik Streaming:
- 100M DAU × 20 mahnı/gün = 2 milyard play/gün
- Orta bitrate: 160 kbps (2 MB/dəqiqə)
- Orta mahnı: 3 dəqiqə = 6 MB
- Gündəlik bandwidth: 2B × 6 MB = 12 PB/gün
- Saniyədə bandwidth: ~139 GB/s
Queries Per Second (QPS):
- Mahnı stream: ~23,000 stream/saniyə
- API calls: ~10,000 QPS
- Peak traffic: ~70,000 stream/saniyə
High-Level System Architecture
Əsas Komponentlər:
Əsas Komponentlərin Dizaynı:
User Authentication Service
Məsuliyyətlər:
- User authentication (OAuth2, JWT)
- Session management
- Subscription tier validation
- Role-based access control (RBAC)
Database Schema (PostgreSQL):
Koda bax
users:
- user_id (PK)
- email
- username
- password_hash
- subscription_type (free/premium)
- country
- created_at
- last_login
user_sessions:
- session_id (PK)
- user_id (FK)
- device_id
- refresh_token
- expires_at
- created_at
API Endpoints:
POST /api/v1/auth/register
POST /api/v1/auth/login
POST /api/v1/auth/logout
POST /api/v1/auth/refresh-token
GET /api/v1/users/{user_id}
PUT /api/v1/users/{user_id}
PUT /api/v1/users/{user_id}/preferences
Security Tədbirləri:
- Password hashing (bcrypt)
- Rate limiting authentication endpoint-lərində
- Multi-factor authentication (MFA)
- JWT token-lərin müntəzəm rotation-u
- Redis ilə session management
Flow:
- User credentials göndərir
- Service password-u verify edir
- JWT access token və refresh token yaradır
- Session Redis-də saxlanır
- Token client-ə qaytarılır
- Sonrakı request-lər JWT ilə authenticate olunur
Music və Artist Management Service
Məsuliyyətlər:
- Artist profil idarəetməsi
- Content upload və processing
- Metadata idarəetməsi
- Multiple audio format generation
- Content versioning
Database Schema (NoSQL - MongoDB/Cassandra):
Artists Collection - Koda bax
{
"artist_id": "uuid",
"name": "string",
"bio": "text",
"genres": ["array"],
"image_url": "string",
"verified": "boolean",
"created_at": "timestamp"
}
Songs Collection - Koda bax
{
"song_id": "uuid",
"title": "string",
"artist_ids": ["array"],
"album_id": "uuid",
"duration": "number (seconds)",
"genre": "string",
"release_date": "date",
"audio_files": {
"low": "s3://path/96kbps.mp3",
"medium": "s3://path/160kbps.mp3",
"high": "s3://path/320kbps.mp3"
},
"metadata": {
"bitrate": "number",
"sample_rate": "number",
"codec": "string"
},
"created_at": "timestamp",
"updated_at": "timestamp"
}
API Endpoints:
Koda bax
POST /api/v1/artists
GET /api/v1/artists/{artist_id}
PUT /api/v1/artists/{artist_id}
DELETE /api/v1/artists/{artist_id}
POST /api/v1/songs/upload
GET /api/v1/songs/{song_id}
PUT /api/v1/songs/{song_id}
DELETE /api/v1/songs/{song_id}
GET /api/v1/artists/{artist_id}/songs
POST /api/v1/albums
GET /api/v1/albums/{album_id}
PUT /api/v1/albums/{album_id}
Upload Flow:
- Artist audio file yükləyir (original quality)
- File S3/GCS-ə upload olunur
- Background job müxtəlif keyfiyyət versiyaları yaradır:
- 96kbps (low quality)
- 160kbps (medium quality)
- 320kbps (high quality)
- Hər versiya CDN-ə push olunur
- Metadata database-ə yazılır
- Search index update olunur (Elasticsearch)
- Artist-ə notification göndərilir
Content Processing Pipeline:
- Audio transcoding (FFmpeg)
- Metadata extraction
- Quality validation
- DRM encryption
- CDN distribution
Music Streaming Service
Məsuliyyətlər:
- Audio stream request-lərini idarə etmək
- User preference və network-ə görə keyfiyyət seçmək
- Playback metrics track etmək
- DRM protection implement etmək
Flow:
- Client mahnı stream request göndərir
- Service user authentication və subscription verify edir
- Cache-də audio file URL-i yoxlayır
- İstənilən keyfiyyət üçün CDN URL qaytarır
- Client birbaşa CDN-dən stream edir
- Service playback event-i asynchronous log edir
Adaptive Bitrate Streaming:
- HLS (HTTP Live Streaming) və ya DASH protocol
- Audio müxtəlif chunk-lara bölünür (2-10 saniyə)
- Client network condition-a görə quality dəyişir
- Aşağı quality ilə başlayıb yüksəlir
API Endpoints:
Koda bax
GET /api/v1/stream/{song_id}
Query params: quality (low/medium/high)
Returns: CDN signed URL
POST /api/v1/playback/start
Body: { song_id, device_id, quality }
POST /api/v1/playback/pause
POST /api/v1/playback/resume
POST /api/v1/playback/skip
POST /api/v1/playback/seek
Caching Strategy:
- Redis-də popular mahnıların metadata-sı
- CDN-də audio file-lar edge location-larda
- Client-side cache recently played mahnılar üçün
DRM Implementation:
- Encrypted audio stream-lər
- License validation playback-dan əvvəl
- Platform-specific DRM:
- Widevine (Android, Chrome)
- FairPlay (Apple devices)
- PlayReady (Microsoft)
Analytics Service
Məsuliyyətlər:
- Real-time playback event-lərini track etmək
- User engagement metrics
- Artist statistikaları
- Revenue analytics
Metrics Tracking:
- Play count (hər mahnı, artist, album)
- Monthly listeners (artist üçün)
- Skip rate
- Listening duration
- Geographic distribution
- Device type distribution
- Peak listening times
Data Pipeline:
Event Schema:
Koda bax
{
"event_id": "uuid",
"event_type": "play|pause|skip|complete",
"user_id": "uuid",
"song_id": "uuid",
"artist_id": "uuid",
"timestamp": "iso8601",
"duration_played": "seconds",
"device_type": "mobile|web|desktop",
"location": "country_code",
"quality": "low|medium|high",
"session_id": "uuid"
}
Real-time Analytics:
- Redis-də real-time counter-lar
- Windowed aggregation (1 minute, 5 minute, 1 hour)
- Hot data Redis-də, historical data warehouse-də
Artist Analytics Dashboard:
- Monthly listeners count
- Top songs by play count
- Geographic breakdown
- Demographics (age, gender)
- Listening trends (time series)
- Revenue reports (subscription və ad revenue)
API Endpoints:
Koda bax
GET /api/v1/analytics/artist/{artist_id}/overview
GET /api/v1/analytics/artist/{artist_id}/listeners
GET /api/v1/analytics/artist/{artist_id}/top-songs
GET /api/v1/analytics/artist/{artist_id}/geography
GET /api/v1/analytics/artist/{artist_id}/revenue
GET /api/v1/analytics/song/{song_id}/stats
POST /api/v1/events/playback
Body: playback event data
Batch Processing:
- Gündəlik aggregation job-ları
- Həftəlik və aylıq report generation
- Historical trend analysis
- Anomaly detection
Database Sharding
User Data Sharding:
- user_id-yə görə shard (consistent hashing)
- Hər shard user-lərin subset-ini handle edir
Music Catalog Sharding:
- song_id və ya artist_id-yə görə shard
- Popular content müxtəlif shard-larda replicate olunur
Data Flow Nümunələri
Music Upload Flow:
- Artist web interface-dən audio file upload edir
- File API Gateway vasitəsilə Upload Service-ə gedir
- Original file S3-ə temporary bucket-ə yazılır
- Upload Service Kafka-ya job message göndərir
- Processing Worker:
- File-ı download edir
- Multiple quality versiyaları yaradır (FFmpeg)
- Metadata extract edir
- DRM encryption tətbiq edir
- Final files-ları S3-ə yazır
- Database-də song record yaradır
- Elasticsearch-ə indexləyir
- CDN-ə push edir
- Artist-ə completion notification göndərilir
Music Streaming Flow:
- User mobile app-dən mahnı play edir
- Request API Gateway-ə gedir
- Authentication Service JWT verify edir
- Music Streaming Service:
- User subscription tier yoxlayır
- Redis cache-də song metadata axtarır
- Appropriate audio quality seçir
- CDN signed URL generate edir
- URL client-ə qaytarır
- Client CDN-dən birbaşa stream edir
- Playback event Kafka-ya yazılır
- Analytics Service event-i process edir:
- Play count increment edir
- Artist statistics update edir
- Real-time dashboard-ı yeniləyir
Əlavə Təkmilləşdirmələr
Aşağıdakı feature-lər sistemdə əlavə funksionallıq kimi implement edilə bilər:
- Playlist Management: User-lər playlist yarada, edit edə və share edə bilər
- Search Service: Elasticsearch ilə full-text search mahnı, artist və album üçün
- Recommendation Engine: Machine learning əsaslı personalized music recommendations
- Social Features: Follow/unfollow, music sharing, listening activity
- Offline Mode: Premium user-lər üçün download və offline playback
- Podcast Support: Podcast episode management və streaming
- Lyrics Synchronization: Time-stamped lyrics real-time göstərilməsi
- Collaborative Playlists: Multi-user playlist editing real-time
- Voice Integration: Voice commands və voice search (Alexa, Google Assistant)
- Real-time Notifications: WebSocket vasitəsilə new release, friend activity notifications