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
, danUser
untuk 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