Tugas 9 - Perancangan Perangkat Lunak (A)
Nama : Yusna Millaturrosyidah
NRP : 5025211254
Kelas : Perancangan Perangkat Lunak (A)
Desain System Aplikasi Instagram
Deskripsi Aplikasi
Instagram adalah aplikasi media sosial gratis untuk berbagi foto dan video dengan pengikut Anda. Aplikasi ini memiliki berbagai fitur, mulai dari video pendek hingga siaran langsung dan pesan pribadi.
Pengguna dapat mengunggah konten media seperti foto dan video ke platform ini. Konten tersebut dapat diedit dengan filter, dikelompokkan menggunakan tagar (hashtags), dan dikaitkan dengan lokasi menggunakan penanda geografis. Postingan dapat dibagikan secara publik atau hanya kepada pengikut yang telah disetujui sebelumnya.
Instagram memungkinkan pengguna untuk berinteraksi dengan konten yang diunggah oleh orang lain melalui menyukai (like), memberikan komentar, atau mengirim pesan langsung. Platform ini juga menawarkan fitur seperti cerita (Stories) yang bersifat sementara, di mana pengguna dapat berbagi momen dalam format yang menghilang setelah beberapa waktu.
Sebagai bagian dari Meta Platforms, Instagram menyediakan pengalaman berbagi yang intuitif dan menyeluruh, memungkinkan pengguna untuk mengekspresikan diri mereka sendiri melalui gambar dan video dengan cara yang kreatif dan interaktif.
Spesifikasi Kebutuhan/Requirements
A. Functional Requirements (Kebutuhan Fungsional)
Unggah Foto dan Video:
- Pengguna dapat mengunggah foto dan video ke Instagram.
- Setelah diunggah, konten ini dapat diedit dengan filter dan disertai dengan caption.
Ikuti dan Berhenti Mengikuti Pengguna:
- Pengguna dapat mengikuti dan berhenti mengikuti pengguna lain di Instagram.
Suka atau Tidak Suka Postingan:
- Pengguna dapat memberikan like atau dislike pada postingan dari akun yang diikuti.
Pencarian Foto dan Video:
- Pengguna dapat melakukan pencarian berdasarkan teks yang ada di caption atau berdasarkan lokasi terkait yang terkait dengan konten yang diunggah.
Membuat News Feed:
- Sistem harus dapat menyusun news feed untuk setiap pengguna berdasarkan postingan dari pengguna yang mereka ikuti.
- Urutan kronologis harus dipertahankan atau disesuaikan dengan preferensi pengguna.
Scalability (Kemampuan Skalabilitas):
- Sistem harus dapat menangani jutaan pengguna dengan sumber daya komputasi dan penyimpanan yang memadai.
- Skalabilitas ini terutama untuk beban kerja yang berat pada operasi baca (read-heavy workloads).
Latency (Waktu Tunggu):
- Waktu tunggu untuk menghasilkan news feed harus rendah agar pengalaman pengguna tetap responsif.
- Meskipun sistem mengutamakan konsistensi akhir (eventual consistency), toleransi waktu tunggu harus tetap rendah.
Availability (Ketersediaan):
- Sistem harus tersedia secara tinggi untuk memastikan layanan terus tersedia bagi pengguna di berbagai waktu.
Durability (Daya Tahan):
- Semua konten yang diunggah (foto dan video) tidak boleh hilang, dan sistem harus memastikan keberlanjutannya meskipun terjadi kegagalan perangkat keras atau lunak.
Consistency (Konsistensi):
- Meskipun sistem dapat mengorbankan sedikit konsistensi (eventual consistency), konten seperti foto atau video harus tetap konsisten dalam jangka waktu yang wajar untuk tampil di feed pengikut yang berada di wilayah yang berbeda.
Reliability (Keandalan):
- Sistem harus mampu menangani kegagalan perangkat keras dan lunak tanpa mengganggu penggunaan normal aplikasi.
Kesimpulan : Instagram membutuhkan desain sistem yang kuat untuk mengakomodasi unggahan besar foto dan video dari jutaan pengguna, serta interaksi sosial seperti mengikuti, memberi like, dan pencarian konten. Kebutuhan fungsional mencakup operasi dasar seperti unggah konten, interaksi pengguna, dan pembuatan feed berdasarkan preferensi pengguna. Kebutuhan non-fungsional menekankan skalabilitas untuk menangani beban kerja besar, rendahnya waktu tunggu dalam menghasilkan feed, ketersediaan tinggi, daya tahan data, konsistensi eventual, dan keandalan sistem yang tinggi terhadap kegagalan. Implementasi solusi seperti penyimpanan cloud, database yang dapat diperluas, caching, dan mekanisme pemulihan otomatis penting untuk memenuhi semua kebutuhan ini dan memberikan pengalaman pengguna yang optimal dan terjamin.
Capacity Estimation
Traffic Estimation
Dengan jumlah pengguna terdaftar sebanyak 500 juta dan 100 juta di antaranya adalah pengguna harian :
- Pengguna Harian: Sekitar 1% dari 100 juta pengguna harian (1 juta pengguna) adalah pengguna aktif yang mengunggah foto dan video setiap hari.
- Unggahan Harian: Sekitar 5 juta foto diunggah setiap hari, dengan laju sekitar 57 unggahan per detik.
Storage Estimation
Berikut adalah perhitungan rinci untuk kebutuhan penyimpanan Instagram :
- Ukuran Rata-rata Foto: Sekitar 200 Kilobit (Kb) per foto.
- Penyimpanan per hari untuk foto: 200 Kb * 5 juta = ~1 Terabyte (TB)
- Penyimpanan per tahun untuk foto: 1 TB * 365 = ~365 TB
- Ukuran Rata-rata Video: Sekitar 50 Megabyte (MB) per video.
- Penyimpanan per hari untuk video (untuk 1 juta pengguna aktif): 1 juta * 50 MB = ~50 Terabyte (TB)
Storage Per Day
Setiap hari, Instagram menghadapi volume besar data yang diunggah oleh pengguna :
- Foto: Sebanyak 60 juta foto diunggah setiap hari, dengan ukuran maksimum 3 MB per foto.
- Total penyimpanan per hari untuk foto: 60 juta * 3 MB = 180 Terabyte (TB)
- Video: Sebanyak 35 juta video diunggah setiap hari, dengan ukuran maksimum 150 MB per video.
- Total penyimpanan per hari untuk video: 35 juta * 150 MB = 5250 Terabyte (TB)
- Total Konten: Jumlah keseluruhan untuk penyimpanan per hari adalah:
- Total = 180 TB (foto) + 5250 TB (video) = 5430 TB
- Perhitungan Kapasitas Tahunan : Untuk memperkirakan kebutuhan penyimpanan dalam setahun, kita mengalikan total harian dengan jumlah hari dalam setahun:
- Total penyimpanan tahunan = 5430 TB/hari * 365 hari = 1,981,950 TB = 1981.95 Petabyte (PB)
Artinya, Instagram membutuhkan sekitar 1981.95 Petabyte ruang penyimpanan setiap tahun untuk mengelola semua foto dan video yang diunggah pengguna.
Bandwidth Estimation
Bandwidth diperlukan untuk mengelola traffic data yang masuk dan keluar dari Instagram :
- Incoming Bandwidth (Masuk): Diperkirakan sekitar 62.84 Gigabyte per detik (GBps) atau sekitar 502.8 Gigabit per detik (Gbps) dibutuhkan untuk menerima unggahan dari pengguna.
- Outgoing Bandwidth (Keluar): Dengan rasio pembaca terhadap penulis 100:1, diperlukan bandwidth keluar sekitar 50.28 Terabit per detik (Tbps).
Kesimpulan : Estimasi kapasitas untuk Instagram mencakup perhitungan detail untuk lalu lintas harian, kebutuhan penyimpanan untuk foto dan video, serta bandwidth yang diperlukan untuk mengelola semua unggahan dan memastikan pengalaman pengguna yang lancar dan responsif di seluruh platform. Dengan volume yang sangat besar seperti ini, infrastruktur yang kuat dan skalabel sangat penting untuk menjaga ketersediaan dan keandalan layanan Instagram.
Use Case Diagram
Komponen Utama dalam Use Case Diagram Instagram
Aktor
- Pengguna Baru (New User): Pengguna yang belum pernah mendaftar di Instagram.
- Pengguna Terdaftar (Registered User): Pengguna yang sudah memiliki akun dan dapat melakukan login.
- Sistem Instagram (Instagram System): Sistem yang menangani semua permintaan dari pengguna.
Use Cases Utama
- Registrasi: Pengguna baru mendaftar di Instagram dengan memberikan informasi yang diperlukan seperti email, nama, dan kata sandi.
- Login: Pengguna yang sudah terdaftar memasukkan email dan kata sandi untuk mengakses akun mereka.
- Mengunggah Foto/Video: Pengguna mengunggah konten berupa foto atau video ke profil mereka.
- Melihat Feed: Pengguna melihat konten terbaru dari orang-orang yang mereka ikuti di halaman utama.
- Mengikuti/Mengunfollow Pengguna: Pengguna dapat mengikuti atau berhenti mengikuti pengguna lain.
- Melakukan Live Streaming: Pengguna dapat melakukan siaran langsung untuk pengikut mereka.
- Melihat Story: Pengguna dapat melihat story dari pengguna lain yang mereka ikuti.
- Mengarsipkan Post: Pengguna dapat mengarsipkan postingan yang mereka buat sebelumnya.
- Pengaturan Akun: Pengguna dapat mengakses pengaturan untuk melihat cerita atau postingan yang telah diarsipkan, membuka blokir pengguna lain, atau mendapatkan verifikasi akun.
Interaksi dalam Use Case Diagram
Pengguna Baru
- Registrasi: Pengguna baru mengisi formulir pendaftaran yang disimpan dalam basis data. Setelah itu, pengguna baru akan memverifikasi profil mereka melalui email atau nomor telepon.
Pengguna Terdaftar
- Login: Pengguna yang sudah mendaftar memasukkan email dan kata sandi untuk masuk ke akun mereka.
- Beranda (Home Page): Setelah login, pengguna dapat melihat foto dan video terbaru dari pengguna lain yang mereka ikuti, serta story yang ada.
- Mengunggah Foto/Video: Pengguna dapat mengunggah foto atau video baru yang akan tampil di bagian atas feed mereka.
- Interaksi Sosial: Pengguna dapat mengikuti atau mengunfollow pengguna lain, dan mereka dapat melakukan siaran langsung.
- Pengaturan Akun: Pengguna dapat mengakses pengaturan akun untuk mengelola cerita yang telah diarsipkan, membuka blokir pengguna lain, atau mendapatkan verifikasi akun setelah melakukan pembayaran.
Kseimpulan : Use case diagram untuk Instagram menggambarkan berbagai interaksi pengguna dengan sistem, mencakup semua fitur utama yang tersedia di platform. Dengan diagram ini, kita bisa memahami alur kerja dan bagaimana berbagai komponen berinteraksi untuk memberikan pengalaman pengguna yang menyeluruh dan intuitif. Diagram ini juga membantu pengembang dan pemangku kepentingan lainnya untuk memahami kebutuhan dan fungsionalitas yang harus didukung oleh sistem.
High-Level Design
Desain tingkat tinggi (High-Level Design) untuk Instagram menggambarkan komponen-komponen utama dan interaksi antar mereka dalam sistem ini, yang dirancang untuk mendukung unggahan, penampilan, dan pencarian gambar serta video dengan efisien.
Komponen Utama :
Client:
- Terdiri dari aplikasi mobile, aplikasi web, dan API yang memberikan antarmuka untuk pengguna berinteraksi dengan sistem.
- Pengguna menggunakan client untuk mengunggah foto, video, dan berinteraksi dengan konten lainnya.
Authentication & Authorization:
- Mengelola proses login, registrasi pengguna, dan kontrol akses ke sistem.
- Memastikan bahwa hanya pengguna yang terotorisasi yang dapat mengakses konten dan fitur tertentu.
Content Management:
- Bertanggung jawab atas manajemen konten yang dihasilkan oleh pengguna seperti foto, video, live streams, stories, dan pesan.
- Menyimpan media dan metadata terkait secara aman dan efisien.
Feed Generation:
- Menghasilkan feed berita yang dipersonalisasi untuk setiap pengguna berdasarkan siapa yang mereka ikuti, aktivitas, dan keterlibatan.
- Mengatur ulang feed berdasarkan interaksi baru untuk meningkatkan relevansi konten.
Social Graph:
- Melacak hubungan antara pengguna, termasuk siapa yang diikuti, pengikut, dan teman.
- Memungkinkan sistem untuk memahami dan menyesuaikan feed berdasarkan perubahan hubungan sosial pengguna.
Discovery & Search:
- Memfasilitasi pencarian pengguna, hashtag, lokasi, dan konten.
- Menyediakan hasil pencarian yang relevan untuk pengguna berdasarkan kriteria pencarian yang diberikan.
Notifications:
- Memberikan pemberitahuan kepada pengguna tentang peristiwa yang relevan seperti suka, komentar, tag, dan pengikut baru.
- Memastikan pengguna tetap terinformasi tentang aktivitas yang penting dalam jaringan mereka.
Analytics & Reporting:
- Melacak keterlibatan pengguna, performa konten, dan penggunaan platform secara keseluruhan.
- Memberikan wawasan kepada tim pengembangan untuk memahami tren penggunaan dan meningkatkan pengalaman pengguna.
Interaksi :
User creates content:
- Pengguna mengunggah foto/video melalui client.
- Manajemen konten menyimpan media dan metadata.
- Feed Generation memperbarui feed pengguna dan pengikut yang relevan.
- Notifications memberi tahu pengguna tentang konten baru.
User interacts with content:
- Pengguna memberi like/komentar/bagikan pada konten.
- Manajemen konten dan Social Graph memperbarui data yang relevan.
- Feed Generation mengatur ulang feed berdasarkan interaksi baru.
- Notifications memberi tahu pengguna tentang interaksi terbaru.
User discovers new content:
- Pengguna menggunakan fitur pencarian.
- Discovery & Search mengidentifikasi konten yang relevan.
- Client menampilkan hasil pencarian kepada pengguna.
User manages connections:
- Pengguna mengirim permintaan untuk mengikuti/berhenti mengikuti.
- Social Graph memperbarui hubungan.
- Feed Generation menyesuaikan feed berdasarkan perubahan hubungan.
User monitors activity:
- Pengguna memeriksa feed pemberitahuan.
- Notifications memberikan pembaruan tentang peristiwa yang relevan.
Pertimbangan Desain Utama :
Desain Instagram mempertimbangkan beberapa faktor penting:
- Scalability: Sistem harus mampu menangani jutaan pengguna dan volume data yang besar.
- Performance: Memberikan waktu respons cepat untuk interaksi pengguna dan pengiriman konten.
- Reliability: Memastikan ketersediaan tinggi dan mencegah kehilangan data.
- Security: Melindungi data pengguna dan privasi mereka dengan ketat.
- Engagement: Mendesain fitur yang mendorong interaksi pengguna dan kreasi konten.
Desain ini menggambarkan arsitektur yang kompleks namun terintegrasi dengan baik, memungkinkan Instagram untuk menyediakan pengalaman pengguna yang responsif, interaktif, dan aman di seluruh platform mereka.
Low-Level Design
Desain tingkat rendah (Low-Level Design) untuk Instagram menguraikan komponen-komponen utama dan interaksi antara mereka yang diperlukan untuk mengelola berbagai fitur dalam sistem ini secara detail.
- User Service
- Mengelola registrasi pengguna, login, autentikasi, dan manajemen profil.
- Menyimpan data pengguna seperti username, email, bio, foto profil, dll.
- Integrasi dengan penyedia autentikasi sosial seperti Facebook, Google untuk login sosial.
- Post Service
- Mengelola unggahan foto dan video, termasuk edit dan penghapusan.
- Menyimpan metadata posting seperti keterangan, hashtag, lokasi, waktu unggah, dll.
- Memproses media yang diunggah untuk resize, filter, dan pembuatan thumbnail.
- Melakukan transkoding foto dan video untuk berbagai perangkat dan resolusi.
- Feed Service
- Menghasilkan feed berita yang dipersonalisasi untuk setiap pengguna berdasarkan siapa yang mereka ikuti, suka, aktivitas, dan keterlibatan.
- Menggunakan sistem terdistribusi seperti Apache Kafka atau RabbitMQ untuk pembaruan dan notifikasi real-time.
- Memanfaatkan lapisan cache seperti Redis untuk mengambil feed secara cepat dan mengurangi beban database.
- 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.
- Search Service
- Memungkinkan pencarian pengguna, hashtag, dan lokasi.
- Mengindeks pengguna, posting, dan hashtag berdasarkan parameter yang relevan.
- Menggunakan algoritma pengindeksan dan pencarian yang efisien untuk hasil yang cepat dan akurat.
- Comment Service
- Mengelola penambahan, pengeditan, dan penghapusan komentar pada posting.
- Melacak thread komentar dan hubungan parent-child.
- Memberi notifikasi kepada pengguna tentang komentar baru pada posting mereka sendiri atau komentar di mana mereka terlibat.
- Notification Service
- Memberitahukan pengguna tentang peristiwa penting seperti suka, komentar, mention, dan pengikut baru.
- Mengirimkan notifikasi push ke perangkat mobile melalui platform seperti Firebase Cloud Messaging atau Amazon SNS.
- Memanfaatkan sistem antrian untuk pengiriman notifikasi secara asinkron.
- Analytics Service
- Melacak keterlibatan pengguna, performa posting, dan penggunaan platform secara keseluruhan.
- Mengumpulkan data tentang tampilan, suka, komentar, bagikan, dan klik.
- Memberikan wawasan untuk meningkatkan pengalaman pengguna, mengoptimalkan rekomendasi konten, dan menyasar iklan.
Databse Design
Instagram memerlukan desain basis data yang efisien untuk mengelola jutaan pengguna, unggahan foto, video, serta feed pengguna dengan performa tinggi dan keandalan yang baik. Berikut adalah desain tabel dan implementasi teknologi yang diperlukan:
Tabel Users adalah Tabel untuk menyimpan data pengguna seperti nama, email, dan tanggal pembuatan akun.
Kolom:
userId
: ID unik untuk setiap pengguna (HashKey)name
: Nama lengkap penggunaemailId
: Alamat email penggunacreationDateInUtc
: Tanggal pembuatan akun dalam format UTC
Tabel User_Follows adalah Tabel untuk menyimpan data pengikut antar pengguna.
Kolom:
followingUserId_followerUserId
: Kombinasi ID pengguna yang diikuti dan pengikut (HashKey)followingUserId
: ID pengguna yang diikutifollowerUserId
: ID pengikutcreationDateInUtc
: Tanggal hubungan pengikut dimulai dalam format UTC
Tabel User_uploads adalah Tabel untuk menyimpan data unggahan foto dan video dari pengguna.
Kolom:
uploadId
: ID unik untuk setiap unggahan (HashKey)userId
: ID pengguna yang melakukan unggahan (RangeKey)imageLocation
: Lokasi penyimpanan foto atau videouploadDateInUtc
: Tanggal unggahan dalam format UTCcaption
: Keterangan untuk unggahan tersebut
Tabel User_feed adalah Tabel untuk menyimpan data feed pengguna, yang berisi unggahan terbaru dari pengguna yang diikuti.
Kolom:
userId
: ID pengguna yang memiliki feed (HashKey)uploadId
: ID unik untuk setiap unggahancreationDateInUtc
: Tanggal unggahan dimasukkan ke dalam feed pengguna dalam format UTC (RangeKey)
Implementasi Teknologi
Instagram menggunakan teknologi berikut untuk mendukung kebutuhan desain basis data yang kompleks:
Reliable
- Definisi: Keandalan dalam konteks ini berarti memastikan bahwa setiap foto dan video yang diunggah oleh pengguna tidak akan hilang.
- Implementasi: Untuk mencapai ini, Instagram menggunakan penyimpanan objek yang andal seperti Amazon S3, yang menawarkan redundansi data otomatis. Data disimpan dalam beberapa lokasi yang terpisah secara geografis untuk memastikan bahwa meskipun satu lokasi mengalami kegagalan, data tetap aman di lokasi lain.
Scalable
- Definisi: Skalabilitas berarti kemampuan sistem untuk mendukung jutaan unggahan dan permintaan pengguna tanpa menurunkan kinerja.
- Implementasi: Instagram menggunakan basis data NoSQL seperti DynamoDB yang mampu melakukan skalabilitas horizontal dengan menambah node baru sesuai kebutuhan. Ini memastikan bahwa sistem dapat menangani peningkatan jumlah pengguna dan data secara efisien.
Latency
- Definisi: Latensi merujuk pada waktu yang diperlukan untuk mengambil kembali foto atau video setelah permintaan pengguna.
- Implementasi: Untuk menyediakan latensi yang rendah, Instagram menggunakan cache seperti Redis atau Memcached. Cache menyimpan data yang sering diakses di memori, memungkinkan pengambilan data yang cepat tanpa perlu mengakses basis data utama yang lebih lambat.
Replication and Sharding
- Replication:
- Definisi: Replikasi adalah proses membuat salinan data di beberapa lokasi untuk memastikan ketersediaan dan keandalan yang tinggi.
- Implementasi: Data di Instagram direplikasi di beberapa server dan lokasi geografis untuk mencegah kehilangan data dan memastikan ketersediaan tinggi bahkan jika terjadi kegagalan server atau pusat data.
- Sharding:
- Definisi: Sharding adalah teknik membagi basis data menjadi bagian-bagian yang lebih kecil, yang disebut shard, yang dapat diakses dan diproses secara independen.
- Implementasi: Instagram memecah data ke dalam shard berdasarkan berbagai kriteria (misalnya, user ID) untuk mengurangi beban pada satu server dan memungkinkan distribusi beban yang lebih merata. Ini membantu meningkatkan performa dan skalabilitas sistem.
- Replication:
Dengan desain ini, Instagram dapat mengelola operasi baca-tulis yang tinggi dengan performa tinggi, memastikan pengalaman pengguna yang responsif dan pengelolaan data yang aman dan andal.
Referensi :
Komentar
Posting Komentar