TUGAS 9 PPL - Desain System

Nama: Muhammad Hafidh Rosyadi
NRP: 5025211013
Kelas: PPL A 
Tahun: 2023/2024 (Genap)
 
 Pada pertemuan ini , kita diminta untuk membuat rancangan sistem desain aplikasi Instagram.

Design Sistem Instagram

 Deskripsi Aplikasi

Instagram adalah platform media sosial yang memungkinkan pengguna untuk berbagi foto dan video, serta berinteraksi dengan konten dari pengguna lain. Diluncurkan pada Oktober 2010 oleh Kevin Systrom dan Mike Krieger, Instagram kini dimiliki oleh Meta Inc. Platform ini menekankan visualisasi melalui gambar dan video dengan fitur-fitur interaktif yang kaya.
 

 Requirements Instagram

2.1 Fungsional Requirements untuk Desain Sistem Instagram

  • Posting foto dan video: Pengguna dapat memposting foto dan video di Instagram.
  • Mengikuti dan berhenti mengikuti pengguna: Pengguna dapat mengikuti dan berhenti mengikuti 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 (dalam urutan kronologis) dari semua pengguna yang mereka ikuti.

2.2 Non-Fungsional Requirements untuk Desain Sistem Instagram

  • Skalabilitas: Sistem harus skalabel untuk menangani jutaan pengguna dalam hal sumber daya komputasi dan penyimpanan.
  • Latensi: Latensi untuk menghasilkan feed berita harus rendah.
  • Ketersediaan: Sistem harus sangat tersedia.
  • Daya tahan: Konten yang diunggah (foto dan video) tidak boleh hilang.
  • Konsistensi: Kita bisa sedikit berkompromi pada 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.

Estimasi Kapasitas untuk Desain Sistem Instagram

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

3.1 Penyimpanan Per Hari

  • Foto: 60 juta foto/hari * 3 MB = 180 Terabyte/hari
  • Video: 35 juta video/hari * 150 MB = 5250 Terabyte/hari
  • Total ukuran konten = 180 + 5250 = 5430 Terabyte
  • Total Ruang yang Dibutuhkan untuk Setahun: 5430 Terabyte/hari * 365 (hari setahun) = 1981950 Terabyte = 1981,95 Petabyte

3.2 Estimasi Bandwidth

  • 5430 Terabyte/(24 * 60 * 60) = 5430 Terabyte/86400 detik ~= 62,84 GB/s ~= 502,8 Gbps
  • Bandwidth masuk ~= 502,8 Gbps
  • Anggap rasio pembaca dengan penulis adalah 100:1.
  • Bandwidth keluar yang dibutuhkan ~= 100 * 502,8 Gbps ~= 50,28 Tbps

 Use Case Diagram


Aktor dan Fungsi

  1. User (Pengguna)

    • Search: Mencari konten (foto/video) di Instagram.
    • Edit User Info: Mengedit informasi profil pengguna, seperti bio.
    • Capture dengan kamera: Mengambil foto atau video menggunakan kamera di dalam aplikasi Instagram.
    • Pilih foto dari galeri: Memilih foto atau video yang sudah ada di galeri perangkat.
    • Editing foto: Mengedit foto atau video yang dipilih atau diambil.
    • Share foto: Membagikan foto atau video yang sudah diedit.
    • Hash tagging: Menambahkan tagar ke dalam postingan.
    • Tag Teman yang lain: Menandai teman dalam postingan.
    • Sukai foto: Memberikan like pada postingan.
    • Berikan komentar: Memberikan komentar pada postingan.
  2. Host

    • Sebagai media posting: Menyediakan platform untuk mengunggah foto dan video yang diupload oleh user.
  3. Social Network

    • Share via socmed: Membagikan postingan ke sosial media lain seperti Facebook, Twitter, Flickr, Tumblr.
  4. Followers

    • Sukai foto: Memberikan like pada postingan.
    • Berikan komentar: Memberikan komentar pada postingan.
    • Tag Teman yang lain: Menambahkan tag pada foto yang sudah diupload user.

Use Case Diagram

Di bawah ini adalah penjelasan lengkap dari diagram use case sesuai gambar:

  1. User:

    • Terhubung ke semua fungsi yang dapat dilakukan seperti: Search, Edit User Info, Capture dengan kamera, Pilih foto dari galeri, Editing foto, Share foto, Hash tagging, Tag Teman yang lain, Sukai foto, dan Berikan komentar.
  2. Host:

    • Terhubung langsung ke use case "Share foto" sebagai media tempat posting foto atau video.
  3. Social Network:

    • Terhubung ke use case "Share foto" melalui fungsi "Share via socmed".
  4. Followers:

    • Terhubung ke use case "Share foto" melalui fungsi "Sukai foto", "Berikan komentar", dan "Tag Teman yang lain".
     

High Level Design 


Komponen:

  1. Client (Klien): Aplikasi mobile, aplikasi web, dan API yang menyediakan antarmuka bagi pengguna untuk berinteraksi dengan sistem.
  2. Authentication & Authorization (Otentikasi & Otorisasi): Mengelola login pengguna, pendaftaran, dan kontrol akses.
  3. Content Management (Manajemen Konten): Mengelola konten buatan pengguna seperti foto, video, siaran langsung, cerita, dan pesan.
  4. Feed Generation (Pembuatan Feed): Memersonalisasi feed berita untuk setiap pengguna berdasarkan pengikut, aktivitas, dan keterlibatan mereka.
  5. Social Graph (Graf Sosial): Melacak hubungan antara pengguna (pengikut, diikuti, teman).
  6. Discovery & Search (Penemuan & Pencarian): Memungkinkan pencarian pengguna, tagar, lokasi, dan konten.
  7. Notifications (Notifikasi): Memberitahukan pengguna tentang peristiwa relevan seperti suka, komentar, sebutan, dan pengikut.
  8. Analytics & Reporting (Analitik & Pelaporan): Melacak keterlibatan pengguna, kinerja konten, dan penggunaan platform secara keseluruhan.

Interaksi:

  1. Pengguna membuat konten:

    • Klien mengunggah foto/video.
    • Manajemen Konten menyimpan media dan metadata.
    • Pembuatan Feed memperbarui feed pengguna dan pengikut yang relevan.
    • Notifikasi memberitahu pengguna yang tertarik.
  2. Pengguna berinteraksi dengan konten:

    • Klien mengirim tindakan suka/komentar/bagikan.
    • Manajemen Konten dan Graf Sosial memperbarui data yang relevan.
    • Pembuatan Feed mungkin menyusun ulang feed berdasarkan interaksi baru.
    • Notifikasi memberitahu pengguna yang tertarik.
  3. Pengguna menemukan konten baru:

    • Klien menggunakan fungsi pencarian.
    • Penemuan & Pencarian mengidentifikasi konten yang relevan.
    • Klien menampilkan hasil pencarian.
  4. Pengguna mengelola koneksi:

    • Klien mengirim permintaan ikuti/batal ikuti.
    • Graf Sosial memperbarui koneksi.
    • Pembuatan Feed menyesuaikan berdasarkan perubahan hubungan.
  5. Pengguna memantau aktivitas:

    • Klien memeriksa feed notifikasi.
    • Notifikasi memberikan pembaruan tentang peristiwa relevan.

Pertimbangan Desain Utama:

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

Dengan mempertimbangkan semua komponen dan interaksi ini, sebuah sistem seperti Instagram dapat dioperasikan dengan efektif dan efisien, menyediakan pengalaman pengguna yang kaya dan responsif.

 Low Level Design


User Service:

  • Fungsi: Mengelola pendaftaran pengguna, login, otentikasi, dan manajemen profil.
  • Penyimpanan Data: Menyimpan data pengguna seperti nama pengguna, email, bio, foto profil, dll.
  • Integrasi: Terhubung dengan penyedia otentikasi sosial (misalnya, Facebook, Google).

Post Service:

  • Fungsi: Mengelola pengunggahan, pengeditan, dan penghapusan foto dan video.
  • Penyimpanan Metadata: Menyimpan metadata posting seperti keterangan, hashtag, lokasi, waktu, dll.
  • Proses Media: Memproses media yang diunggah untuk pengubahan ukuran, penyaringan, dan pembuatan thumbnail.
  • Transcoding: Mengelola transcoding foto dan video untuk berbagai perangkat dan resolusi.

Feed Service:

  • Fungsi: Menghasilkan feed berita yang dipersonalisasi untuk setiap pengguna berdasarkan pengikut, suka, aktivitas, dan keterlibatan mereka.
  • Sistem Terdistribusi: Menggunakan sistem terdistribusi seperti Apache Kafka atau RabbitMQ untuk pembaruan dan notifikasi real-time.
  • Cache Layer: Memanfaatkan lapisan cache seperti Redis untuk pengambilan feed yang cepat dan mengurangi beban database.

Storage Service:

  • Fungsi: Menyimpan foto dan video yang diunggah dengan efisien dan andal.
  • Solusi Penyimpanan: Menggunakan solusi penyimpanan objek yang dapat diskalakan seperti Amazon S3, Google Cloud Storage, atau Azure Blob Storage.
  • Redundansi dan Pemulihan Bencana: Menerapkan mekanisme redundansi dan pemulihan bencana untuk perlindungan data.

Search Service:

  • Fungsi: Memungkinkan pencarian pengguna, hashtag, dan lokasi.
  • Indeks Data: Mengindeks pengguna, posting, dan hashtag berdasarkan parameter yang relevan.
  • Algoritma Pencarian: Menggunakan algoritma pengindeksan dan pencarian yang efisien untuk hasil yang cepat dan akurat.

Comment Service:

  • Fungsi: Mengelola penambahan, pengeditan, dan penghapusan komentar pada posting.
  • Pelacakan Thread Komentar: Melacak thread komentar dan hubungan induk-anak.
  • Notifikasi: Memberitahu pengguna tentang komentar baru pada posting mereka sendiri atau komentar yang mereka ikuti.

Notification Service:

  • Fungsi: Memberitahukan pengguna tentang peristiwa relevan seperti suka, komentar, sebutan, dan pengikut.
  • Push Notifications: Mendorong notifikasi ke perangkat mobile melalui platform seperti Firebase Cloud Messaging atau Amazon SNS.
  • Sistem Antrian: Menggunakan sistem antrian untuk pengiriman notifikasi secara asinkron.

Analytics Service:

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

Cache untuk menyimpan data

Kita membutuhkan caching untuk menyimpan data karena hal ini memungkinkan kita mengelola jutaan pembacaan dengan lebih efisien. Dengan menggunakan cache, kita dapat meningkatkan pengalaman pengguna melalui proses pengambilan data yang lebih cepat. Selain itu, teknik lazy loading membantu meminimalkan waktu tunggu klien dengan memuat konten saat pengguna menggulir, sehingga menghemat bandwidth dan fokus pada konten yang sedang dilihat pengguna. Dengan demikian, caching juga berperan dalam mengurangi latency, memastikan pengguna dapat melihat atau mencari foto dan video tertentu di Instagram dengan cepat.

 

Desain API untuk Sistem Instagram

- Mengunggah Foto dan Video

Berikut adalah desain API potensial untuk mengunggah foto dan video ke Instagram:

Endpoints:

  • POST /media: Mengirim foto atau video baru.
  • PUT /media/{media_id}: Memperbarui metadata yang ada untuk item media.
  • DELETE /media/{media_id}: Menghapus item media.

- Mengikuti dan Berhenti Mengikuti Pengguna

Berikut adalah desain API potensial untuk mengikuti dan berhenti mengikuti pengguna di Instagram:

Endpoints:

  • POST /users/{user_id}/follow: Mengikuti pengguna yang ditentukan.
  • DELETE /users/{user_id}/follow: Berhenti mengikuti pengguna yang ditentukan.
  • GET /users/{user_id}/following: Mengambil daftar pengguna yang diikuti oleh pengguna yang ditentukan (dipaginasi).
  • GET /users/{user_id}/followers: Mengambil daftar pengguna yang mengikuti pengguna yang ditentukan (dipaginasi).

- Menyukai atau Tidak Menyukai Postingan

Merancang API untuk menyukai dan tidak menyukai postingan melibatkan beberapa pertimbangan. Berikut adalah penjelasan kunci:

Endpoints:

  • GET /posts/{post_id}: Mengambil detail postingan, termasuk jumlah suka/tidak suka.
  • POST /posts/{post_id}/like: Mendaftarkan suka untuk postingan oleh pengguna yang terautentikasi.
  • POST /posts/{post_id}/dislike: Mendaftarkan tidak suka untuk postingan oleh pengguna yang terautentikasi.
  • DELETE /posts/{post_id}/like: Menghapus suka untuk postingan oleh pengguna yang terautentikasi (jika sudah dilakukan sebelumnya).
  • DELETE /posts/{post_id}/dislike: Menghapus tidak suka untuk postingan oleh pengguna yang terautentikasi (jika sudah dilakukan sebelumnya).

- Mencari Foto dan Video

Endpoint Pencarian:

  • Biasanya permintaan POST ke endpoint /search.
  • Parameter query meliputi:
    • query: Istilah pencarian.
    • media_type: Memfilter hasil berdasarkan foto, video, atau keduanya.
    • Filter tambahan: rentang tanggal, lokasi, orang, dll. (jika didukung).
     

Desain Basis Data untuk Instagram

Kita membutuhkan tabel berikut untuk menyimpan data:

- User:

Tabel untuk menyimpan data pengguna – Users

 ```

{ "userId": "string[HashKey]", 

 "name": "string", 

"emailId": "string",  

"creationDateInUtc": "long" }

``` 

- User_Follows:

Tabel untuk menyimpan data pengikut – User_follows

```

{ "followingUserId_followerUserId": "string [HashKey]", 

 "followingUserId": "string [RangeKey]",

  "followerUserId": "string", 

 "creationDateInUtc": "long" }

``` 

- User Uploads:

Tabel untuk menyimpan unggahan pengguna – User_uploads

```

{ "uploadId": "string[Hashkey]",

  "userId": "string[RangeKey]", 

 "imageLocation": "string", 

 "uploadDateInUtc": "long",

  "caption": "string" }

``` 

- User Feed:

Tabel untuk menyimpan data umpan pengguna – User_feed

```

{  

"userId": "string[Hashkey]",

  "uploadId": "string", 

 "creationDateInUtc": "long[RangeKey]" 

}

```

Komentar

Postingan populer dari blog ini

QUIZ PBKK A

QUIZ 2 PBKK A

TUGAS 2 PWEB Membuat Portal Berita dan Kumpulan course