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
- Autentikasi Pengguna: Sistem harus menyediakan mekanisme autentikasi pengguna, baik melalui email, nomor telepon, atau akun media sosial lainnya.
- Unggah Foto dan Video: Pengguna harus dapat mengunggah dan memposting foto dan video ke profil mereka, dengan batasan ukuran dan format tertentu.
- Penyimpanan Konten: Sistem harus menyediakan penyimpanan untuk konten foto dan video yang diunggah oleh pengguna.
- Privasi Konten: Pengguna harus dapat mengatur privasi konten yang diunggah, apakah hanya untuk pengikut mereka atau publik.
- Feed Pengguna: Sistem harus menampilkan feed pengguna yang berisi postingan dari pengguna yang diikuti oleh pengguna tersebut.
- Pencarian Konten: Pengguna harus dapat mencari konten berdasarkan tagar, lokasi, atau pengguna lain.
- Explore: Sistem harus menyediakan halaman Explore yang menampilkan konten yang disesuaikan dengan minat pengguna.
- Profil Pengguna: Sistem harus menampilkan profil pengguna yang berisi informasi pengguna, postingan yang diunggah, dan aktivitas lainnya.
- Follow dan Unfollow: Pengguna harus dapat mengikuti dan berhenti mengikuti pengguna lain.
- Interaksi Pengguna: Pengguna harus dapat memberikan like, komentar, dan berbagi konten yang diunggah oleh pengguna lain.
- Stories dan Reels: Sistem harus mendukung fitur Stories dan Reels, termasuk berbagai alat kreatif seperti stiker, teks, dan filter.
- Direct Messaging: Sistem harus menyediakan fitur Direct Messaging (DM) untuk pengguna mengirim pesan pribadi ke pengguna lain atau grup.
Kebutuhan Non-Fungsional
- Performa: Sistem harus memberikan respons yang cepat terhadap permintaan pengguna, dengan waktu tunda yang minimal.
- Skalabilitas: Sistem harus dapat menangani pertumbuhan pengguna dan konten yang besar, dengan kemampuan untuk menyesuaikan kapasitasnya.
- Keamanan: Sistem harus menjaga keamanan data pengguna, termasuk data autentikasi, konten yang diunggah, dan pesan pribadi.
- Reliabilitas: Sistem harus dapat beroperasi secara konsisten dan dapat diandalkan, dengan ketersediaan yang tinggi.
- 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.
Dengan asumsi rasio baca/tulis sekitar 10:1, maka sekitar 7,5 miliar konten akan diunggah setiap harinya.
Maka dari itu, request per detik (RPS) yang harus ditangani oleh sistem adalah sebagai berikut.
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.
Dan untuk 10 tahun, maka kita membutuhkan penyimpanan sekitar 60,2 EB.
Estimasi Bandwidth
Karena sistem kita akan menangani masuknya 16,5 PB setiap hari, kami memerlukan bandwidth minimum sekitar 190 GB per detik.
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 |
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.htmlhttps://www.geeksforgeeks.org/design-instagram-a-system-design-interview-question/
Komentar
Posting Komentar