Tugas 9 : Desain System Aplikasi Instagram
Nama : Fathin Muhashibi Putra
NRP : 5025211229
Kelas : PPL - A
Desain System Aplikasi Instagram
Tugas yang diberikan pada mata kuliah Perancangan Perangkat Lunak (A), yaitu terkait Desain System Aplikasi Instagram. Berikut merupakan dokumentasinya :
A. Deskripsi Aplikasi
Instagram adalah aplikasi media sosial yang memungkinkan pengguna untuk berbagi foto dan video dengan mudah. Sebagai salah satu platform terkemuka di dunia, Instagram menawarkan berbagai fitur menarik yang mendukung kreativitas dan konektivitas antar penggunanya. Berikut adalah beberapa fitur utama dari Instagram:
- Unggah dan Bagikan Foto/Vidoe: Pengguna dapat mengambil foto atau video langsung dari aplikasi atau mengunggah dari galeri perangkat mereka, lalu membagikannya ke dalam feed atau cerita (stories).
- Filter dan Edit: Instagram menyediakan berbagai filter dan alat pengeditan yang memungkinkan pengguna untuk memperindah foto dan video mereka sebelum membagikannya.
- Stories: Fitur ini memungkinkan pengguna untuk membagikan momen-momen sehari-hari yang hilang setelah 24 jam. Stories bisa dilengkapi dengan teks, stiker, dan efek kreatif lainnya.
- IGTV: Fitur ini memungkinkan pengguna untuk mengunggah dan menonton video berdurasi panjang. Sangat cocok untuk konten video yang lebih mendalam dan terperinci.
- Reels: Reels adalah fitur yang memungkinkan pengguna membuat dan menemukan video pendek yang kreatif dan menghibur dengan musik, efek, dan alat baru.
- Explore: Melalui tab Explore, pengguna dapat menemukan konten baru yang sesuai dengan minat mereka, termasuk foto, video, dan reels dari pengguna yang tidak mereka ikuti.
- Direct Messaging (DM): Pengguna dapat berkomunikasi secara pribadi dengan teman-teman mereka melalui pesan teks, foto, video, dan panggilan video.
- Interaksi Sosial: Instagram memungkinkan pengguna untuk berinteraksi dengan cara menyukai, mengomentari, dan membagikan konten pengguna lain. Pengguna juga dapat mengikuti akun favorit mereka untuk tetap up-to-date dengan postingan terbaru.
- Hashtag dan Tag Lokasi: Pengguna dapat menggunakan hashtag dan menandai lokasi dalam postingan mereka untuk menjangkau audiens yang lebih luas dan meningkatkan visibilitas konten mereka.
- Profil dan Akun Bisnis: Pengguna dapat mengatur profil pribadi atau akun bisnis. Akun bisnis menyediakan alat analitik dan promosi untuk membantu meningkatkan jangkauan dan interaksi dengan audiens.
B. Spesifikasi Kebutuhan / Requirements
a. Functional Requirements
- Post photos and videos: Pengguna dapat memposting foto dan video di Instagram.
- Follow and unfollow users: Pengguna dapat mengikuti dan berhenti mengikuti pengguna lain di Instagram.
- Like or dislike posts: Pengguna dapat menyukai atau tidak menyukai postingan dari akun yang mereka ikuti.
- Search photos and videos: Pengguna dapat mencari foto dan video berdasarkan caption (keterangan) dan lokasi.
- Generate news feed: Pengguna dapat melihat news feed yang terdiri dari foto dan video (dalam urutan kronologis) dari semua pengguna yang mereka ikuti.
b. Non-Functional Requirements
- Scalability: Sistem harus dapat diskalakan untuk menangani jutaan pengguna dalam hal sumber daya komputasi dan penyimpanan.
- Latency: Latensi untuk menghasilkan news feed harus rendah.
- Availability: Sistem harus memiliki ketersediaan yang tinggi.
- Durability: Konten yang diunggah (foto dan video) tidak boleh hilang.
- Consistency: Kita bisa sedikit mengkompromikan konsistensi. Dapat diterima jika konten (foto atau video) membutuhkan waktu untuk muncul di feed pengikut yang berada di wilayah yang jauh.
- Reliability: Sistem harus dapat mentoleransi kegagalan perangkat keras dan perangkat lunak.
c. Additional Requirements
- Users can add tags to a photo/video: Pengguna dapat menambahkan tag ke foto/video.
- Users can put comments on a post: Pengguna dapat menambahkan komentar pada sebuah postingan.
- Users can search photo based on tags: Pengguna dapat mencari foto berdasarkan tag.
C. Capacity Estimation (Traffic dan Storage)
a. Storage Per Day (Storage)
Asumsi:
- 1,3 miliar foto dibagikan setiap hari.
- Ukuran maksimum setiap foto adalah 3 MB.
- Katakanlah, rata-rata 40 juta video dibagikan setiap hari.
- Ukuran maksimum setiap video adalah 150 MB.
Perhitungan:
- Photos:
- 1,3 miliar foto/hari * 3 MB = 3900 TB/hari
- Videos:
- 40 juta video/hari * 150 MB = 6000 TB/hari
- Total content size per day:
- 3900 TB (photos) + 6000 TB (videos) = 9900 TB/hari
- Total Space required for a Year:
- 9900 TB/hari * 365 (hari dalam setahun) = 3613500 TB = 3613.5 PB
Perhitungan:
- Total data per day:
- 9900 TB
- Incoming bandwidth estimation:
- 9900 TB/hari / (24 * 60 * 60) detik = 9900 TB / 86400 detik ≈ 114.58 GB/detik ≈ 916.64 Gbps
- Let’s say the ratio of readers to writers is 100:1.
- Required outgoing bandwidth:
- 100 * 916.64 Gbps ≈ 91.66 Tbps
c. Rekapitulasi
- Storage:
- Storage per day: 9900 TB
- Storage per year: 3613.5 PB
- Bandwidth:
- Incoming bandwidth: ≈ 916.64 Gbps
- Outgoing bandwidth: ≈ 91.66 Tbps
D. High Level Design
E. Low Level Design
User Service:
- Mengelola pendaftaran pengguna, login, autentikasi, dan manajemen profil.
- Menyimpan data pengguna seperti username, email, bio, foto profil, dll.
- Terintegrasi dengan penyedia autentikasi sosial (misalnya, Facebook, Google).
Post Service:
- Mengelola unggahan foto dan video, pengeditan, dan penghapusan.
- Menyimpan metadata postingan seperti caption, hashtags, lokasi, timestamp, dll.
- Memproses media yang diunggah untuk perubahan ukuran, penyaringan, dan pembuatan thumbnail.
- Mengelola transcoding foto dan video untuk perangkat dan resolusi yang berbeda.
Feed Service:
- Menghasilkan news feed yang dipersonalisasi untuk setiap pengguna berdasarkan siapa yang mereka ikuti, likes, aktivitas, dan interaksi mereka.
- Menggunakan sistem terdistribusi seperti Apache Kafka atau RabbitMQ untuk pembaruan dan notifikasi secara real-time.
- Memanfaatkan lapisan cache seperti Redis untuk pengambilan feed yang cepat dan mengurangi beban database.
Storage Service:
- Menyimpan foto dan video yang diunggah secara efisien dan andal.
- Menggunakan solusi penyimpanan objek yang dapat diskalakan seperti Amazon S3, Google Cloud Storage, atau Azure Blob Storage.
- Menerapkan mekanisme redundansi dan pemulihan bencana untuk perlindungan data.
Search Service:
- Memungkinkan pencarian pengguna, hashtags, dan lokasi.
- Mengindeks pengguna, postingan, dan hashtags berdasarkan parameter yang relevan.
- Menggunakan algoritma pengindeksan dan pencarian yang efisien untuk hasil yang cepat dan akurat.
Comment Service:
- Mengelola penambahan, pengeditan, dan penghapusan komentar pada postingan.
- Melacak thread komentar dan hubungan parent-child.
- Memberi tahu pengguna tentang komentar baru pada postingan mereka atau komentar yang mereka ikuti.
Notification Service:
- Memberi tahu pengguna tentang acara yang relevan seperti likes, komentar, sebutan, dan follows.
- Mengirim notifikasi ke perangkat mobile melalui platform seperti Firebase Cloud Messaging atau Amazon SNS.
- Menggunakan sistem antrian untuk pengiriman notifikasi secara asinkron.
Analytics Service:
- Melacak keterlibatan pengguna, kinerja postingan, dan penggunaan platform secara keseluruhan.
- Mengumpulkan data tentang views, likes, komentar, shares, dan clicks.
- Memberikan wawasan untuk meningkatkan pengalaman pengguna, mengoptimalkan rekomendasi konten, dan menargetkan iklan.
Caching:
- Caching data untuk menangani jutaan bacaan. Ini meningkatkan pengalaman pengguna dengan mempercepat proses pengambilan data.
- Kita juga akan memilih lazy loading, yang meminimalkan waktu tunggu klien. Ini memungkinkan kita untuk memuat konten saat pengguna menggulir, sehingga menghemat bandwidth dan fokus pada pemuatan konten yang saat ini dilihat oleh pengguna.
- Ini meningkatkan latensi untuk melihat atau mencari foto atau video tertentu di Instagram.
F. Database Design
a. Desain Database
b. Implementasi SQL Database
- Digunakan untuk menyimpan informasi tentang pengguna aplikasi (user).
- Kolom ID adalah primary key (kunci utama) yang secara otomatis bertambah nilai (auto increment).
- first_name, last_name, profile_name adalah kolom-kolom yang menyimpan nama dan nama profil pengguna.
- signup_date adalah tanggal dan waktu saat pengguna mendaftar.
- Mengelola jenis-jenis postingan yang dapat dibuat oleh pengguna.
- ID adalah primary key.
- post_type_name adalah nama dari jenis postingan.
- Berisi daftar filter yang dapat digunakan untuk postingan gambar atau video.
- ID adalah primary key.
- filter_name adalah nama dari filter.
- filter_details berisi informasi tambahan tentang filter tersebut.
- Menyimpan detail postingan yang dibuat oleh pengguna.
- ID adalah primary key.
- created_by_user_id adalah foreign key yang menghubungkan postingan ke pengguna yang membuatnya (app_user).
- created_datetime adalah tanggal dan waktu ketika postingan dibuat.
- caption adalah teks atau deskripsi dari postingan.
- post_type_id adalah foreign key yang menghubungkan postingan ke jenis postingan (post_type).
- Berisi media (gambar, video) yang terkait dengan suatu postingan.
- ID adalah primary key.
- post_id adalah foreign key yang menghubungkan media ke postingan (post).
- filter_id adalah foreign key yang menghubungkan media ke filter yang digunakan (filter).
- media_file, position, longitude, latitude adalah kolom-kolom yang menyimpan informasi media.
- Menyimpan daftar efek atau filter tambahan yang dapat diterapkan pada media.
- ID adalah primary key.
- effect_name adalah nama efek atau filter.
- Menyimpan komentar yang dibuat oleh pengguna pada suatu postingan.
- ID adalah primary key.
- created_by_user_id adalah foreign key yang menghubungkan komentar ke pengguna yang membuatnya (app_user).
- post_id adalah foreign key yang menghubungkan komentar ke postingan yang dikomentari (post).
- created_datetime adalah tanggal dan waktu ketika komentar dibuat.
- comment adalah teks dari komentar itu sendiri.
- comment_replied_to_id adalah foreign key yang menghubungkan komentar balasan ke komentar yang dikomentari (comment).
- Menyimpan reaksi atau respons pengguna terhadap suatu postingan.
- user_id adalah foreign key yang menghubungkan reaksi ke pengguna yang memberikan reaksi (app_user).
- post_id adalah foreign key yang menghubungkan reaksi ke postingan yang diberi reaksi (post).
- Menyimpan informasi tentang tag pengguna pada media postingan.
- post_media_id adalah foreign key yang menghubungkan tag ke media postingan (post_media).
- user_id adalah foreign key yang menghubungkan tag ke pengguna yang ditandai (app_user).
- x_coordinate, y_coordinate adalah koordinat di mana pengguna ditandai pada media tersebut.
- Mengelola efek tambahan yang diterapkan pada media postingan.
- post_media_id adalah foreign key yang menghubungkan efek ke media postingan (post_media).
- effect_id adalah foreign key yang menghubungkan efek ke jenis efek yang diterapkan (effect).
- Menyimpan informasi tentang pengguna yang mengikuti pengguna lain di aplikasi.
- following_user_id adalah foreign key yang menghubungkan pengguna yang melakukan pengikut (app_user).
- followed_user_id adalah foreign key yang menghubungkan pengguna yang diikuti (app_user).
G. API Design
Berikut adalah desain API untuk sistem Instagram berdasarkan desain database yang telah dibuat sebelumnya:
1. Post Photos and Videos
Endpoints:
- POST /media: Submits a new photo or video.
- PUT /media/{media_id}: Updates existing metadata for a media item.
- DELETE /media/{media_id}: Deletes a media item.
- POST /media: Endpoint ini digunakan untuk mengunggah foto atau video baru. Permintaan ini mengirimkan file media, keterangan (caption), hashtag, dan lokasi.
- PUT /media/{media_id}: Endpoint ini digunakan untuk memperbarui metadata media yang ada.
- DELETE /media/{media_id}: Endpoint ini digunakan untuk menghapus media yang ada.
- POST /users/{user_id}/follow: Follows the specified user.
- DELETE /users/{user_id}/follow: Unfollows the specified user.
- GET /users/{user_id}/following: Retrieves a list of users followed by the specified user (paginated).
- GET /users/{user_id}/followers: Retrieves a list of users following the specified user (paginated).
- POST /users/{user_id}/follow: Endpoint ini digunakan untuk mengikuti pengguna tertentu.
- DELETE /users/{user_id}/follow: Endpoint ini digunakan untuk berhenti mengikuti pengguna tertentu.
- GET /users/{user_id}/following: Endpoint ini digunakan untuk mendapatkan daftar pengguna yang diikuti oleh pengguna tertentu.
- GET /users/{user_id}/followers: Endpoint ini digunakan untuk mendapatkan daftar pengguna yang mengikuti pengguna tertentu.
Endpoints:
- GET /posts/{post_id}: Retrieves details of a post, including the number of likes/dislikes.
- POST /posts/{post_id}/like: Registers a like for the post by the authenticated user.
- POST /posts/{post_id}/dislike: Registers a dislike for the post by the authenticated user.
- DELETE /posts/{post_id}/like: Removes the like for the post by the authenticated user (if previously done).
- DELETE /posts/{post_id}/dislike: Removes the dislike for the post by the authenticated user (if previously done).
- GET /posts/{post_id}: Endpoint ini digunakan untuk mengambil detail dari sebuah postingan, termasuk jumlah like/dislike.
- POST /posts/{post_id}/like: Endpoint ini digunakan untuk memberikan like pada sebuah postingan.
- POST /posts/{post_id}/dislike: Endpoint ini digunakan untuk memberikan dislike pada sebuah postingan.
- DELETE /posts/{post_id}/like: Endpoint ini digunakan untuk menghapus like dari sebuah postingan.
- DELETE /posts/{post_id}/dislike: Endpoint ini digunakan untuk menghapus dislike dari sebuah postingan.
- POST /search: Endpoint ini digunakan untuk mencari media berdasarkan parameter pencarian seperti jenis media (foto atau video) dan kueri pencarian.
Referensi :
https://kuliahppl.blogspot.com/2024/06/desain-system-aplikasi-instagram.html
https://www.geeksforgeeks.org/design-instagram-a-system-design-interview-question/
https://nikhilgupta1.medium.com/instagram-system-design-f62772649f90


Comments
Post a Comment