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.


Kebutuhan Non Fungsional
  • 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.
Kapasitas Sistem
  • Storage Per Day
  • Bandwidth Estimation

Use Case Diagram

Jika pengguna baru, mereka akan mendaftar terlebih dahulu dan informasi mereka akan disimpan di basis data, kemudian mereka akan memverifikasi profil. Jika pengguna sudah terdaftar, mereka akan memberikan email dan kata sandi. Di halaman utama, mereka akan melihat foto dan video, serta halaman cerita. Postingan yang baru diposting akan muncul di bagian atas. Pengguna dapat mengikuti atau berhenti mengikuti orang lain. Pengguna juga dapat melakukan siaran langsung. Semua ini tergantung pada mereka. Akan ada pengaturan di mana pengguna dapat melihat cerita masa lalu atau postingan yang telah diarsipkan. Pengguna dapat membuka blokir orang lain dan mendapatkan akun terverifikasi setelah melakukan pembayaran.

Low Level Design


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.
High Level Design



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

Popular posts from this blog

Perancangan Perangkat Lunak - Evaluasi Akhir Semester

Perancangan Perangkat Lunak - Tugas Pertemuan 11

Perancangan Perangkat Lunak - Tugas Pertemuan 10