Pertemuan 13: Desain System Aplikasi Instagram
Rancangan Desain Instagram
Nama: Clarissa Luna Maheswari
NRP: 5025211003
1. Deskripsi Aplikasi
Instagram adalah platform media sosial yang memungkinkan pengguna untuk berbagi foto dan video, mengikuti teman dan akun lainnya, serta menjelajahi konten dari berbagai pengguna di seluruh dunia. Aplikasi ini juga menyediakan fitur seperti Stories, IGTV, dan Reels untuk berbagi konten secara kreatif. Instagram telah menjadi salah satu aplikasi utama dalam kehidupan sehari-hari banyak orang, termasuk saya, untuk berinteraksi dengan teman dan mengekspresikan diri melalui visual.
2. Spesifikasi Kebutuhan/Requirements
Fungsional:
- Pengguna dapat membuat akun dan login.
- Pengguna dapat mengunggah foto dan video.
- Pengguna dapat melihat, menyukai, dan mengomentari postingan orang lain.
- Pengguna dapat mengikuti dan diikuti oleh akun lain.
- Pengguna dapat mengirim pesan langsung (DM) kepada pengguna lain.
- Pengguna dapat membuat dan melihat Stories.
- Pengguna dapat membuat dan menonton IGTV serta Reels.
- Pengguna dapat mencari dan menjelajahi konten melalui fitur pencarian dan halaman Explore.
Non-Fungsional:
- Aplikasi harus responsif dan memiliki waktu muat yang cepat.
- Aplikasi harus memiliki desain antarmuka yang intuitif dan user-friendly.
- Data pengguna harus aman dan terproteksi.
- Aplikasi harus mampu menangani beban tinggi dengan banyak pengguna aktif secara bersamaan.
- Aplikasi harus kompatibel dengan berbagai perangkat dan ukuran layar.
3. Capacity Estimation
Traffic Estimates:
- Active Users: 1 juta
- Daily Active Users (DAU): 500 ribu
- Posts per user per day: 5
- Total posts per day: 2.5 juta
Perhitungan QPS (Queries per Second):
- Avg QPS: 2.5 juta / (24 jam * 3600 detik/jam) ≈ 29 requests/detik
- Peak QPS: 2 * 29 requests/detik = 58 requests/detik
Storage Estimates:
- 200 bytes for name: 200MB
- 500 bytes for photo metadata: 500MB
- 10 bytes for likes/comments: 10MB
- 2 MB per photo: 2MB
Storage untuk 1 juta pengguna:
- Total Storage: 1 juta pengguna * 2.7 MB = 2.7 TB
Bandwidth Estimates:
- Profile data fetched per request:
- 200 bytes (name)
- 500 bytes (photo metadata)
- 10 bytes (likes/comments)
- 2 MB (photo)
- Total: 2.7 MB
- Daily active users: 500 ribu
- Profile requests per user per day: 5
- Requests per day: 2.5 juta
Perhitungan Daily Bandwidth:
- Total Daily Bandwidth: 2.5 juta * 2.7 MB ≈ 6.75 TB/hari
4. High Level Design
1. Mobile & Web Apps (React Native, ReactJS)
Menyediakan antarmuka pengguna untuk berbagai platform (iOS, Android, Web).
Menangani interaksi pengguna, menampilkan konten, dan berkomunikasi dengan layanan backend.
2. API Gateway (RESTful)
Titik masuk terpusat untuk semua permintaan klien.
Meneruskan permintaan ke layanan backend yang sesuai.
Menangani autentikasi dan otorisasi menggunakan JWT.
3. Authentication Service
Mengelola pendaftaran, login, dan autentikasi pengguna.
Memastikan akses yang aman dan menghasilkan token JWT.
4. User Service
Mengelola profil pengguna, termasuk melihat dan mengedit informasi pengguna.
Menangani hubungan mengikuti dan pengikut.
5. Post Service
Mengelola pembuatan, pengambilan, dan penghapusan postingan (foto/video).
Menghasilkan feed pengguna berdasarkan hubungan mengikuti dan preferensi pengguna.
6. Media Service (AWS S3)
Menangani upload, penyimpanan, dan pengambilan file media (foto/video).
Menggunakan AWS S3 untuk penyimpanan media yang skala dan andal.
7. Comment Service
Mengelola komentar pada postingan, termasuk pembuatan, pengambilan, dan penghapusan.
Mendukung suka pada komentar.
8. Direct Message Service
Menyediakan pesan real-time antara pengguna menggunakan WebSockets (misalnya, socket.io).
Memastikan komunikasi yang aman dan pribadi.
9. Notification Service (FCM)
Mengirimkan pemberitahuan push ke pengguna untuk berbagai acara (misalnya, suka, komentar, mengikuti).
Menggunakan Firebase Cloud Messaging (FCM) untuk mengirimkan pemberitahuan.
10. Story Service
Mengelola pembuatan, pengambilan, dan kadaluarsa cerita pengguna.
Memastikan cerita tersedia selama 24 jam sebelum dihapus.
11. Reels & IGTV Service
Mengelola pembuatan, pengambilan, dan tampilan konten Reels dan IGTV.
Mendukung suka dan komentar pada video Reels dan IGTV.
12. Search Service
Menyediakan fungsionalitas pencarian untuk pengguna, postingan, tagar, dan lainnya.
Menggunakan pengindeksan dan algoritma pencarian untuk hasil pencarian yang cepat dan akurat.
13. Analytics & Reporting Service
Mengumpulkan dan menganalisis data penggunaan untuk wawasan dan pelaporan.
Menyediakan metrik dan analitik untuk keterlibatan pengguna dan kinerja sistem.
14. User Settings Service
Mengelola pengaturan dan preferensi pengguna, termasuk pengaturan privasi dan preferensi notifikasi.
15. Saved Posts Service
Memungkinkan pengguna untuk menyimpan postingan untuk dilihat nanti.
Mengelola pengambilan dan penghapusan postingan yang disimpan.
5. Low Level Design
Penjelasan Komponen:
1. Authentication Flow
Komponen:
User Interface (UI): User Login
API Gateway: Login Request
Authentication Service: Memvalidasi kredensial pengguna dan menghasilkan JWT.
User Service: Mengambil informasi pengguna.
Alur:
Pengguna memasukkan kredensial di UI.
UI mengirim permintaan login ke API Gateway.
API Gateway meneruskan permintaan login ke Authentication Service.
Authentication Service memvalidasi kredensial dan menghasilkan JWT.
API Gateway mengembalikan token JWT ke UI.
2. Uploading a Photo/Video
Komponen:
User Interface (UI): Upload Media
API Gateway: Upload Request
Post Service: Membuat catatan postingan baru.
Media Service (AWS S3): Menyimpan file media dan mengembalikan URL media.
Alur:
Pengguna memilih media dan memasukkan caption di UI.
UI mengirim permintaan upload ke API Gateway.
API Gateway meneruskan file media ke Media Service.
Media Service menyimpan file dan mengembalikan URL media.
API Gateway meneruskan URL dan caption ke Post Service.
Post Service membuat catatan postingan baru.
API Gateway mengembalikan konfirmasi ke UI.
3. Viewing Feed
Komponen:
User Interface (UI): View Feed
API Gateway: Feed Request
Post Service: Mengambil postingan dari pengguna yang diikuti.
User Service: Mengambil informasi pengguna yang diikuti.
Alur:
Pengguna meminta feed di UI.
UI mengirim permintaan feed ke API Gateway.
API Gateway meneruskan permintaan feed ke Post Service.
Post Service mengambil postingan dari pengguna yang diikuti dengan bantuan User Service.
Post Service mengembalikan postingan ke API Gateway.
API Gateway mengembalikan postingan ke UI untuk ditampilkan.
6. Database Design
Tabel:
1. Tabel User
Menyimpan informasi dasar tentang pengguna aplikasi.
Attributes dari tabel:
- user_id: string (Primary Key)
- username: string
- email: string
- password_hash: string
- profile_picture: string (URL)
- bio: string
- followers: array of user_id
- following: array of user_id
- created_at: timestamp
- updated_at: timestamp
2. Tabel Post
Menyimpan informasi tentang postingan yang dibuat oleh pengguna.
Attributes dari tabel:
- post_id: string (Primary Key)
- user_id: string (Foreign Key)
- caption: string
- media_url: string (URL)
- media_type: string (photo/video)
- likes: array of user_id
- comments: array of comment_id
- created_at: timestamp
- updated_at: timestamp
3. Tabel Comment
Menyimpan komentar yang diberikan oleh pengguna pada postingan.
Attributes dari tabel:
- comment_id: string (Primary Key)
- post_id: string (Foreign Key)
- user_id: string (Foreign Key)
- text: string
- likes: array of user_id
- created_at: timestamp
- updated_at: timestamp
4. Tabel Direct Messages
Menyimpan pesan langsung antara pengguna.
Attributes dari tabel:
- message_id: string (Primary Key)
- sender_id: string (Foreign Key)
- receiver_id: string (Foreign Key)
- text: string
- media_url: string (URL)
- created_at: timestamp
- updated_at: timestamp
5. Tabel Stories
Menyimpan cerita yang diposting oleh pengguna dan akan hilang setelah 24 jam.
Attributes dari tabel:
- story_id: string (Primary Key)
- user_id: string (Foreign Key)
- media_url: string (URL)
- media_type: string (photo/video)
- viewed_by: array of user_id
- expires_at: timestamp
- created_at: timestamp
- updated_at: timestamp
6. Tabel Reels
Menyimpan video pendek (Reels) yang diposting oleh pengguna.
Attributes dari tabel:
- reel_id: string (Primary Key)
- user_id: string (Foreign Key)
- caption: string
- media_url: string (URL)
- likes: array of user_id
- comments: array of comment_id
- created_at: timestamp
- updated_at: timestamp
7. Tabel IGTV
Menyimpan video panjang (IGTV) yang diposting oleh pengguna.
Attributes dari tabel:
- igtv_id: string (Primary Key)
- user_id: string (Foreign Key)
- title: string
- description: string
- media_url: string (URL)
- likes: array of user_id
- comments: array of comment_id
- created_at: timestamp
- updated_at: timestamp
8. Tabel Likes
Menyimpan informasi tentang siapa yang menyukai postingan atau komentar tertentu.
Attributes dari tabel:
- like_id: string (Primary Key)
- user_id: string (Foreign Key)
- post_id: string (Foreign Key)
- comment_id: string (Foreign Key, Optional)
- created_at: timestamp
9. Tabel Follows
Menyimpan informasi tentang hubungan follow antara pengguna.
Attributes dari tabel:
- follow_id: string (Primary Key)
- follower_id: string (Foreign Key)
- following_id: string (Foreign Key)
- created_at: timestamp
10. Tabel Notifications
Menyimpan informasi tentang notifikasi yang diterima pengguna.
Attributes dari tabel:
notification_id: string (Primary Key)
user_id: string (Foreign Key)
type: string (like, comment, follow, mention, etc.)
reference_id: string (ID of the related post, comment, or user)
read: boolean
created_at: timestamp
11. Tabel Hashtags
Menyimpan informasi tentang hashtag yang digunakan dalam postingan.
Attributes dari tabel:
hashtag_id: string (Primary Key)
name: string
created_at: timestamp
12. Tabel PostHashtags
Menyimpan hubungan antara postingan dan hashtag yang digunakan.
Attributes dari tabel:
post_hashtag_id: string (Primary Key)
post_id: string (Foreign Key)
hashtag_id: string (Foreign Key)
13. Tabel SavedPosts
Menyimpan informasi tentang postingan yang disimpan oleh pengguna.
Attributes dari tabel:
saved_post_id: string (Primary Key)
user_id: string (Foreign Key)
post_id: string (Foreign Key)
created_at: timestamp
14. Tabel SearchHistory
Menyimpan riwayat pencarian pengguna.
Attributes dari tabel:
search_id: string (Primary Key)
user_id: string (Foreign Key)
query: string
created_at: timestamp
15. Tabel UserSettings
Menyimpan pengaturan akun pengguna.
Attributes dari tabel:
user_settings_id: string (Primary Key)
user_id: string (Foreign Key)
privacy: string (public/private)
notifications_enabled: boolean
created_at: timestamp
updated_at: timestamp
Comments
Post a Comment