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)





    Berikut merupakan perhitungan Capacity Estimation (Traffic dan Storage) yang sesuai berdasarkan fakta bahwa "Sekitar 1,3 miliar foto dibagikan di Instagram setiap hari pada tahun 2024" dan "2,4 miliar pengguna aktif di Instagram pada tahun 2024".

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

b. Bandwidth Estimation (Traffic)

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

    Sistem kita harus memungkinkan pengguna untuk mengunggah, melihat, dan mencari gambar dan video pada High Level. Untuk mengunggah gambar dan video, kita perlu menyimpannya, dan saat mengambilnya, kita perlu mengambil data dari penyimpanan. Selain itu, pengguna juga harus diizinkan untuk saling mengikuti.


Pada High level, Instagram dapat dilihat sebagai sistem dengan komponen dan interaksi utama berikut:

Komponen:

  1. Client: Aplikasi mobile, aplikasi web, dan API yang menyediakan antarmuka bagi pengguna untuk berinteraksi dengan sistem.
  2. Authentication & Authorization: Mengelola login pengguna, pendaftaran, dan kontrol akses.
  3. Content Management: Mengelola konten yang dibuat pengguna seperti foto, video, siaran langsung, cerita, dan pesan.
  4. Feed Generation: Personalisasi news feed untuk setiap pengguna berdasarkan siapa yang mereka ikuti, aktivitas, dan interaksi mereka.
  5. Social Graph: Melacak hubungan antara pengguna (mengikuti, pengikut, teman).
  6. Discovery & Search: Memungkinkan pencarian pengguna, hashtag, lokasi, dan konten.
  7. Notifications: Memberi tahu pengguna tentang acara yang relevan seperti likes, komentar, sebutan, dan follow.
  8. Analytics & Reporting: Melacak keterlibatan pengguna, kinerja konten, dan penggunaan platform secara keseluruhan.

Interaksi:

  1. User creates content:

    • Client mengunggah foto/video.
    • Content Management menyimpan media dan metadata.
    • Feed Generation memperbarui feed pengguna dan pengikut yang relevan.
    • Notifications memberi tahu pengguna yang tertarik.
  2. User interacts with content:

    • Client mengirim tindakan like/komentar/share.
    • Content Management dan Social Graph memperbarui data yang relevan.
    • Feed Generation mungkin mengatur ulang feed berdasarkan interaksi baru.
    • Notifications memberi tahu pengguna yang tertarik.
  3. User discovers new content:

    • Client menggunakan fungsi pencarian.
    • Discovery & Search mengidentifikasi konten yang relevan.
    • Client menampilkan hasil pencarian.
  4. User manages connections:

    • Client mengirim permintaan follow/unfollow.
    • Social Graph memperbarui koneksi.
    • Feed Generation menyesuaikan berdasarkan perubahan hubungan.
  5. User monitors activity:

    • Client memeriksa feed notifikasi.
    • Notifications memberikan pembaruan tentang acara yang relevan.

Pertimbangan Desain Utama:

  1. Scalability: Sistem harus dapat menangani jutaan pengguna dan volume data yang besar.
  2. Performance: Memberikan waktu respons yang cepat untuk interaksi pengguna dan pengiriman konten.
  3. Reliability: Memastikan ketersediaan tinggi dan mencegah kehilangan data.
  4. Security: Melindungi data dan privasi pengguna.
  5. Engagement: Merancang fitur yang mendorong interaksi pengguna dan pembuatan konten.

E. Low Level Design

Berikut adalah rincian komponen dan interaksi utama untuk desain tingkat rendah (LLD) Instagram:

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

    Desain Database tersebut saya buat dengan "https://dbdiagram.io/d/" sebagai berikut : 


Code database design dbdigram:




b. Implementasi SQL Database

    Untuk mengimplementasikan Desain Database tersebut, saya menggunakan MySQL sebagi berikut :


Code SQL database Design MySQL :



c. Penjelasan

    Berikut merupakan penjelasan untuk setiap tabel, fitur(kolom), dan relasinya:

1. Tabel app_user:
  • 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.
2. Tabel post_type:
  • Mengelola jenis-jenis postingan yang dapat dibuat oleh pengguna.
  • ID adalah primary key.
  • post_type_name adalah nama dari jenis postingan.
3. Tabel filter:
  • 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.
4. Tabel post:
  • 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).
5. Tabel post_media:
  • 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.
6. Tabel effect:
  • Menyimpan daftar efek atau filter tambahan yang dapat diterapkan pada media.
  • ID adalah primary key.
  • effect_name adalah nama efek atau filter.
7. Tabel comment:
  • 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).
8. Tabel reaction:
  • 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).
9. Tabel post_media_user_tag:
  • 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.
10. Tabel post_effect:
  • 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).
11. Tabel follower:
  • 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.

Penjelasan : 
  • 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.


2. Follow and Unfollow Users

Endpoints:
  • 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).

Penjelasan : 
  • 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.


3. Like or Dislike Posts

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).

Penjelasan :
  • 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.


4. Search Photos and Videos

Endpoints:
  • POST /search: Searches for media items based on query parameters.

Penjelasan :
  • POST /search: Endpoint ini digunakan untuk mencari media berdasarkan parameter pencarian seperti jenis media (foto atau video) dan kueri pencarian.


G. User-Interface Design
    Berikut merupakan design antar muka dari aplikasi Instagram : 

1. Authorization


2. Main


3. Profile




4. Menu Profile




5. Search


6. Likes


7. Direct Messages


8. Story



9. Live


10. IGTV




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

https://www.enjoyalgorithms.com/blog/design-instagram

https://highscalability.com/designing-instagram/

Comments

Popular posts from this blog

Tugas 2: Membuat Aplikasi Hello World menggunakan Jetpack Compose (PPB - A)

Tugas 1: Review Perkembangan Teknologi Perangkat Bergerak (PPB - A)

ETS - Evaluasi Tengah Semester: Proyek - Mobile Front End