TUGAS PERTEMUAN 13 PPL - DESAIN SYSTEM APLIKASI INSTAGRAM

Nama:      Arif Nugraha Santosa

NRP:        5025211048

Kelas:       Perancangan Perangkat Lunak (A) 

Tugas Pertemuan 13 PPL - Desain System Aplikasi Instagram



Blog ini membahas tentang desain sistem Instagram, sebuah aplikasi media sosial populer yang memungkinkan pengguna untuk berbagi foto dan video. Pertanyaan desain sistem tentang Instagram sering ditanyakan dalam wawancara kerja untuk menilai kemampuan kandidat dalam merancang sistem yang skalabel, andal, dan aman.

Instagram adalah layanan jejaring sosial berbagi foto dan video asal Amerika yang dimiliki oleh Meta Platforms. Pengguna Instagram bisa mengunggah media berupa foto dan video, yang kemudian bisa diedit dengan filter, diatur menggunakan tagar, dan diberi lokasi melalui penanda geografis. Konten yang diunggah bisa dibagikan secara publik atau hanya kepada pengikut yang sudah disetujui sebelumnya.

Spesifikasi Kebutuhan

Kebutuhan Fungsional

  • Memposting foto dan video: Pengguna dapat mengunggah foto dan video ke Instagram.
  • Mengikuti dan berhenti mengikuti pengguna: Pengguna dapat mengikuti dan berhenti mengikuti pengguna lain di Instagram.
  • Menyukai atau tidak menyukai posting: 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 umpan berita: Pengguna dapat melihat umpan berita yang berisi foto dan video (dalam urutan kronologis) dari semua pengguna yang mereka ikuti.
  • Kebutuhan Non-Fungsional

  • Skalabilitas: Sistem harus dapat menangani jutaan pengguna dalam hal sumber daya komputasi dan penyimpanan.
  • Latency: Waktu tunggu untuk menghasilkan umpan berita harus rendah.
  • Ketersediaan: Sistem harus memiliki ketersediaan yang tinggi.
  • Ketahanan: Konten apa pun yang diunggah (foto dan video) tidak boleh hilang.
  • Konsistensi: Kita bisa sedikit mengorbankan konsistensi. Dianggap wajar jika konten (foto atau video) membutuhkan waktu untuk muncul di umpan berita pengikut yang berada di wilayah yang jauh.
  • Keandalan: Sistem harus mampu mengatasi kegagalan perangkat keras dan lunak.

  • Estimasi Kapasitas Sistem

    Asumsi:

    • Pengguna aktif harian: 500 juta dari total 1 miliar pengguna
    • Foto dibagikan: 60 juta per hari
    • Video dibagikan: 35 juta per hari
    • Ukuran foto maks: 3 MB
    • Ukuran video maks: 150 MB
    • Setiap pengguna rata-rata mengirim 20 permintaan per hari

    Kebutuhan Penyimpanan Harian

    • Foto: 60 juta foto/hari * 3 MB = 180 Terabyte / hari
    • Video: 35 juta video/hari * 150 MB = 5250 Terabyte / hari
    • Total: 180 TB/hari + 5250 TB/hari = 5430 Terabyte / hari

    Kebutuhan Penyimpanan Tahunan:

    5430 TB/hari * 365 hari/tahun = 1.981.950 Terabyte = 1.981,95 Petabyte

    Estimasi Bandwidth

    5430 TB / (24 jam * 60 menit/jam * 60 detik/menit) = 62,84 Gigabyte/detik = 502,8 Gigabits/detik (Gbps)

    • Bandwidth masuk: 502,8 Gbps

    Diasumsikan rasio pengguna yang membaca dibanding yang menulis adalah 100:1.

    • Bandwidth keluar yang dibutuhkan: 100 * 502,8 Gbps = 50,28 Terabits/detik (Tbps)

    Kesimpulan:

    Sistem Instagram membutuhkan kapasitas penyimpanan yang sangat besar, yaitu sekitar 2 Petabyte per tahun. Selain itu, dibutuhkan bandwidth yang tinggi untuk menangani lalu lintas data, yaitu sekitar 500 Gbps untuk bandwidth masuk dan 50,28 Tbps untuk bandwidth keluar.

    Use Case Diagram


    Akun Pengguna:

    • Pengguna Baru:
      • Daftar: Pengguna baru harus mendaftar terlebih dahulu. Informasi pendaftaran akan disimpan di database.
      • Verifikasi Profil: Pengguna mungkin perlu memverifikasi profil mereka melalui email atau metode lain.
    • Pengguna Terdaftar:
      • Masuk: Pengguna yang sudah terdaftar dapat masuk menggunakan email dan password mereka.

    Beranda:

    • Setelah masuk, pengguna akan dibawa ke halaman beranda.
    • Di beranda, pengguna akan melihat:
      • Foto dan video dari orang yang mereka ikuti.
      • Tautan ke halaman cerita (story page).
    • Posting terbaru akan muncul di bagian atas.

    Interaksi Pengguna:

    • Pengguna dapat mengikuti atau berhenti mengikuti orang lain.
    • Pengguna dapat melakukan siaran langsung (live).

    Pengaturan:

    • Pengguna dapat mengakses menu pengaturan.
    • Di pengaturan, pengguna dapat:
      • Melihat cerita sebelumnya atau postingan yang diarsipkan.
      • Membuka blokir pengguna lain.
      • Mendapatkan verifikasi akun (mungkin berbayar).

    Low Level Design


    Komponen Utama:

    • Layanan Pengguna (User Service):
      • Menangani pendaftaran, login, autentikasi, dan manajemen profil pengguna.
      • Menyimpan data pengguna seperti nama pengguna, email, bio, gambar profil, dll.
      • Terintegrasi dengan penyedia autentikasi sosial (misalnya, Facebook, Google).
    • Layanan Posting (Post Service):
      • Menangani pengunggahan, pengeditan, dan penghapusan foto dan video.
      • Menyimpan metadata posting seperti teks deskripsi, tagar, lokasi, timestamp, dll.
      • Memproses media yang diunggah untuk mengubah ukuran, filter, dan pembuatan thumbnail.
      • Mengelola transcoding foto dan video untuk berbagai perangkat dan resolusi.
    • Layanan Umpan Berita (Feed Service):
      • Menghasilkan umpan berita yang dipersonalisasi untuk setiap pengguna berdasarkan pengguna yang mereka ikuti, suka, aktivitas, dan keterlibatan.
      • Memanfaatkan sistem terdistribusi seperti Apache Kafka atau RabbitMQ untuk pembaruan dan pemberitahuan real-time.
      • Menggunakan lapisan cache seperti Redis untuk pengambilan umpan berita yang cepat dan mengurangi beban database.
    • Layanan Penyimpanan (Storage Service):
      • Menyimpan foto dan video yang diunggah secara efisien dan andal.
      • Menggunakan solusi penyimpanan objek yang skalabel seperti Amazon S3, Google Cloud Storage, atau Azure Blob Storage.
      • Menerapkan redundansi dan mekanisme pemulihan bencana untuk perlindungan data.
    • Layanan Pencarian (Search Service):
      • Memungkinkan pencarian pengguna, tagar, dan lokasi.
      • Mengindeks pengguna, posting, dan tagar berdasarkan parameter yang relevan.
      • Menggunakan algoritma pengindeksan dan pencarian yang efisien untuk hasil yang cepat dan akurat.
    • Layanan Komentar (Comment Service):
      • Menangani penambahan, pengeditan, dan penghapusan komentar pada posting.
      • Melacak utas komentar dan hubungan parent-child.
      • Memberi tahu pengguna tentang komentar baru pada posting mereka sendiri atau komentar yang mereka ikuti.
    • Layanan Pemberitahuan (Notification Service):
      • Menginformasikan pengguna tentang peristiwa relevan seperti suka, komentar, sebutan, dan pengikut baru.
      • Mendorong pemberitahuan ke perangkat seluler melalui platform seperti Firebase Cloud Messaging atau Amazon SNS.
      • Memanfaatkan sistem antrian untuk pengiriman notifikasi secara tidak sinkron.
    • Layanan Analisis (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 penargetan iklan.

    Mengapa Kita Perlu Cache?

    • Cache digunakan untuk menyimpan data untuk menangani jutaan pembacaan.
    • Ini meningkatkan pengalaman pengguna dengan membuat proses pengambilan data menjadi cepat.
    • Kita juga akan menggunakan lazy loading, yang meminimalkan waktu tunggu klien.
    • Ini memungkinkan kita untuk memuat konten saat pengguna menggulir dan karenanya menghemat bandwidth dan fokus pada memuat konten yang sedang dilihat pengguna.
    • Ini meningkatkan latensi untuk melihat atau mencari foto atau video tertentu di Instagram.

    High Level Design


    Gambaran Umum:

    Desain tingkat tinggi ini menggambarkan sistem Instagram pada level yang lebih luas, menjelaskan komponen utama dan interaksi di antara mereka. Sistem ini memungkinkan pengguna untuk mengunggah, melihat, dan mencari gambar dan video.

    Komponen:

    • Client: Aplikasi seluler, aplikasi web, dan API yang menyediakan antarmuka bagi pengguna untuk berinteraksi dengan sistem.
    • Autentikasi & Otorisasi: Menangani login pengguna, registrasi, dan kontrol akses.
    • Manajemen Konten: Mengelola konten yang dibuat pengguna seperti foto, video, streaming langsung, story, dan pesan.
    • Pembuatan Umpan Berita: Mempersonalisasi umpan berita untuk setiap pengguna berdasarkan pengguna yang mereka ikuti, aktivitas, dan keterlibatan.
    • Grafik Sosial (Social Graph): Melacak hubungan antar pengguna (mengikuti, pengikut, teman).
    • Penemuan & Pencarian: Memungkinkan pencarian pengguna, tagar, lokasi, dan konten.
    • Pemberitahuan: Menginformasikan pengguna tentang peristiwa relevan seperti suka, komentar, sebutan, dan pengikut baru.
    • 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.
      • Pembuatan Umpan Berita memperbarui umpan berita pengguna dan pengikut yang relevan.
      • Pemberitahuan memberi tahu pengguna yang berminat.
    • Pengguna berinteraksi dengan konten:
      • Klien mengirimkan tindakan suka/komentar/bagikan.
      • Manajemen Konten dan Grafik Sosial memperbarui data yang relevan.
      • Pembuatan Umpan Berita berpotensi mengatur ulang umpan berdasarkan interaksi baru.
      • Pemberitahuan memberi tahu pengguna yang berminat.
    • Pengguna menemukan konten baru:
      • Klien menggunakan fungsi pencarian.
      • Penemuan & Pencarian mengidentifikasi konten yang relevan.
      • Klien menampilkan hasil pencarian.
    • Pengguna mengelola koneksi:
      • Klien mengirimkan permintaan mengikuti/berhenti mengikuti.
      • Grafik Sosial memperbarui koneksi.
      • Pembuatan Umpan Berita menyesuaikan berdasarkan perubahan hubungan.
    • Pengguna memantau aktivitas:
      • Klien memeriksa umpan notifikasi.
      • Pemberitahuan memberikan pembaruan tentang peristiwa yang relevan.

    Pertimbangan Desain Utama:

    • Skalabilitas: Sistem harus dapat menangani jutaan pengguna dan volume data yang besar.
    • Kinerja: Memberikan waktu respons yang cepat untuk interaksi pengguna dan pengiriman konten.
    • Keandalan: Memastikan ketersediaan yang tinggi dan mencegah kehilangan data.
    • Keamanan: Melindungi data dan privasi pengguna.
    • Keterlibatan: Merancang fitur yang mendorong interaksi pengguna dan pembuatan konten.

    Desain API untuk Sistem Instagram

    Posting Foto dan Video

    Desain API berikut ini memungkinkan pengguna untuk mengunggah foto dan video ke Instagram:

    Endpoint:

    • POST /media: untuk mengirimkan foto atau video baru.
    • PUT /media/{media_id}: untuk memperbarui metadata yang ada untuk item media.
    • DELETE /media/{media_id}: untuk menghapus item media.

    Mengikuti dan Berhenti Mengikuti Pengguna

    Desain API berikut ini memungkinkan pengguna untuk mengikuti dan berhenti mengikuti pengguna lain di Instagram:

    Endpoint:

    • POST /users/{user_id}/follow: untuk mengikuti pengguna yang ditentukan.
    • DELETE /users/{user_id}/follow: untuk berhenti mengikuti pengguna yang ditentukan.
    • GET /users/{user_id}/following: untuk mengambil daftar pengguna yang diikuti oleh pengguna tertentu (dengan pagination).
    • GET /users/{user_id}/followers: untuk mengambil daftar pengguna yang mengikuti pengguna tertentu (dengan pagination).

    Suka atau Tidak Suka Posting

    Merancang API untuk menyukai dan tidak menyukai posting memerlukan beberapa pertimbangan. Berikut adalah rincian aspek kunci yang perlu dipikirkan:

    Endpoint:

    • GET /posts/{post_id}: untuk mengambil detail posting, termasuk jumlah suka/tidak suka.
    • POST /posts/{post_id}/like: untuk mencatat pengguna yang terautentikasi menyukai posting tersebut.
    • POST /posts/{post_id}/dislike: untuk mencatat pengguna yang terautentikasi tidak menyukai posting tersebut.
    • DELETE /posts/{post_id}/like: untuk menghapus like pada posting oleh pengguna yang terautentikasi (jika sebelumnya sudah like).
    • DELETE /posts/{post_id}/dislike: untuk menghapus dislike pada posting oleh pengguna yang terautentikasi (jika sebelumnya sudah dislike).

    7.4 Pencarian Foto dan Video

    Endpoint Pencarian:

    Biasanya menggunakan request 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 Database untuk Sistem Instagram

    Tabel User

    Tabel ini menyimpan data pengguna.

    Kolom:

    • userId: string (Hash Key) - Pengenal unik untuk setiap pengguna.
    • name: string - Nama pengguna.
    • emailId: string - Alamat email pengguna.
    • creationDateInUtc: long - Tanggal pembuatan akun pengguna dalam format UTC.

    Tabel User_Follows

    Tabel ini menyimpan data pengguna yang diikuti oleh pengguna lain.

    Kolom:

    • followingUserId_followerUserId: string (Hash Key) - Kombinasi unik dari ID pengguna yang diikuti (followingUserId) dan ID pengikut (followerUserId) untuk memastikan tidak ada duplikasi.
    • followingUserId: string (Range Key) - ID pengguna yang diikuti.
    • followerUserId: string - ID pengikut.
    • creationDateInUtc: long - Tanggal pengguna mulai mengikuti pengguna lain dalam format UTC.

    Tabel User_Uploads

    Tabel ini menyimpan informasi mengenai unggahan pengguna.

    Kolom:

    • uploadId: string (Hash Key) - Pengenal unik untuk setiap unggahan.
    • userId: string (Range Key) - ID pengguna yang melakukan unggahan.
    • imageLocation: string - Lokasi penyimpanan gambar yang diunggah.
    • uploadDateInUtc: long - Tanggal dan waktu unggahan dalam format UTC.
    • caption: string - Teks deskripsi untuk unggahan.

    Tabel User_Feed

    Tabel ini menyimpan informasi mengenai konten yang muncul di beranda pengguna.

    Kolom:

    • userId: string (Hash Key) - ID pengguna yang memiliki beranda.
    • uploadId: string - ID unggahan yang muncul di beranda pengguna.
    • creationDateInUtc: long (Range Key) - Tanggal dan waktu unggahan ditambahkan ke beranda pengguna dalam format UTC.

    Pemilihan Database

    Memilih database yang tepat untuk sistem Instagram sangat penting. Dalam kasus ini, database SQL lebih sesuai karena alasan berikut:

    • Data Relasional: Data Instagram memiliki hubungan antar tabel (misalnya, pengguna dengan unggahan, pengguna dengan pengguna yang diikuti).
    • Urutan Data: Tabel User_Feed membutuhkan pengurutan berdasarkan waktu untuk menampilkan posting terbaru terlebih dahulu.
    • Keawetan Data: Database SQL menawarkan ketahanan data yang kuat untuk mencegah kehilangan data akibat kerusakan.
    • Kueri Relasional: SQL mendukung kueri relasional yang memungkinkan pencarian efisien berdasarkan ID pengguna (misalnya, mengambil semua unggahan pengguna atau daftar pengguna yang diikuti).

    Microservices untuk Desain Sistem Instagram

    Arsitektur Microservice:

    Sistem Instagram dapat memanfaatkan arsitektur microservice. Ini adalah gaya arsitektur yang membangun aplikasi sebagai kumpulan layanan yang:

    • Dapat diterapkan secara independen
    • Tidak terikat kuat (loosely coupled)
    • Diatur berdasarkan kemampuan bisnis
    • Dimiliki oleh tim kecil

    Arsitektur microservice memungkinkan organisasi untuk menghadirkan aplikasi besar dan kompleks dengan cepat, sering, dan handal - sebuah kebutuhan untuk bersaing dan menang di dunia saat ini.

    Contoh Layanan Mikro:

    • Layanan Upload Gambar: Menangani pengunggahan, pemrosesan, dan penyimpanan gambar dan video.
    • Layanan Pembuatan Umpan Berita: Mengambil data dari berbagai sumber (misalnya, User_Uploads, User_Follows) untuk menghasilkan umpan berita yang dipersonalisasi untuk setiap pengguna.
    • Layanan Komentar: Mengelola komentar pada posting, termasuk menambahkan, mengedit, dan menghapus komentar.

    Skalabilitas untuk Desain Sistem Instagram

    Skalabilitas adalah kemampuan sistem untuk menangani peningkatan beban kerja. Sistem yang skalabel dengan baik dapat mempertahankan atau meningkatkan kinerjanya saat menghadapi permintaan yang lebih besar.

    Cara Meningkatkan Skalabilitas:

    • Menambahkan Server: Tambahkan lebih banyak server ke lapisan layanan aplikasi untuk menangani lebih banyak permintaan klien.
    • Meningkatkan Database: Tingkatkan jumlah database untuk menyimpan data pengguna yang terus bertambah.

    Persyaratan Non-Fungsional yang Ditangani:

    • Skalabilitas: ditangani dengan menambah server dan database.
    • Latency: dikurangi dengan menggunakan cache dan CDN untuk mempercepat pengambilan konten.
    • Ketersediaan: dipastikan dengan menggunakan penyimpanan dan database yang direplikasi secara global.
    • Keawetan: dijaga dengan penyimpanan persisten yang menyimpan cadangan data sehingga konten yang diunggah tidak pernah hilang.
    • Konsistensi: dipertahankan dengan menggunakan penyimpanan seperti blob store dan database.
    • Keamanan: diwujudkan dengan replikasi dan redundansi database, load balancing untuk merutekan permintaan di sekitar server yang gagal.

    Referensi

    Comments

    Popular posts from this blog

    EAS PPL A - ARIF NUGRAHA SANTOSA

    TUGAS PERTEMUAN 14 PPL - DESAIN DATABASE