Tugas 9 - Desain Aplikasi Instagram
Desain Aplikasi Instagram
1. Requirements for Instagram System Design
Kebutuhan Fungsional untuk Desain Sistem Instagram
Dalam kebutuhan fungsional, kita tidak akan membahas halaman login atau pendaftaran Instagram. Arsitektur login dan pendaftaran sama untuk semua orang. Kita akan melihat lebih lanjut seperti memposting foto, dll.
- Posting foto dan video: Pengguna perlu dapat memposting foto dan video di Instagram.
- Mengikuti dan berhenti mengikuti pengguna: Pengguna perlu dapat mengikuti dan berhenti mengikuti pengguna lain di Instagram.
- Menyukai atau tidak menyukai postingan: Pengguna perlu dapat menyukai atau tidak menyukai postingan dari akun yang mereka ikuti.
- Mencari foto dan video: Pengguna perlu dapat mencari foto dan video berdasarkan keterangan dan lokasi.
- Menghasilkan umpan berita: Pengguna perlu dapat melihat umpan berita yang terdiri dari foto dan video (dalam urutan kronologis) dari semua pengguna yang mereka ikuti.
Kebutuhan Non-Fungsional untuk Desain Sistem Instagram
- Skalabilitas: Sistem perlu dapat diskalakan untuk menangani jutaan pengguna dalam hal sumber daya komputasi dan penyimpanan.
- Latensi: Latensi untuk menghasilkan umpan berita perlu rendah.
- Ketersediaan: Sistem perlu sangat tersedia.
- Daya Tahan: Konten yang diunggah (foto dan video) tidak boleh hilang.
- Konsistensi: Kita dapat sedikit mengkompromikan konsistensi. Dapat diterima jika konten (foto atau video) membutuhkan waktu untuk ditampilkan di umpan pengikut yang berada di wilayah yang jauh.
- Keandalan: Sistem perlu mampu mentoleransi kegagalan perangkat keras dan perangkat lunak
2. Estimasi Kapasitas untuk Desain Sistem Instagram
Kita memiliki 1 miliar pengguna, dengan 500 juta pengguna aktif harian. Asumsikan 60 juta foto dan 35 juta video dibagikan di Instagram setiap hari. Kita dapat mempertimbangkan 3 MB sebagai ukuran maksimum setiap foto dan 150 MB sebagai ukuran maksimum setiap video yang diunggah di Instagram. Rata-rata, setiap pengguna mengirimkan 20 permintaan (dari jenis apapun) per hari ke layanan kita.
Storage Per Day
Bandwidth Estimation
3. Use Case Diagram for Instagram System Design
Dalam Diagram di atas, kita telah membahas tentang diagram use case Instagram:
- Jika pengguna baru, mereka akan mendaftar terlebih dahulu dan informasinya akan disimpan dalam basis data, mereka akan memverifikasi profil.
- Jika pengguna sudah mendaftar, mereka akan menyediakan email dan kata sandi.
- Di halaman utama, mereka akan mendapatkan foto dan video, serta halaman cerita.
- Postingan yang baru saja diposting akan muncul di bagian atas. Pengguna dapat mengikuti atau berhenti mengikuti seseorang. Pengguna dapat melakukan siaran langsung. Semua ini tergantung pada mereka.
- Akan ada pengaturan di mana pengguna dapat melihat cerita lama mereka atau postingan yang telah diarsipkan. Pengguna dapat membuka blokir seseorang, mendapatkan akun terverifikasi setelah membayar.
4. Low-Level Design(LLD) for Instagram System Design
Layanan Pengguna (User Service):
- Menangani pendaftaran pengguna, login, autentikasi, dan manajemen profil.
- Menyimpan data pengguna seperti nama pengguna, email, bio, foto profil, dll.
- Terintegrasi dengan penyedia autentikasi sosial (misalnya, Facebook, Google).
Layanan Postingan (Post Service):
- Menangani unggahan, pengeditan, dan penghapusan foto dan video.
- Menyimpan metadata postingan seperti caption, tagar, lokasi, waktu, dll.
- Memproses media yang diunggah untuk pengubahan ukuran, penyaringan, dan pembuatan thumbnail.
- Mengelola transkoding foto dan video untuk perangkat dan resolusi yang berbeda.
Layanan Umpan (Feed Service):
- Menghasilkan umpan berita yang dipersonalisasi untuk setiap pengguna berdasarkan pengikut, suka, aktivitas, dan keterlibatan mereka.
- Memanfaatkan sistem terdistribusi seperti Apache Kafka atau RabbitMQ untuk pembaruan dan notifikasi real-time.
- Menggunakan lapisan cache seperti Redis untuk pengambilan umpan yang cepat dan mengurangi beban basis data.
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 mekanisme redundansi dan pemulihan bencana untuk perlindungan data.
Layanan Pencarian (Search Service):
- Memungkinkan pencarian pengguna, tagar, dan lokasi.
- Mengindeks pengguna, postingan, 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 postingan.
- Melacak thread komentar dan hubungan induk-anak.
- Memberi notifikasi kepada pengguna tentang komentar baru pada postingan mereka atau komentar yang mereka ikuti.
Layanan Notifikasi (Notification Service):
- Memberi informasi kepada pengguna tentang acara yang relevan seperti suka, komentar, sebutan, dan pengikut baru.
- Mengirim notifikasi ke perangkat seluler melalui platform seperti Firebase Cloud Messaging atau Amazon SNS.
- Memanfaatkan sistem antrian untuk pengiriman notifikasi secara asinkron.
Layanan Analitik (Analytics Service):
- Melacak keterlibatan pengguna, kinerja postingan, dan penggunaan platform secara keseluruhan.
- Mengumpulkan data tentang tampilan, suka, komentar, berbagi, dan klik.
- Memberikan wawasan untuk meningkatkan pengalaman pengguna, mengoptimalkan rekomendasi konten, dan menargetkan iklan.
5. High-Level Design(HLD) for Instagram System Design
Sistem kami harus memungkinkan kami untuk mengunggah, melihat, dan mencari gambar serta video pada tingkat tinggi. Untuk mengunggah gambar dan video, kami perlu menyimpannya, dan saat mengambilnya, kami perlu mengambil data dari penyimpanan. Selain itu, pengguna juga harus diizinkan untuk saling mengikuti.
Pada tingkat tinggi, Instagram dapat dilihat sebagai sistem dengan komponen utama dan interaksi sebagai berikut:
Komponen:
- Klien: Aplikasi seluler, aplikasi web, dan API yang menyediakan antarmuka bagi pengguna untuk berinteraksi dengan sistem.
- Autentikasi & Otorisasi: Menangani login pengguna, pendaftaran, dan kontrol akses.
- Manajemen Konten: Mengelola konten yang dihasilkan pengguna seperti foto, video, siaran langsung, cerita, dan pesan.
- Pembuatan Umpan: Memersonalisasi umpan berita untuk setiap pengguna berdasarkan pengikut, aktivitas, dan keterlibatan mereka.
- Graf Sosial: Melacak hubungan antara pengguna (mengikuti, pengikut, teman).
- Penemuan & Pencarian: Memungkinkan pencarian pengguna, tagar, lokasi, dan konten.
- Notifikasi: Memberi tahu pengguna tentang acara yang 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 memperbarui umpan pengguna dan pengikut yang relevan.
- Notifikasi memberi tahu pengguna yang tertarik.
Pengguna berinteraksi dengan konten:
- Klien mengirimkan tindakan suka/komentar/bagikan.
- Manajemen Konten dan Graf Sosial memperbarui data yang relevan.
- Pembuatan Umpan berpotensi mengubah urutan umpan berdasarkan interaksi baru.
- Notifikasi memberi tahu pengguna yang tertarik.
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.
- Graf Sosial memperbarui koneksi.
- Pembuatan Umpan menyesuaikan berdasarkan perubahan hubungan.
Pengguna memantau aktivitas:
- Klien memeriksa umpan notifikasi.
- Notifikasi memberikan pembaruan tentang acara yang relevan.
Pertimbangan Desain Utama:
- Skalabilitas: Sistem harus 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.
6. API Design for Instagram System Design
Memposting Foto dan Video
Berikut adalah desain API potensial untuk mengunggah foto dan video ke Instagram:
Endpoints:
- POST /media: Mengirimkan foto atau video baru.
- PUT /media/{media_id}: Memperbarui metadata yang ada untuk item media.
- DELETE /media/{media_id}: Menghapus item media.
Mengikuti dan Berhenti Mengikuti Pengguna
Berikut adalah desain API potensial untuk mengikuti dan berhenti mengikuti pengguna di Instagram:
Endpoints:
- POST /users/{user_id}/follow: Mengikuti pengguna yang ditentukan.
- DELETE /users/{user_id}/follow: Berhenti mengikuti pengguna yang ditentukan.
- GET /users/{user_id}/following: Mengambil daftar pengguna yang diikuti oleh pengguna yang ditentukan (dengan paginasi).
- GET /users/{user_id}/followers: Mengambil daftar pengguna yang mengikuti pengguna yang ditentukan (dengan paginasi).
Menyukai atau Tidak Menyukai Postingan
Merancang API untuk menyukai dan tidak menyukai postingan melibatkan beberapa pertimbangan. Berikut adalah rincian aspek kunci yang harus dipertimbangkan:
Endpoints API:
- GET /posts/{post_id}: Mengambil detail postingan, termasuk jumlah suka/tidak suka.
- POST /posts/{post_id}/like: Mendaftarkan suka untuk postingan oleh pengguna yang terautentikasi.
- POST /posts/{post_id}/dislike: Mendaftarkan tidak suka untuk postingan oleh pengguna yang terautentikasi.
- DELETE /posts/{post_id}/like: Menghapus suka untuk postingan oleh pengguna yang terautentikasi (jika sebelumnya sudah dilakukan).
- DELETE /posts/{post_id}/dislike: Menghapus tidak suka untuk postingan oleh pengguna yang terautentikasi (jika sebelumnya sudah dilakukan).
Mencari Foto dan Video
Endpoint Pencarian:
Biasanya merupakan permintaan POST ke endpoint /search.
Parameter Kueri:
- query: Istilah pencarian.
- media_type: Memfilter hasil berdasarkan foto, video, atau keduanya.
- Filter tambahan: Rentang tanggal, lokasi, orang, dll. (jika didukung).
7. Database Design for Instagram Database Design
- User:
- User_Follows:
- User Uploads:
- User Feed:
8. Scalability for Instagram System Design
Scalability merujuk pada kemampuan suatu organisasi (atau sistem, seperti jaringan komputer) untuk berperforma baik dalam beban kerja yang meningkat atau berkembang. Sistem yang dapat mengskalakan dengan baik akan mampu mempertahankan atau meningkatkan tingkat performanya bahkan saat diuji dengan tuntutan operasional yang semakin besar.
Kita dapat menambahkan lebih banyak server ke lapisan layanan aplikasi untuk meningkatkan skalabilitas dan menangani permintaan yang banyak dari klien. Kita juga dapat meningkatkan jumlah database untuk menyimpan data pengguna yang semakin bertambah.
Persyaratan ini telah tercakup:
- Scalability: Kita dapat menambahkan lebih banyak server ke lapisan layanan aplikasi untuk meningkatkan skalabilitas dan menangani permintaan yang banyak dari klien. Kita juga dapat meningkatkan jumlah database untuk menyimpan data pengguna yang semakin bertambah.
- Latency: Penggunaan cache dan CDN telah mengurangi waktu pengambilan konten.
- Availability: Kita telah membuat sistem tersedia untuk pengguna dengan menggunakan penyimpanan dan database yang direplikasi di seluruh dunia.
- Durability: Kita memiliki penyimpanan persisten yang menjaga cadangan data sehingga konten yang diunggah (foto dan video) tidak pernah hilang.
- Consistency: Kita menggunakan penyimpanan seperti blob store dan database untuk menjaga konsistensi data secara global.
- Reliability: Database kita menangani replikasi dan redundansi, sehingga sistem kita tetap dapat diandalkan dan data tidak hilang. Lapisan penyeimbang beban mengarahkan permintaan di sekitar server yang gagal.





Komentar
Posting Komentar