Perancangan Perangkat Lunak - Tugas Pertemuan 13 - Desain System Aplikasi Instagram
Nama : Timothy Hosia Budianto
NRP : 5025211098
Kelas : PPL - A
Tahun : 2024
Design Systen Instagram
Apa itu Instagram?
Instagram adalah layanan jaringan sosial berbagi foto dan video asal Amerika yang dimiliki oleh Meta Platforms. Platform ini memungkinkan pengguna untuk mengunggah media yang dapat diedit dengan filter, diorganisir dengan hashtag, dan dapat dihubungkan dengan lokasi melalui penandaan geografis. Posting dapat dibagikan secara publik atau hanya kepada pengikut yang sudah disetujui.
Persyaratan untuk Desain Sistem Instagram
Persyaratan Fungsional untuk Desain Sistem Instagram
- Dalam Persyaratan Fungsional, kita tidak akan membahas halaman login atau signup Instagram. Arsitektur login dan signup sama untuk semua orang. Kita akan lebih memfokuskan pada posting foto, dll.
- Mengirimkan foto dan video: Pengguna dapat mengirimkan foto dan video di Instagram.
- Mengikuti dan berhenti mengikuti pengguna: Pengguna dapat mengikuti dan berhenti mengikuti pengguna lain di Instagram.
- Menyukai atau tidak menyukai postingan: Pengguna dapat menyukai atau tidak menyukai postingan dari akun yang mereka ikuti.
- Mencari foto dan video: Pengguna dapat mencari foto dan video berdasarkan keterangan dan lokasi.
- Menghasilkan berita feed: Pengguna dapat melihat berita feed yang terdiri dari foto dan video (secara kronologis) dari semua pengguna yang mereka ikuti.
Persyaratan Non-Fungsional untuk Desain Sistem Instagram
- Skalabilitas: Sistem harus dapat ditingkatkan untuk menangani jutaan pengguna dalam hal sumber daya komputasi dan penyimpanan.
- Latensi: Latensi untuk menghasilkan berita feed harus rendah.
- Ketersediaan: Sistem harus sangat tersedia.
- Daya tahan: Setiap konten yang diunggah (foto dan video) tidak boleh hilang.
- Konsistensi: Kita dapat sedikit mengorbankan konsistensi. Dapat diterima jika konten (foto atau video) memerlukan waktu untuk muncul di feed pengikut yang berada di wilayah yang jauh.
- Keandalan: Sistem harus dapat mentolerir kegagalan perangkat keras dan perangkat lunak.
Estimasi Kapasitas untuk Desain Sistem Instagram
Kami memiliki 1 miliar pengguna, dengan 500 juta pengguna aktif harian. Diasumsikan 60 juta foto dan 35 juta video dibagikan di Instagram setiap hari. Kami dapat menganggap 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 apa pun) per hari ke layanan kami.
Penyimpanan Per Hari
Foto: 60 juta foto/hari * 3 MB = 180 TeraByte / hari
Video: 35 juta video/hari * 150 MB = 5250 TB / hari
Total ukuran konten = 180 + 5250 = 5430 TB
Total Ruang yang Dibutuhkan dalam Setahun:
5430 TB/hari * 365 (hari dalam setahun) = 1981950 TB = 1981.95 PetaByte
Estimasi Bandwidth
5430 TB/(24 * 60 * 60) = 5430 TB/86400 detik ~= 62.84 GB/detik ~= 502.8 Gbps
Bandwidth masuk ~= 502.8 Gbps
Katakanlah rasio pembaca terhadap penulis adalah 100:1.
Bandwidth keluar yang dibutuhkan ~= 100 * 502.8 Gbps ~= 50.28 Tbps
Use Case Diagram for Instagram System Design
Pada diagram di atas, kita telah membahas tentang diagram kasus pengguna dari Instagram:
Jika pengguna baru, mereka akan mendaftar terlebih dahulu dan data mereka akan disimpan di database, mereka akan memverifikasi profil mereka.
Jika pengguna sudah mendaftar, mereka akan menyediakan email dan kata sandi.
Di halaman utama, mereka akan melihat foto dan video, serta halaman cerita.
Postingan yang baru diposting akan muncul di bagian atas. Pengguna dapat mengikuti atau berhenti mengikuti orang lain. Pengguna dapat melakukan siaran langsung. Semuanya tergantung pada mereka.
Akan ada pengaturan di mana pengguna dapat melihat cerita masa lalu mereka atau postingan yang sudah diarsipkan. Pengguna dapat memblokir orang, mendapatkan akun yang diverifikasi dengan membayar.
LLD Sistem Instagram
Ini adalah pembagian komponen-komponen utama dan interaksi untuk desain rendah Instagram:
Layanan Pengguna:
Mengelola pendaftaran pengguna, login, otentikasi, dan manajemen profil.
Menyimpan data pengguna seperti nama pengguna, email, bio, foto profil, dll.
Terintegrasi dengan penyedia otentikasi sosial (misalnya, Facebook, Google).
Layanan Posting:
Mengelola unggahan, pengeditan, dan penghapusan foto dan video.
Menyimpan metadata posting seperti keterangan, hashtag, lokasi, timestamp, dll.
Memproses media yang diunggah untuk resizing, filtering, dan pembuatan thumbnail.
Mengelola transkoding foto dan video untuk perangkat dan resolusi yang berbeda.
Layanan Feed:
Menghasilkan feed berita yang dipersonalisasi untuk setiap pengguna berdasarkan 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 feed yang cepat dan meminimalkan beban database.
Layanan Penyimpanan:
Menyimpan foto dan video yang diunggah secara efisien dan dapat diandalkan.
Menggunakan solusi penyimpanan objek yang dapat diskalakan seperti Amazon S3, Google Cloud Storage, atau Azure Blob Storage.
Menerapkan mekanisme redundansi dan pemulihan bencana untuk perlindungan data.
Layanan Pencarian:
Memungkinkan pencarian pengguna, hashtag, dan lokasi.
Mengindeks pengguna, posting, dan hashtag berdasarkan parameter-parameter relevan.
Menggunakan algoritma pencarian dan pengindeksan yang efisien untuk hasil yang cepat dan akurat.
Layanan Komentar:
Mengelola penambahan, pengeditan, dan penghapusan komentar pada postingan.
Melacak utas komentar dan hubungan induk-anak.
Memberi tahu pengguna tentang komentar baru pada postingan mereka sendiri atau komentar yang mereka ikuti.
Layanan Notifikasi:
Memberitahu pengguna tentang peristiwa-peristiwa penting seperti suka, komentar, mention, dan pengikut.
Mendorong pemberitahuan ke perangkat mobile melalui platform seperti Firebase Cloud Messaging atau Amazon SNS.
Memanfaatkan sistem antrian untuk pengiriman pemberitahuan secara asinkron.
Layanan Analitik:
Melacak keterlibatan pengguna, performa 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 menyasar iklan.
Mengapa kita membutuhkan caching untuk menyimpan data?
Meng-cache data untuk menangani jutaan pembacaan. Ini meningkatkan pengalaman pengguna dengan membuat proses pengambilan lebih cepat. Kami juga akan memilih lazy loading, yang mengurangi waktu tunggu klien.
Ini memungkinkan kami untuk memuat konten saat pengguna menggulir dan dengan demikian menghemat bandwidth dan fokus pada memuat konten yang sedang dilihat pengguna saat ini. Ini meningkatkan latensi untuk melihat atau mencari foto atau video tertentu di Instagram.
HLD Sistem Instagram
Sistem kami harus memungkinkan kami untuk mengunggah, melihat, dan mencari gambar dan video pada tingkat tinggi. Untuk mengunggah gambar dan video, kami perlu menyimpannya, dan saat mengambil, kami perlu mengambil data dari penyimpanan. Selain itu, pengguna juga harus diizinkan untuk saling mengikuti.
Secara umum, Instagram dapat dilihat sebagai sistem dengan komponen-komponen dan interaksi sebagai berikut:
Komponen:
- Klien: Aplikasi seluler, aplikasi web, dan API yang menyediakan antarmuka untuk pengguna berinteraksi dengan sistem.
- Autentikasi & Otorisasi: Mengelola login pengguna, registrasi, dan kontrol akses.
- Manajemen Konten: Mengelola konten yang dihasilkan pengguna seperti foto, video, siaran langsung, cerita, dan pesan.
- Pembuatan Feed: Mempersonalisasi feed berita untuk setiap pengguna berdasarkan yang mereka ikuti, aktivitas, dan keterlibatan.
- Graf Sosial: Melacak hubungan antara pengguna (mengikuti, pengikut, teman).
- Penemuan & Pencarian: Memungkinkan pencarian untuk pengguna, hashtag, lokasi, dan konten.
- Notifikasi: Memberitahu pengguna tentang peristiwa-peristiwa penting seperti suka, komentar, mention, dan pengikut.
- Analitika & Pelaporan: Melacak keterlibatan pengguna, performa konten, dan penggunaan platform secara keseluruhan.
Interaksi:
- Pengguna membuat konten:
- Klien mengunggah foto/video.
- Manajemen Konten menyimpan media dan metadata.
- Pembuatan Feed memperbarui feed pengguna dan pengikut yang relevan.
- Notifikasi memberi tahu pengguna yang tertarik.
- Pengguna berinteraksi dengan konten:
- Klien mengirim tindakan suka/komentar/bagikan.
- Manajemen Konten dan Graf Sosial memperbarui data yang relevan.
- Pembuatan Feed potensial mengatur ulang feed berdasarkan interaksi baru.
- Notifikasi memberi tahu pengguna yang tertarik.
- Pengguna menemukan konten baru:
- Klien menggunakan fungsionalitas pencarian.
- Penemuan & Pencarian mengidentifikasi konten yang relevan.
- Klien menampilkan hasil pencarian.
- Pengguna mengelola koneksi:
- Klien mengirim permintaan mengikuti/berhenti mengikuti.
- Graf Sosial memperbarui koneksi.
- Pembuatan Feed menyesuaikan berdasarkan perubahan hubungan.
- Pengguna memonitor aktivitas:
- Klien memeriksa feed notifikasi.
- Notifikasi memberikan pembaruan tentang peristiwa-peristiwa yang relevan.
Pertimbangan Desain Utama:
- Skalabilitas: Sistem harus mampu menangani jutaan pengguna dan volume data yang besar.
- Performa: Memberikan waktu respons cepat untuk interaksi pengguna dan pengiriman konten.
- Keandalan: Memastikan ketersediaan tinggi dan mencegah kehilangan data.
- Keamanan: Melindungi data dan privasi pengguna.
- Keterlibatan: Mendesain fitur yang mendorong interaksi pengguna dan pembuatan konten.
Pemilihan Database untuk Penyimpanan Data
Penting untuk memilih jenis database yang tepat untuk sistem Instagram kita, tetapi mana yang menjadi pilihan yang tepat — SQL atau NoSQL? Data kita secara inheren relasional, dan kita memerlukan urutan untuk data (posting harus muncul secara kronologis) dan tidak ada kehilangan data bahkan dalam kasus kegagalan (durabilitas data). Selain itu, dalam kasus kita, kita akan mendapatkan manfaat dari kueri relasional seperti mengambil pengikut atau gambar berdasarkan ID pengguna. Oleh karena itu, database berbasis SQL memenuhi persyaratan ini.
Mikro Layanan untuk Desain Sistem Instagram
Layanan pembuatan gambar dan feed digunakan sebagai arsitektur mikro layanan.
Mikro layanan — juga dikenal sebagai arsitektur mikro layanan — adalah gaya arsitektur yang membangun sebuah aplikasi sebagai kumpulan layanan yang:
- Dapat di-deploy secara independen
- Longgar terikat
- Diorganisir sekitar kemampuan bisnis
- Dimiliki oleh tim kecil
- Arsitektur mikro layanan memungkinkan sebuah organisasi untuk mengirimkan aplikasi yang besar dan kompleks dengan cepat, sering, dapat diandalkan, dan berkelanjutan — suatu kebutuhan untuk bersaing dan menang dalam dunia saat ini.
- Skalabilitas untuk Desain Sistem Instagram
- Skalabilitas mengacu pada kemampuan sebuah organisasi (atau sistem, seperti jaringan komputer) untuk berperforma baik di bawah beban kerja yang meningkat atau membesar. Sistem yang dapat di-skala dengan baik akan dapat mempertahankan atau meningkatkan tingkat performanya bahkan saat diuji oleh tuntutan operasional yang lebih besar dan lebih besar.
- Kita dapat menambahkan lebih banyak server ke lapisan layanan aplikasi untuk meningkatkan skalabilitas dan menangani permintaan yang banyak dari klien-klien. Kita juga dapat meningkatkan jumlah database untuk menyimpan data pengguna yang bertambah.
Persyaratan ini sudah tercakup:
- Skalabilitas: Kita dapat menambahkan lebih banyak server ke lapisan layanan aplikasi untuk meningkatkan skalabilitas dan menangani permintaan yang banyak dari klien-klien. Kita juga dapat meningkatkan jumlah database untuk menyimpan data pengguna yang bertambah.
- Latensi: Penggunaan cache dan CDN telah mengurangi waktu pengambilan konten.
- Ketersediaan: Kita telah membuat sistem tersedia bagi pengguna dengan menggunakan penyimpanan dan database yang direplikasi di seluruh dunia.
- Durabilitas: Kita memiliki penyimpanan persisten yang mempertahankan cadangan data sehingga konten yang diunggah (foto dan video) tidak pernah hilang.
- Konsistensi: Kita telah menggunakan penyimpanan seperti blob store dan database untuk menjaga konsistensi data secara global.
- Keandalan: Database kita menangani replikasi dan redundansi, sehingga sistem kita tetap andal dan data tidak hilang. Lapisan penyeimbang beban mengarahkan permintaan di sekitar server-server yang gagal.
Kesimpulan
Dalam artikel ini kita telah membahas desain Instagram di mana kita membahas tentang menyimpan posting dan video, menyukai dan tidak menyukai posting, menampilkan feed, mengirimkan posting atau video, dan bagaimana kita dapat menggunakan hashtag. Desain sistem Instagram adalah arsitektur yang kompleks dan canggih yang memprioritaskan skalabilitas, ketersediaan, keamanan, dan pengalaman pengguna. Keberhasilan platform ini tidak hanya disumbangkan oleh antarmuka yang ramah pengguna tetapi juga infrastruktur backend yang kokoh yang mendukung basis pengguna besar dan konten dinamis.
Comments
Post a Comment