PPL-PERTEMUAN(13)
Nama: Moh rosy haqqy aminy
NRP: 5025211012
Kelas: PPL A
Tugas kali ini merupakan latihan untuk membuat desain sistem aplikasi Instagram yang terdiri dari system requirements, estimasi kapasitas, HLD, LLD, dll.
Desain Sistem Aplikasi Instagram
1. Spesifikasi Sistem
Persyaratan Fungsional:
Otentikasi & Otorisasi Pengguna:
- Mendaftarkan pengguna baru.
- Fitur login dan logout.
- Pemulihan kata sandi.
Manajemen Profil Pengguna:
- Melihat dan mengedit informasi profil.
- Mengikuti dan berhenti mengikuti pengguna lain.
Manajemen Postingan:
- Mengunggah foto dan video.
- Menyukai, mengomentari, dan membagikan postingan.
- Melihat postingan di feed dan profil pengguna.
Pesan:
- Mengirim dan menerima pesan langsung.
- Obrolan grup.
Notifikasi:
- Notifikasi real-time untuk likes, komentar, follow, dan pesan langsung.
Pencarian:
- Mencari pengguna, postingan, dan hashtag.
Cerita (Stories):
- Mengunggah konten yang hilang setelah 24 jam.
- Melihat cerita dari pengguna yang diikuti.
Jelajahi (Explore):
- Menemukan konten baru berdasarkan preferensi dan perilaku pengguna.
Persyaratan Non-Fungsional:
Kinerja:
- Waktu respons cepat (< 200 ms untuk interaksi pengguna).
- Menangani hingga 1 juta pengguna bersamaan.
Skalabilitas:
- Skalabilitas horizontal untuk mendukung pertumbuhan basis pengguna.
- Kemampuan menangani beban puncak dengan efisien.
Keamanan:
- Mengamankan data pengguna dengan enkripsi (dalam transit dan saat istirahat).
- Implementasi mekanisme otorisasi dan otentikasi yang kuat.
Keandalan:
- Ketersediaan tinggi (uptime 99.9%).
- Cadangan otomatis dan pemulihan bencana.
Kegunaan:
- Antarmuka yang intuitif dan ramah pengguna.
- Desain yang dapat diakses untuk berbagai demografi pengguna.
2. Estimasi Kapasitas
Asumsi:
- Basis pengguna: 100 juta pengguna aktif.
- Pengguna aktif harian: 20 juta.
- Rata-rata postingan per pengguna per hari: 2.
- Ukuran rata-rata postingan (foto/video): 1 MB.
- Rata-rata jumlah pengikut per pengguna: 150.
- Rata-rata komentar per postingan: 10.
- Rata-rata likes per postingan: 100.
Kebutuhan Penyimpanan:
- Postingan: 20 juta pengguna * 2 postingan/hari * 1 MB = 40 TB/hari.
- Komentar: 20 juta pengguna * 2 postingan/hari * 10 komentar/postingan * 0.1 KB = 40 GB/hari.
- Likes: 20 juta pengguna * 2 postingan/hari * 100 likes/postingan * 0.01 KB = 4 GB/hari.
Total Penyimpanan per Hari: ~40.044 TB/hari
Kebutuhan Bandwidth:
- Asumsi setiap pengguna aktif melihat 100 postingan/hari.
- Transfer Data: 20 juta pengguna * 100 postingan * 1 MB = 2 PB/hari.
3. Desain Tingkat Tinggi (High-Level Design / HLD)
Komponen:
Frontend:
- Aplikasi Mobile (iOS, Android).
- Antarmuka Web.
Backend:
- API Gateway: Titik masuk untuk semua permintaan klien.
- Layanan Pengguna: Menangani otentikasi, otorisasi, dan manajemen profil pengguna.
- Layanan Postingan: Mengelola pembuatan, penghapusan, dan pengambilan postingan.
- Layanan Komentar: Mengelola komentar pada postingan.
- Layanan Likes: Mengelola likes pada postingan.
- Layanan Notifikasi: Mengirim notifikasi real-time ke pengguna.
- Layanan Pesan: Mengelola pesan langsung antar pengguna.
- Layanan Pencarian: Menangani pencarian pengguna, postingan, dan hashtag.
- Layanan Cerita: Mengelola konten cerita sementara.
- Layanan Jelajahi: Menyediakan fitur penemuan konten.
Database:
- Database Pengguna: Menyimpan informasi dan kredensial pengguna.
- Database Postingan: Menyimpan metadata dan konten postingan.
- Database Komentar: Menyimpan komentar pada postingan.
- Database Likes: Menyimpan likes pada postingan.
- Database Notifikasi: Menyimpan data notifikasi.
- Database Pesan: Menyimpan pesan langsung.
Caching:
- Redis atau Memcached untuk caching data yang sering diakses (misalnya profil pengguna, postingan).
Penyimpanan:
- AWS S3 atau sejenisnya untuk menyimpan gambar dan video.
CDN:
- Jaringan Pengiriman Konten untuk pengiriman cepat konten media.
Analitik:
- Pipeline pemrosesan data untuk analitik (misalnya, perilaku pengguna, keterlibatan postingan).
Pemantauan:
- Alat untuk memantau kesehatan dan kinerja sistem (misalnya, Prometheus, Grafana).
4. Desain Tingkat Rendah (Low-Level Design / LLD)
API Gateway:
- Menangani routing permintaan ke layanan backend yang sesuai.
- Middleware otentikasi untuk memverifikasi token pengguna.
Layanan Pengguna:
Endpoints:
POST /register: Mendaftarkan pengguna baru.POST /login: Login pengguna yang sudah ada.GET /profile: Mendapatkan profil pengguna.PUT /profile: Memperbarui profil pengguna.
Skema Database:
User:user_id,username,email,password_hash,profile_picture,bio,created_at.
Layanan Postingan:
Endpoints:
POST /posts: Membuat postingan baru.GET /posts/{post_id}: Mendapatkan detail postingan.DELETE /posts/{post_id}: Menghapus postingan.GET /posts/feed: Mendapatkan feed untuk pengguna yang login.
Skema Database:
Post:post_id,user_id,media_url,caption,created_at.
Layanan Komentar:
Endpoints:
POST /posts/{post_id}/comments: Menambahkan komentar pada postingan.GET /posts/{post_id}/comments: Mendapatkan komentar pada postingan.DELETE /comments/{comment_id}: Menghapus komentar.
Skema Database:
Comment:comment_id,post_id,user_id,text,created_at.
Layanan Likes:
Endpoints:
POST /posts/{post_id}/likes: Menyukai postingan.DELETE /posts/{post_id}/likes: Membatalkan suka pada postingan.GET /posts/{post_id}/likes: Mendapatkan likes pada postingan.
Skema Database:
Like:like_id,post_id,user_id,created_at.
Layanan Notifikasi:
Endpoints:
GET /notifications: Mendapatkan notifikasi untuk pengguna yang login.
Skema Database:
Notification:notification_id,user_id,type,data,read,created_at.
Layanan Pesan:
Endpoints:
POST /messages: Mengirim pesan.GET /conversations: Mendapatkan percakapan untuk pengguna yang login.GET /conversations/{conversation_id}: Mendapatkan pesan dalam percakapan.
Skema Database:
Message:message_id,conversation_id,sender_id,receiver_id,text,created_at.
Layanan Pencarian:
Endpoints:
GET /search: Mencari pengguna, postingan, dan hashtag.
Skema Database:
- Indeks pada
User,Post, danHashtag.
- Indeks pada
Layanan Cerita:
Endpoints:
POST /stories: Membuat cerita baru.GET /stories: Mendapatkan cerita untuk pengguna yang login.
Skema Database:
Story:story_id,user_id,media_url,created_at,expires_at.
Layanan Jelajahi:
Endpoints:
GET /explore: Mendapatkan rekomendasi postingan.
Skema Database:
- Menggunakan data dari
Post,Like, danUseruntuk menghasilkan rekomendasi.
- Menggunakan data dari
Lapisan Caching:
- Menggunakan Redis untuk caching data yang sering diakses seperti profil pengguna dan postingan untuk mengurangi beban pada database.
Pemantauan dan Logging:
- Implementasi logging untuk semua layanan menggunakan stack ELK (Elasticsearch, Logstash, Kibana) atau solusi serupa.
- Menggunakan Prometheus dan Grafana untuk pemantauan sistem dan peringatan.
Langkah Keamanan:
- Menggunakan JWT (JSON Web Tokens) untuk otentikasi pengguna.
- Mengenkripsi data sensitif baik saat istirahat maupun dalam transit.
- Audit keamanan secara berkala dan penilaian kerentanan.

Komentar
Posting Komentar