Tugas Pertemuan 13 PPL - Desain Aplikasi Instagram

Nama Akmal Sulthon Fathulloh
NRP 5025211047
Kelas PPL - A

Instagram adalah layanan jejaring sosial berbagi foto dan video yang dimiliki oleh perusahaan Amerika, Meta Platforms. Pada pertemuan ke-13 ini, kita diminta untuk membuat rancangan desain Instagram yang meliputi: deskripsi aplikasi, spesifikasi kebutuhan, estimasi kapasitas (trafik, penyimpanan), high-level design, desain basis data, dan lain-lain.

Deskripsi Aplikasi

Instagram adalah platform media sosial yang memungkinkan pengguna untuk berbagi foto dan video. Dikembangkan oleh Kevin Systrom dan Mike Krieger, Instagram pertama kali diluncurkan pada Oktober 2010 dan kemudian diakuisisi oleh Facebook Inc. (sekarang Meta Platforms Inc.) pada April 2012. Beberapa fitur utama Instagram adalah sebagai berikut:

  • Berbagi Foto dan Video: Pengguna dapat mengunggah foto dan video ke profil mereka, menambahkan deskripsi, tagar (hashtag), dan lokasi. Konten ini dapat dilihat oleh pengikut mereka atau oleh publik, tergantung pada pengaturan privasi akun.
  • Stories: Fitur ini memungkinkan pengguna untuk berbagi foto dan video dalam format slideshow yang akan hilang setelah 24 jam. Stories juga dilengkapi dengan berbagai alat kreatif seperti stiker, teks, dan filter.
  • Direct Messaging (DM): Fitur pesan pribadi yang memungkinkan pengguna mengirim teks, foto, video, dan postingan dari feed atau Stories secara langsung ke pengguna lain atau grup.
  • IGTV: Layanan video yang memungkinkan pengguna untuk mengunggah video berdurasi lebih panjang dibandingkan video biasa yang diunggah ke feed.
  • Reels: Fitur yang memungkinkan pengguna untuk membuat dan menemukan video pendek dengan musik, mirip dengan TikTok.
  • Explore: Halaman ini menampilkan konten yang disesuaikan dengan minat pengguna, berdasarkan aktivitas dan interaksi mereka di platform.

Spesifikasi Kebutuhan

Berdasarkan deskripsi aplikasi di atas, kita dapat mengidentifikasi beberapa spesifikasi kebutuhan untuk desain sistem Instagram. Beberapa spesifikasi kebutuhan tersebut adalah sebagai berikut:

Kebutuhan Fungsional

  1. Autentikasi Pengguna: Sistem harus menyediakan mekanisme autentikasi pengguna, baik melalui email, nomor telepon, atau akun media sosial lainnya.
  2. Unggah Foto dan Video: Pengguna harus dapat mengunggah dan memposting foto dan video ke profil mereka, dengan batasan ukuran dan format tertentu.
  3. Penyimpanan Konten: Sistem harus menyediakan penyimpanan untuk konten foto dan video yang diunggah oleh pengguna.
  4. Privasi Konten: Pengguna harus dapat mengatur privasi konten yang diunggah, apakah hanya untuk pengikut mereka atau publik.
  5. Feed Pengguna: Sistem harus menampilkan feed pengguna yang berisi postingan dari pengguna yang diikuti oleh pengguna tersebut.
  6. Pencarian Konten: Pengguna harus dapat mencari konten berdasarkan tagar, lokasi, atau pengguna lain.
  7. Explore: Sistem harus menyediakan halaman Explore yang menampilkan konten yang disesuaikan dengan minat pengguna.
  8. Profil Pengguna: Sistem harus menampilkan profil pengguna yang berisi informasi pengguna, postingan yang diunggah, dan aktivitas lainnya.
  9. Follow dan Unfollow: Pengguna harus dapat mengikuti dan berhenti mengikuti pengguna lain.
  10. Interaksi Pengguna: Pengguna harus dapat memberikan like, komentar, dan berbagi konten yang diunggah oleh pengguna lain.
  11. Stories dan Reels: Sistem harus mendukung fitur Stories dan Reels, termasuk berbagai alat kreatif seperti stiker, teks, dan filter.
  12. Direct Messaging: Sistem harus menyediakan fitur Direct Messaging (DM) untuk pengguna mengirim pesan pribadi ke pengguna lain atau grup.

Kebutuhan Non-Fungsional

  1. Performa: Sistem harus memberikan respons yang cepat terhadap permintaan pengguna, dengan waktu tunda yang minimal.
  2. Skalabilitas: Sistem harus dapat menangani pertumbuhan pengguna dan konten yang besar, dengan kemampuan untuk menyesuaikan kapasitasnya.
  3. Keamanan: Sistem harus menjaga keamanan data pengguna, termasuk data autentikasi, konten yang diunggah, dan pesan pribadi.
  4. Reliabilitas: Sistem harus dapat beroperasi secara konsisten dan dapat diandalkan, dengan ketersediaan yang tinggi.
  5. Usability: Antarmuka pengguna harus dirancang dengan baik dan mudah digunakan, sehingga pengguna dapat dengan mudah berinteraksi dengan sistem.

Estimasi Kapasitas

Estimasi Trafik

Instagram adalah platform yang sangat populer dengan jutaan pengguna aktif harian. Untuk mengestimasi trafik yang dihasilkan oleh Instagram, kita dapat menggunakan data berikut:

  • Jumlah pengguna aktif harian: 500 juta pengguna
  • Rata-rata pengguna membuka aplikasi 5 kali sehari
  • Rata-rata pengguna menghabiskan 30 menit di aplikasi setiap kali membuka
  • Rasio baca/tulis sekitar 10:1

Dengan data di atas, kita dapat menghitung estimasi trafik harian yang dihasilkan oleh Instagram.

\[ \text{Total Permintaan Harian} = \text{Pengguna Aktif Harian} \times \text{Frekuensi Buka Aplikasi} \times \text{Durasi Penggunaan} \] \[ \text{Total Permintaan Harian} = 500 \space juta \times 5 \times 30 = 75 \space miliar \]

Dengan asumsi rasio baca/tulis sekitar 10:1, maka sekitar 7,5 miliar konten akan diunggah setiap harinya.

\[ \frac{1}{10} \times 75 \space miliar = 7,5 \space miliar/hari \]

Maka dari itu, request per detik (RPS) yang harus ditangani oleh sistem adalah sebagai berikut.

\[ \text{RPS} = \frac{\text{Total Permintaan Harian}}{\text{Jumlah Detik dalam Sehari}} \] \[ \text{RPS} = \frac{75 \space miliar}{24 \space jam \times 60 \space menit \times 60 \space detik} \approx 868.06 \]

Estimasi Penyimpanan (Storage)

Instagram menyimpan berbagai jenis konten, termasuk foto, video, dan pesan pengguna. Untuk mengestimasi kebutuhan penyimpanan Instagram, kita dapat menggunakan data berikut:

  • Rata-rata ukuran foto: 3 MB
  • Rata-rata ukuran video: 30 MB
  • Jumlah pengguna aktif harian: 500 juta pengguna
  • Rata-rata pengguna mengunggah 1 foto dan 1 video setiap hari

Dengan data di atas, kita dapat menghitung estimasi kebutuhan penyimpanan harian yang dihasilkan oleh Instagram.

\[ \text{Total Penyimpanan Harian} = (\text{Ukuran Foto} + \text{Ukuran Video}) \times \text{Pengguna Aktif Harian} \] \[ \text{Total Penyimpanan Harian} = (3 \space MB + 30 \space MB) \times 500 \space juta = 16,5 \space PB \]

Dan untuk 10 tahun, maka kita membutuhkan penyimpanan sekitar 60,2 EB.

\[ 16,5 \space PB \times 365 \times 10 = 60,2 \space EB \]

Estimasi Bandwidth

Karena sistem kita akan menangani masuknya 16,5 PB setiap hari, kami memerlukan bandwidth minimum sekitar 190 GB per detik.

\[ \frac{16,5 \space PB \times 8}{24 \times 60 \times 60} \approx 190 \space GB/s \]

High-Level Estimation

Berikut adalah estimasi kapasitas sistem yang dibutuhkan untuk mendukung aplikasi Instagram.

Estimasi Nilai
Total Permintaan Harian 75 miliar
Total Penyimpanan Harian 16,5 PB
Total Penyimpanan 10 Tahun 60,2 EB
Bandwidth Minimum 190 GB/s

Use Case Diagram

Use case diagram adalah diagram yang menggambarkan interaksi antara pengguna dan sistem, serta fungsionalitas yang disediakan oleh sistem. Berikut adalah use case diagram untuk Instagram:

Dalam use case diagram di atas, terdapat beberapa aktor dan use case utama yang terkait dengan Instagram. Aktor utama adalah Pengguna, sedangkan use case utama meliputi Autentikasi Pengguna, Unggah Foto dan Video, Lihat Feed, Cari Konten, Kirim Pesan, dan Lainnya.

  • Jika pengguna baru, mereka akan mendaftar terlebih dahulu dan informasi tersebut akan disimpan di basis data, kemudian mereka akan memverifikasi profil.
  • Jika pengguna sudah mendaftar, mereka akan memasukkan email dan kata sandi.
  • Di halaman beranda, mereka akan melihat foto dan video, serta halaman cerita.
  • Postingan yang baru diunggah akan muncul di bagian atas. Pengguna dapat mengikuti atau berhenti mengikuti seseorang. Pengguna dapat melakukan siaran langsung. Semua itu tergantung pada mereka.
  • Akan ada pengaturan, di mana pengguna dapat melihat cerita atau postingan lama yang telah diarsipkan. Pengguna dapat membuka blokir seseorang, dan mereka bisa mendapatkan akun terverifikasi setelah membayar.

High-Level Design

Sistem kami harus memungkinkan kami mengunggah, melihat, dan mencari gambar dan video pada high-level. Untuk mengunggah gambar dan video, kita perlu menyimpannya, dan saat mengambilnya, kita perlu mengambil data dari penyimpanan. Selain itu, pengguna juga harus diperbolehkan untuk mengikuti satu sama lain. Pada high-level, Instagram dapat dipandang sebagai sebuah sistem dengan komponen dan interaksi utama berikut:

Komponen Sistem

  • Client: Aplikasi Instagram di perangkat pengguna (smartphone, tablet, desktop).
  • Web Server: Server yang melayani permintaan dari aplikasi klien dan mengirimkan konten ke klien.
  • Application Server: Server yang mengelola logika bisnis dan interaksi dengan database.
  • Database: Tempat penyimpanan data pengguna, konten, dan informasi lainnya.
  • Storage: Sistem penyimpanan yang menyimpan foto, video, dan data lainnya.
  • CDN (Content Delivery Network): Jaringan server yang tersebar di berbagai lokasi untuk mendistribusikan konten ke pengguna dengan cepat.

Arsitektur sistem Instagram harus dirancang untuk menangani lalu lintas yang besar, menyediakan ketersediaan tinggi, dan menjaga keamanan data pengguna. Sistem harus dapat diperluas secara horizontal untuk menyesuaikan pertumbuhan pengguna dan konten.

Interaksi Pengguna

  • Pengguna membuat konten
    • Pengguna mengunggah foto atau video dari aplikasi klien.
    • Aplikasi klien mengirim permintaan ke web server.
    • Web server menyimpan konten ke storage dan database.
  • Pengguna melihat konten
    • Pengguna membuka aplikasi klien dan melihat feed.
    • Aplikasi klien mengirim permintaan ke web server.
    • Web server mengambil konten dari database dan storage.
    • Web server mengirim konten ke aplikasi klien.
  • Pengguna berinteraksi dengan konten
    • Pengguna memberikan like, komentar, atau berbagi konten.
    • Aplikasi klien mengirim permintaan ke web server.
    • Web server memperbarui database dengan interaksi pengguna.
  • Pengguna mencari konten baru
    • Pengguna memasukkan kata kunci pencarian di aplikasi klien.
    • Aplikasi klien mengirim permintaan ke web server.
    • Web server mengambil konten dari database berdasarkan kata kunci.
    • Web server mengirim hasil pencarian ke aplikasi klien.
  • Pengguna mengirim pesan pribadi
    • Pengguna membuka fitur Direct Messaging di aplikasi klien.
    • Aplikasi klien mengirim permintaan ke web server.
    • Web server mengambil pesan dari database.
    • Web server mengirim pesan ke aplikasi klien.
  • Pengguna mengatur koneksi dengan pengguna lain
    • Pengguna mengikuti atau berhenti mengikuti pengguna lain.
    • Aplikasi klien mengirim permintaan ke web server.
    • Web server memperbarui database dengan koneksi pengguna.
  • Pengguna memonitor aktivitas akun
    • Pengguna melihat statistik pengikut, like, dan komentar.
    • Aplikasi klien mengirim permintaan ke web server.
    • Web server mengambil data dari database.
    • Web server mengirim data ke aplikasi klien.

Low-Level Design

Pada level yang lebih rendah, kita perlu merancang komponen sistem secara lebih detail, termasuk struktur database, alur kerja, dan implementasi teknis lainnya. Berikut adalah beberapa aspek desain sistem Instagram yang perlu dipertimbangkan:

Desain Basis Data

Basis data Instagram harus dirancang untuk menyimpan data pengguna, konten, interaksi pengguna, dan informasi lainnya. Berikut adalah beberapa tabel yang mungkin diperlukan dalam desain basis data Instagram:

Tabel users

Tabel users berisi informasi pengguna seperti nama pengguna, email, kata sandi, nama lengkap, biografi, dan gambar profil. Tabel ini juga mencatat waktu pembuatan akun dan pembaruan terakhir.

Kolom Tipe Data Deskripsi
user_id INT Primary key, auto-increment
username VARCHAR Nama pengguna, unik
email VARCHAR Email pengguna, unik
password VARCHAR Kata sandi pengguna, terenkripsi
full_name VARCHAR Nama lengkap pengguna
bio VARCHAR Biografi pengguna
profile_image VARCHAR URL gambar profil
created_at TIMESTAMP Waktu pembuatan akun
updated_at TIMESTAMP Waktu pembaruan terakhir

Tabel posts

Tabel posts berisi informasi postingan pengguna seperti gambar, deskripsi, lokasi, dan waktu unggah. Tabel ini juga mencatat waktu pembaruan terakhir.

Kolom Tipe Data Deskripsi
post_id INT Primary key, auto-increment
user_id INT Foreign key ke tabel users
image_url VARCHAR URL gambar postingan
caption TEXT Deskripsi postingan
location VARCHAR Lokasi postingan
created_at TIMESTAMP Waktu unggah postingan
updated_at TIMESTAMP Waktu pembaruan terakhir

Tabel comments

Tabel comments berisi komentar pengguna pada postingan, termasuk ID postingan, ID pengguna, isi komentar, dan waktu pembuatan komentar. Tabel ini juga mencatat waktu pembaruan terakhir.

Kolom Tipe Data Deskripsi
comment_id INT Primary key, auto-increment
post_id INT Foreign key ke tabel posts
user_id INT Foreign key ke tabel users
comment TEXT Isi komentar
created_at TIMESTAMP Waktu pembuatan komentar
updated_at TIMESTAMP Waktu pembaruan terakhir

Tabel likes

Tabel likes berisi informasi like yang diberikan oleh pengguna pada postingan. Tabel ini mencatat ID postingan, ID pengguna, dan waktu like diberikan.

Kolom Tipe Data Deskripsi
like_id INT Primary key, auto-increment
post_id INT Foreign key ke tabel posts
user_id INT Foreign key ke tabel users
created_at TIMESTAMP Waktu like diberikan

Tabel follows

Tabel follows berisi informasi pengguna yang diikuti oleh pengguna lain. Tabel ini mencatat ID pengikut, ID yang diikuti, dan waktu mulai mengikuti.

Kolom Tipe Data Deskripsi
follow_id INT Primary key, auto-increment
follower_id INT Foreign key ke tabel users (pengikut)
following_id INT Foreign key ke tabel users (yang diikuti)
created_at TIMESTAMP Waktu pengguna mulai mengikuti pengguna lain

Tabel messages

Tabel messages berisi pesan yang dikirim oleh pengguna melalui fitur Direct Messaging. Tabel ini mencatat ID pesan, ID pengirim, ID penerima, isi pesan, dan waktu pengiriman pesan.

Kolom Tipe Data Deskripsi
message_id INT Primary key, auto-increment
sender_id INT Foreign key ke tabel users (pengirim)
receiver_id INT Foreign key ke tabel users (penerima)
content TEXT Isi pesan
created_at TIMESTAMP Waktu pengiriman pesan

Tabel notifications

Tabel notifications berisi notifikasi yang diterima oleh pengguna, seperti like, komentar, atau follow. Tabel ini mencatat ID notifikasi, ID pengguna, tipe notifikasi, ID terkait, waktu notifikasi dibuat, dan waktu notifikasi dibaca.

Kolom Tipe Data Deskripsi
notification_id INT Primary key, auto-increment
user_id INT Foreign key ke tabel users
type VARCHAR Tipe notifikasi (like, komentar, follow, dll.)
related_id INT ID sumber notifikasi (post_id, user_id, dll.)
created_at TIMESTAMP Waktu notifikasi dibuat
read_at TIMESTAMP Waktu notifikasi dibaca

Desain basis data di atas adalah kerangka utama basis data dari Instagram yang bisa dikembangkan lebih lanjut sesuai kebutuhan aplikasi. Misalnya, kita bisa menambahkan tabel untuk fitur tambahan seperti cerita (stories), tagar (hashtags), atau penyimpanan media tambahan (video, IGTV).

Berikut adalah implementasi basis data Instagram menggunakan MySQL:

Desain API

Instagram API harus dirancang untuk menyediakan antarmuka yang mudah digunakan bagi aplikasi klien untuk berinteraksi dengan sistem. Berikut adalah beberapa endpoint API yang mungkin diperlukan dalam desain API Instagram:

Autentikasi Pengguna

  • POST /api/auth/register: Mendaftarkan pengguna baru dengan email, nama pengguna, dan kata sandi.
  • POST /api/auth/login: Masuk ke akun pengguna dengan email dan kata sandi.
  • POST /api/auth/verify: Memverifikasi akun pengguna dengan kode verifikasi.

Unggah Foto dan Video

  • POST /api/posts: Mengunggah foto atau video baru dengan deskripsi dan lokasi.

Lihat Feed

  • GET /api/feed: Mendapatkan postingan terbaru dari pengguna yang diikuti.

Cari Konten

  • GET /api/search: Mencari konten berdasarkan tagar, lokasi, atau pengguna.

Kirim Pesan

  • POST /api/messages: Mengirim pesan pribadi ke pengguna lain atau grup.

Lainnya

  • POST /api/follows: Mengikuti pengguna lain.
  • POST /api/likes: Memberikan like pada postingan.
  • POST /api/comments: Memberikan komentar pada postingan.
  • GET /api/notifications: Mendapatkan notifikasi terbaru.

Referensi

https://kuliahppl.blogspot.com/2024/06/desain-system-aplikasi-instagram.html
https://www.geeksforgeeks.org/design-instagram-a-system-design-interview-question/

Komentar

Postingan populer dari blog ini

Tugas Pertemuan 2 PPL - Identifikasi Proses PPL

Tugas Pertemuan 5 PPL - High Level Design

Evaluasi Tengah Semester Perancangan Perangkat Lunak