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:

  1. Otentikasi & Otorisasi Pengguna:

    • Mendaftarkan pengguna baru.
    • Fitur login dan logout.
    • Pemulihan kata sandi.
  2. Manajemen Profil Pengguna:

    • Melihat dan mengedit informasi profil.
    • Mengikuti dan berhenti mengikuti pengguna lain.
  3. Manajemen Postingan:

    • Mengunggah foto dan video.
    • Menyukai, mengomentari, dan membagikan postingan.
    • Melihat postingan di feed dan profil pengguna.
  4. Pesan:

    • Mengirim dan menerima pesan langsung.
    • Obrolan grup.
  5. Notifikasi:

    • Notifikasi real-time untuk likes, komentar, follow, dan pesan langsung.
  6. Pencarian:

    • Mencari pengguna, postingan, dan hashtag.
  7. Cerita (Stories):

    • Mengunggah konten yang hilang setelah 24 jam.
    • Melihat cerita dari pengguna yang diikuti.
  8. Jelajahi (Explore):

    • Menemukan konten baru berdasarkan preferensi dan perilaku pengguna.

Persyaratan Non-Fungsional:

  1. Kinerja:

    • Waktu respons cepat (< 200 ms untuk interaksi pengguna).
    • Menangani hingga 1 juta pengguna bersamaan.
  2. Skalabilitas:

    • Skalabilitas horizontal untuk mendukung pertumbuhan basis pengguna.
    • Kemampuan menangani beban puncak dengan efisien.
  3. Keamanan:

    • Mengamankan data pengguna dengan enkripsi (dalam transit dan saat istirahat).
    • Implementasi mekanisme otorisasi dan otentikasi yang kuat.
  4. Keandalan:

    • Ketersediaan tinggi (uptime 99.9%).
    • Cadangan otomatis dan pemulihan bencana.
  5. 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:

  1. Frontend:

    • Aplikasi Mobile (iOS, Android).
    • Antarmuka Web.
  2. 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.
  3. 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.
  4. Caching:

    • Redis atau Memcached untuk caching data yang sering diakses (misalnya profil pengguna, postingan).
  5. Penyimpanan:

    • AWS S3 atau sejenisnya untuk menyimpan gambar dan video.
  6. CDN:

    • Jaringan Pengiriman Konten untuk pengiriman cepat konten media.
  7. Analitik:

    • Pipeline pemrosesan data untuk analitik (misalnya, perilaku pengguna, keterlibatan postingan).
  8. 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, dan Hashtag.

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, dan User untuk menghasilkan rekomendasi.

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

Postingan populer dari blog ini

Latihan 1 (PBKK)

PPL-ETS

PPL-EAS