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
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
Post a Comment