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
Spesifikasi Kebutuhan
Kebutuhan Fungsional
Kebutuhan Non-Fungsional
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.




Comments
Post a Comment