EAS - Model Bisnis Perusahaan

Tugas Pertemuan 13 - Desain System Aplikasi Instagram

Nama  : Ken Anargya Alkausar

NRP    : 5025211168

Kelas   : A

Jika Anda aktif di media sosial, kemungkinan besar Anda pernah menggunakan Instagram setidaknya sekali dalam hidup Anda. Pernahkah Anda bertanya-tanya bagaimana aplikasi ini dapat berfungsi dengan sangat lancar dan jika Anda harus membangun aplikasi serupa, bagaimana Anda akan melakukannya? Dalam artikel ini, kami akan membahas cara merancang aplikasi yang mirip dengan Instagram. Instagram adalah layanan jejaring sosial berbagi foto dan video asal Amerika yang dimiliki oleh Meta Platforms. Layanan ini memungkinkan pengguna untuk mengunggah media yang dapat diedit dengan filter, diatur berdasarkan tagar, dan diberi lokasi melalui penandaan geografis. Postingan dapat dibagikan secara publik atau dengan pengikut yang telah disetujui sebelumnya.

Persyaratan - Persyaratan Fungsional

1. Mengunggah Foto dan Video: Pengguna harus dapat mengunggah foto dan video ke platform.

2. Menambahkan Keterangan dan Lokasi pada Postingan: Pengguna harus dapat menambahkan teks keterangan dan lokasi pada setiap postingan mereka.

3. Mengikuti dan Berhenti Mengikuti Pengguna Lain: Pengguna harus memiliki opsi untuk mengikuti atau berhenti mengikuti pengguna lain.

4. Menyukai dan Mengomentari Postingan: Pengguna harus dapat memberikan "like" dan komentar pada postingan orang lain.

5. Membuat Feed atau Timeline Berdasarkan Pengikut Pengguna: Sistem harus dapat membuat feed atau timeline yang menampilkan postingan dari pengguna yang diikuti oleh pengguna tersebut.


Persyaratan Non-Fungsional

1. Ketersediaan Tinggi — Waktu Henti Minimal: Aplikasi harus dirancang untuk memiliki waktu henti yang sangat sedikit agar selalu dapat diakses oleh pengguna.

2. Skalabilitas untuk Ratusan Juta Pengguna Aktif: Sistem harus dapat menangani dan berkembang untuk melayani ratusan juta pengguna aktif secara bersamaan.

3. Latensi Rendah untuk Semua Operasi Seperti Pemuatan Feed: Operasi seperti pemuatan feed harus memiliki waktu respons yang rendah untuk pengalaman pengguna yang cepat dan responsif.

4. Keandalan dan Toleransi Kesalahan pada Backend: Backend harus dirancang untuk dapat menangani kegagalan tanpa menyebabkan kehilangan data atau gangguan layanan yang signifikan.

5. Ketahanan Konten, Setiap Foto atau Video yang Berhasil Diunggah Tidak Boleh Hilang:  Konten yang berhasil diunggah harus disimpan dengan aman dan tidak boleh hilang.

6.  Konsistensi Akhir pada Feed, Tidak Masalah Jika Postingan Tidak Segera Terlihat oleh Pengikut: Sistem harus mampu menangani konsistensi akhir pada feed, di mana tidak masalah jika postingan tidak langsung terlihat oleh pengikut.

7. Optimasi Penyimpanan dan Kompresi Media: Sistem harus mengoptimalkan penyimpanan dan kompresi untuk media agar efisien dalam penggunaan ruang penyimpanan.

8. Optimasi Bandwidth Jaringan: Sistem harus mengoptimalkan penggunaan bandwidth jaringan untuk mengurangi beban data.

9. Caching untuk Performa: Sistem harus menggunakan caching untuk meningkatkan performa dan mengurangi waktu akses data.


Estimasi Kapasitas

Estimasi Lalu Lintas

Misalkan kita memiliki 500 juta pengguna aktif harian dan menerima sekitar 5 juta unggahan per hari.

Jumlah total unggahan ~ 57 per detik

Estimasi Penyimpanan

Misalkan ukuran rata-rata unggahan adalah 200KB.

Maka total penyimpanan yang dibutuhkan untuk 1 hari adalah 200 * 5 ~ 1 TB per hari.


API

1. Upload Image

POST: /imageRequest {
image: MultipartFile
title: String
}Response {
imageId: String
}

2. GET Feed

GET: /feed?pageNumber={pageNumber}&limit={limit}Response {
feeds: Feed[]
}Feed: {
imageId: String
imageUrl: String
title: String
}

3. Follow user

POST: /follow/{followingUserId}

4. Search image

GET: /search?keyword={searchKeyword}Response: {
feeds: Feed[]
}Feed: {
imageId: String
imageUrl: String
title: String
}


High Level Design


Detail Komponen

Klien

Ini akan menjadi aplikasi seluler atau desktop yang terhubung ke server backend melalui API REST yang telah ditentukan di atas.

Load Balancer

Kami akan menggunakan load balancer untuk mendistribusikan lalu lintas antara server yang berbeda. Ini akan membuat sistem kami lebih tersedia, dan jika ada server yang mengalami gangguan di belakang load balancer, load balancer dapat mendistribusikan lalu lintas ke server yang lain.

Layanan Gambar

Layanan gambar bertanggung jawab untuk menyediakan API untuk mengunggah gambar dan mendapatkan metadata gambar. API metadata akan mengembalikan jalur gambar di S3 yang akan digunakan oleh klien untuk memuat gambar di aplikasi mereka.

S3

Kami menggunakan penyimpanan objek untuk menyimpan gambar yang diunggah oleh pengguna. AWS S3 adalah penyimpanan objek yang dapat diskalakan dan murah yang dapat kita gunakan di sini. Kami dapat mengintegrasikannya dengan AWS CloudFront sehingga gambar dapat dimuat lebih cepat di aplikasi pengguna.

CloudFront

Amazon CloudFront adalah layanan jaringan pengiriman konten (CDN) yang dibangun untuk kinerja tinggi, keamanan, dan kenyamanan pengembang. Dengan bantuan CloudFront, gambar akan dimuat lebih cepat di aplikasi pengguna.

Image DDB

Kami menggunakan AWS DynamoDB untuk menyimpan metadata gambar yang diunggah oleh pengguna. Kami telah membahas ini di bagian sebelumnya.

SNS

Pada setiap unggahan pengguna, kami menerbitkan notifikasi dengan bantuan AWS Simple Notification Service. Ini akan berguna untuk pemrosesan lain seperti pemantauan, pembuatan feed, analitik, dll. SQS yang berbeda dapat berlangganan ke SNS ini untuk mendengarkan peristiwa.

SQS

Kami menggunakan AWS Simple Queue Service yang akan berlangganan ke event upload SNS, dan layanan pembuatan feed akan mendengarkan SQS ini untuk memproses peristiwa.

Layanan Pembuatan Feed

Layanan ini bertanggung jawab untuk pembuatan feed pengguna. Layanan ini akan mendengarkan peristiwa unggahan pengguna melalui SQS dan memulai proses pembuatan feed pengguna. Layanan ini akan menangani jutaan peristiwa, dan bisa ada diskusi terpisah tentang Desain Tingkat Rendah untuk layanan ini. Kami akan membahasnya di artikel mendatang.

Feed DDB

Kami menggunakan DynamoDB untuk menyimpan data feed pengguna. Layanan pembuatan feed akan berinteraksi dengan DDB untuk memperbarui feed pengguna.

Redis Cache

Untuk menjaga latensi baca tetap rendah bagi pengguna kami, kami menerapkan lapisan caching antara layanan pembuatan feed dan DDB. Ketika ada permintaan untuk mengambil feed pengguna, sistem akan terlebih dahulu memeriksa di cache redis, jika tidak tersedia maka akan mengambilnya dari DDB dan mengembalikan responsnya.


Use Case Diagram
Dalam diagram di atas, kita telah membahas tentang diagram use case Instagram:

- Jika pengguna baru, mereka akan melakukan pendaftaran terlebih dahulu yang akan disimpan di database, kemudian mereka akan memverifikasi profil mereka.
- Jika pengguna sudah mendaftar, mereka akan memberikan email dan kata sandi.
- Di halaman beranda, 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 juga bisa melakukan siaran langsung. Semua itu tergantung pada pilihan mereka.
- Akan ada pengaturan di mana pengguna dapat melihat cerita atau postingan yang telah diarsipkan. Pengguna dapat membuka blokir seseorang, dan mereka juga dapat mendapatkan akun terverifikasi setelah melakukan pembayaran.

Referensi:

https://kuliahppl.blogspot.com/2024/06/desain-system-aplikasi-instagram.html

https://nikhilgupta1.medium.com/instagram-system-design-f62772649f90

https://www.geeksforgeeks.org/design-instagram-a-system-design-interview-question/





Comments