Desain Sistem Aplikasi Instagram

Pertemuan 13 - Desain Sistem Aplikasi Instagram

Nama: Rayhan Almer Kusumah

NRP: 5025211115

Kelas: Perancangan Perangkat Lunak (A)

Tahun: 2024

Desain Sistem Aplikasi Instagram

Deskripsi Aplikasi

Instagram adalah platform media sosial yang memungkinkan pengguna untuk berbagi foto dan video, serta berinteraksi dengan pengguna lainnya melalui fitur komentar, suka, dan pesan langsung. Aplikasi ini memiliki fokus kuat pada visual, dengan aliran berita yang didasarkan pada konten yang diunggah oleh pengguna yang diikuti.

Spesifikasi Kebutuhan / Requirements

Kebutuhan Fungsional
  • Memposting foto dan video: Pengguna dapat memposting foto dan video di Instagram. 
  • Mengikuti dan tidak mengikuti pengguna lain: Pengguna dapat mengikuti dan tidak mengikuti pengguna lain di Instagram. 
  • Menyukai atau tidak menyukai posting: Pengguna dapat menyukai atau tidak menyukai posting dari akun yang mereka ikuti. 
  • Mencari foto dan video: Pengguna dapat mencari foto dan video berdasarkan keterangan dan lokasi. 
  • Menghasilkan berita feed: Pengguna dapat melihat berita feed yang terdiri dari foto dan video (berdasarkan urutan kronologis) dari semua pengguna yang mereka ikuti.
Kebutuhan Non-Fungsional
  • Latensi: Latensi untuk menghasilkan berita feed harus rendah. 
  • Ketersediaan: Sistem harus sangat tersedia. 
  • Daya Tahan: Setiap konten yang diunggah (foto dan video) tidak boleh hilang. 
  • Konsistensi: Kita dapat mengorbankan sedikit konsistensi. Dapat diterima jika konten (foto atau video) membutuhkan waktu untuk muncul di feed pengikut yang berada di wilayah yang jauh. 
  • Keandalan: Sistem harus dapat mentolerir kegagalan perangkat keras dan perangkat lunak.

Capacity Estimation

Instagram memiliki 1 miliar pengguna, dengan 500 juta pengguna aktif harian. Diasumsikan 60 juta foto dan 35 juta video dibagikan di Instagram setiap hari. Kita dapat menganggap 3 MB sebagai ukuran maksimum untuk setiap foto dan 150 MB sebagai ukuran maksimum untuk setiap video yang diunggah di Instagram. Rata-rata, setiap pengguna mengirim 20 permintaan (dalam bentuk apa pun) per hari ke layanan Instagram.

Penyimpanan Per Hari 

Foto: 60 juta foto/hari * 3 MB = 180 TeraByte / hari 

Video: 35 juta video/hari * 150 MB = 5250 TB / hari 

Total ukuran konten = 180 + 5250 = 5430 TB 

Total Space yang Diperlukan dalam Setahun: 

5430 TB/hari * 365 (hari dalam setahun) = 1981950 TB = 1981.95 PetaByte

Estimasi Bandwidth 

5430 TB/(24 * 60 * 60) = 5430 TB/86400 detik ~= 62.84 GB/detik ~= 502.8 Gbps 

Bandwidth masuk ~= 502.8 Gbps 

Misalkan rasio pembaca terhadap penulis adalah 100:1. 

Bandwidth keluar yang diperlukan ~= 100 * 502.8 Gbps ~= 50.28 Tbps

Use Case Diagram



Low Level Design



User Service:
  • Menangani pendaftaran pengguna, login, autentikasi, dan manajemen profil.
  • Menyimpan data pengguna seperti nama pengguna, email, bio, foto profil, dll.
  • Terintegrasi dengan penyedia autentikasi sosial (misalnya, Facebook, Google).

Post Service:

  • Menangani unggahan foto dan video, pengeditan, dan penghapusan.
  • Menyimpan metadata posting seperti keterangan, hashtag, lokasi, stempel waktu, dll.
  • Memproses media yang diunggah untuk mengubah ukuran, filter, dan pembuatan thumbnail.
  • Mengelola transkoding foto dan video untuk perangkat dan resolusi yang berbeda.

Feed Service:

  • Menghasilkan feed berita yang dipersonalisasi untuk setiap pengguna berdasarkan siapa yang mereka ikuti, suka, aktivitas, dan keterlibatan mereka.
  • Memanfaatkan sistem terdistribusi seperti Apache Kafka atau RabbitMQ untuk pembaruan dan notifikasi waktu nyata.
  • Menggunakan lapisan cache seperti Redis untuk pengambilan feed yang cepat dan mengurangi beban database.

Storage Service:

  • Menyimpan foto dan video yang diunggah dengan efisien dan andal.
  • Memanfaatkan 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, hashtag, dan lokasi.
  • Mengindeks pengguna, posting, dan hashtag berdasarkan parameter yang relevan.
  • Menggunakan algoritma pengindeksan dan pencarian yang efisien untuk hasil yang cepat dan akurat.

Comment Service:

  • Menangani penambahan, pengeditan, dan penghapusan komentar pada posting.
  • Melacak utas komentar dan hubungan induk-anak.
  • Memberi tahu pengguna tentang komentar baru pada posting mereka sendiri atau komentar yang mereka ikuti.

Notification Service:

  • Memberi tahu pengguna tentang acara yang relevan seperti suka, komentar, sebutan, dan pengikut.
  • Mendorong notifikasi ke perangkat seluler melalui platform seperti Firebase Cloud Messaging atau Amazon SNS.
  • Memanfaatkan sistem antrian untuk pengiriman notifikasi secara asinkron.

Analytics Service:

  • Melacak keterlibatan pengguna, kinerja posting, dan penggunaan platform secara keseluruhan.
  • Mengumpulkan data tentang tampilan, suka, komentar, berbagi, dan klik.
  • Memberikan wawasan untuk meningkatkan pengalaman pengguna, mengoptimalkan rekomendasi konten, dan menargetkan iklan.

High Level Design


Komponen:
  • Klien: Aplikasi seluler, aplikasi web, dan API yang menyediakan antarmuka bagi pengguna untuk berinteraksi dengan sistem. 
  • Autentikasi & Otorisasi: Menangani login pengguna, pendaftaran, dan kontrol akses. 
  • Manajemen Konten: Mengelola konten buatan pengguna seperti foto, video, siaran langsung, cerita, dan pesan. 
  • Generasi Feed: Memersonalisasi feed berita untuk setiap pengguna berdasarkan siapa yang mereka ikuti, aktivitas, dan keterlibatan mereka. 
  • Graf Sosial: Melacak hubungan antara pengguna (mengikuti, pengikut, teman). 
  • Penemuan & Pencarian: Memungkinkan pencarian pengguna, hashtag, lokasi, dan konten. 
  • Notifikasi: Memberi tahu pengguna tentang acara yang relevan seperti suka, komentar, sebutan, dan pengikut. 
  • Analitik & Pelaporan: Melacak keterlibatan pengguna, kinerja konten, dan penggunaan platform secara keseluruhan.
Interaksi:

Pengguna membuat konten:

  • Klien mengunggah foto/video.
  • Manajemen Konten menyimpan media dan metadata.
  • Generasi Feed memperbarui feed pengguna dan pengikut yang relevan.
  • Notifikasi memberi tahu pengguna yang tertarik.

Pengguna berinteraksi dengan konten:

  • Klien mengirim tindakan suka/komentar/bagikan.
  • Manajemen Konten dan Graf Sosial memperbarui data yang relevan.
  • Generasi Feed mungkin mengatur ulang feed berdasarkan interaksi baru.
  • Notifikasi memberi tahu pengguna yang tertarik.

Pengguna menemukan konten baru:

  • Klien menggunakan fungsi pencarian.
  • Penemuan & Pencarian mengidentifikasi konten yang relevan.
  • Klien menampilkan hasil pencarian.

Pengguna mengelola koneksi:

  • Klien mengirim permintaan ikuti/tidak ikuti.
  • Graf Sosial memperbarui koneksi.
  • Generasi Feed menyesuaikan berdasarkan perubahan hubungan.

Pengguna memantau aktivitas:

  • Klien memeriksa feed notifikasi.
  • Notifikasi memberikan pembaruan tentang acara yang relevan.

Database Design

User

Table untuk menyimpan data user.

  • userId: string [HashKey]
  • name: string
  • emailId: string
  • creationDateInUtc: long
User Follows

Table untuk menyimpan data follower.

  • followingUserId_followerUserId: string [HashKey]
  • followingUserId: string [RangeKey]
  • followerUserId: string
  • creationDateInUtc: long
User Uploads

Table untuk menyimpan user upload.

  • uploadId: string [HashKey]
  • userId: string [RangeKey]
  • imageLocation: string
  • uploadDateInUtc: long
  • caption: string
User Feed

Table untuk menyimpan data feed user.

  • userId: string [HashKey]
  • uploadId: string
  • creationDateInUtc: long [RangeKey]

Referensi: https://www.geeksforgeeks.org/design-instagram-a-system-design-interview-question/

Comments

Popular posts from this blog

ETS Perancangan Perangkat Lunak

High Level Design