Perancangan Perangkat Lunak - Tugas Pertemuan 13
Tugas Pertemuan 13
Al-Ferro Yudisthira Putra
5025211176
Mata Kuliah PPL (A)
Desain Sistem Aplikasi Instagram
Instagram merupakan platform media sosial populer yang memfokuskan diri pada konten visual, memungkinkan penggunanya untuk berbagi foto dan video dengan mudah. Pengguna dapat saling berinteraksi melalui komentar, suka, dan pesan langsung, membangun koneksi dan komunitas dalam platform ini.
Spesifikasi Kebutuhan atau Requirements
Kebutuhan Fungsional
- Memposting foto dan video: Pengguna dapat melakukan post foto dan video di aplikasi Instagram
- Mengikuti dan berhenti mengikuti pengguna: Pengguna dapat mengikuti dan berhenti mengikuti (follow/unfollow) pengguna lain di Instagram.
- Menyukai atau tidak menyukai postingan: Pengguna dapat menyukai atau tidak menyukai postingan dari akun yang mereka ikuti.
- Mencari foto dan video: Pengguna dapat mencari foto dan video berdasarkan keterangan dan lokasi.
- Menghasilkan feed berita: Pengguna dapat melihat feed berita yang terdiri dari foto dan video (secara kronologis) dari semua pengguna yang mereka ikuti.
- Skalabilitas: Sistem harus dapat diskalakan untuk menangani jutaan pengguna dalam hal sumber daya komputasi dan penyimpanan.
- Latensi: Latensi untuk menghasilkan feed berita harus rendah.
- Ketersediaan: Sistem harus memiliki ketersediaan yang tinggi.
- Daya Tahan: Konten yang diunggah (foto dan video) tidak boleh hilang.
- Konsistensi: Kita bisa sedikit mengorbankan konsistensi. Dapat diterima jika konten (foto atau video) memerlukan waktu untuk muncul di feed pengikut yang berada di wilayah yang jauh.
- Keandalan: Sistem harus mampu mentoleransi kegagalan perangkat keras dan perangkat lunak.
- Storage Per Day
- Bandwidth Estimation
Layanan Pengguna:
- Menangani pendaftaran, login, autentikasi, dan manajemen profil pengguna.
- Menyimpan data pengguna seperti nama pengguna, email, bio, foto profil, dll.
- Terintegrasi dengan penyedia autentikasi sosial (misalnya, Facebook, Google).
Layanan Postingan:
- Menangani unggahan, pengeditan, dan penghapusan foto dan video.
- Menyimpan metadata postingan seperti keterangan, tagar, lokasi, cap waktu, dll.
- Memproses media yang diunggah untuk pengubahan ukuran, penyaringan, dan pembuatan thumbnail.
- Mengelola transkoding foto dan video untuk berbagai perangkat dan resolusi.
Layanan Feed:
- Menghasilkan feed berita yang dipersonalisasi untuk setiap pengguna berdasarkan pengikut, suka, aktivitas, dan keterlibatan mereka.
- Menggunakan sistem terdistribusi seperti Apache Kafka atau RabbitMQ untuk pembaruan dan notifikasi real-time.
- Memanfaatkan lapisan cache seperti Redis untuk pengambilan feed yang cepat dan mengurangi beban database.
Layanan Penyimpanan:
- Menyimpan foto dan video yang diunggah dengan 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.
Layanan Pencarian:
- Memungkinkan pencarian pengguna, tagar, dan lokasi.
- Mengindeks pengguna, postingan, dan tagar berdasarkan parameter yang relevan.
- Menggunakan algoritma pengindeksan dan pencarian yang efisien untuk hasil yang cepat dan akurat.
Layanan Komentar:
- Menangani penambahan, pengeditan, dan penghapusan komentar pada postingan.
- Melacak thread komentar dan hubungan parent-child.
- Memberi notifikasi kepada pengguna tentang komentar baru pada postingan mereka sendiri atau komentar yang mereka ikuti.
Layanan Notifikasi:
- Memberi tahu pengguna tentang acara yang relevan seperti suka, komentar, penyebutan, dan pengikut.
- Mengirim notifikasi ke perangkat mobile melalui platform seperti Firebase Cloud Messaging atau Amazon SNS.
- Menggunakan sistem antrian untuk pengiriman notifikasi asinkron.
Layanan Analitik:
- Melacak keterlibatan pengguna, kinerja postingan, 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.
Mengapa kita memerlukan caching untuk menyimpan data?
- Cache data untuk menangani jutaan pembacaan. Ini meningkatkan pengalaman pengguna dengan mempercepat proses pengambilan. Kita juga akan memilih lazy loading, yang meminimalkan waktu tunggu klien.
- Ini memungkinkan kita memuat konten saat pengguna menggulir dan dengan demikian menghemat bandwidth dan fokus pada pemuatan konten yang sedang dilihat pengguna. Ini meningkatkan latensi untuk melihat atau mencari foto atau video tertentu di Instagram.
Kita memerlukan tabel-tabel berikut untuk menyimpan data:
Pengguna: Tabel untuk menyimpan data pengguna – Users
{ userId: string[HashKey], name: string, emailId: string, creationDateInUtc: long}
Pengguna_Mengikuti: Tabel untuk menyimpan data pengikut – User_follows
{ followingUserId_followerUserId: string [HashKey], followingUserId: string [RangeKey], followerUserId: string, creationDateInUtc: long}
Unggahan Pengguna: Tabel untuk menyimpan unggahan pengguna – User_uploads
{ uploadId: string[HashKey], userId: string[RangeKey], imageLocation: string, uploadDateInUtc: long, caption: string}
Feed Pengguna: Tabel untuk menyimpan data feed pengguna – User_feed
{ userId: string[HashKey], uploadId: string, creationDateInUtc: long[RangeKey]}
Comments
Post a Comment