Tugas Pertemuan 13 - Desain System Aplikasi Instagram
Jika Anda sering menggunakan media sosial, kemungkinan besar Anda pernah mencoba Instagram. Pernahkah Anda bertanya-tanya bagaimana platform ini dapat beroperasi dengan begitu lancar? Dan jika Anda berpikir untuk membangun aplikasi serupa, apa yang perlu Anda pertimbangkan? Dalam artikel ini, kami akan membahas bagaimana merancang aplikasi mirip Instagram. Instagram adalah platform jejaring sosial Amerika yang dimiliki oleh Meta Platforms, yang memungkinkan pengguna untuk berbagi foto dan video yang dapat diedit dengan filter, dikelompokkan dengan tagar, dan diberi lokasi melalui geotagging. Postingan dapat dibagikan secara publik atau hanya kepada pengikut yang disetujui sebelumnya.
Persyaratan Fungsional
Unggah Foto dan Video: Pengguna harus dapat mengunggah konten visual ke platform.
Tambahkan Keterangan dan Lokasi: Pengguna dapat menambahkan teks keterangan dan informasi lokasi pada setiap postingan.
Pengelolaan Hubungan: Pengguna memiliki kemampuan untuk mengikuti dan berhenti mengikuti pengguna lain.
Interaksi pada Postingan: Fitur like dan komentar harus tersedia untuk memfasilitasi interaksi antar pengguna.
Feed Berdasarkan Pengikut: Sistem harus mampu menyusun feed atau timeline berdasarkan postingan dari pengguna yang diikuti.
Persyaratan Non-Fungsional
Ketersediaan Tinggi: Aplikasi harus dirancang dengan downtime minimal untuk ketersediaan yang optimal.
Skalabilitas: Sistem harus mampu menangani ratusan juta pengguna aktif secara bersamaan.
Latensi Rendah: Operasi seperti pemuatan feed harus memiliki waktu respons yang rendah untuk pengalaman pengguna yang lancar.
Keandalan dan Toleransi Kesalahan: Backend harus dirancang untuk menangani kegagalan tanpa kehilangan data atau gangguan layanan yang signifikan.
Integritas Konten: Setiap konten yang diunggah harus disimpan dengan aman dan tidak boleh hilang.
Konsistensi Feed: Sistem harus dapat menjaga konsistensi pada feed, meskipun ada keterlambatan dalam penampilan postingan kepada pengikut.
Optimasi Penyimpanan dan Bandwidth: Penggunaan efisien ruang penyimpanan dan bandwidth jaringan harus dioptimalkan.
Caching untuk Performa: Penggunaan caching harus diterapkan untuk meningkatkan performa aplikasi.
Estimasi Kapasitas
Estimasi Lalu Lintas: Dengan 500 juta pengguna aktif harian dan sekitar 5 juta unggahan per hari, rata-rata 57 unggahan per detik diperkirakan.
Estimasi Penyimpanan: Jika ukuran rata-rata unggahan adalah 200KB, maka sekitar 1TB penyimpanan dibutuhkan per hari.
Desain Komponen
- Klien: Aplikasi seluler atau desktop terhubung ke server backend melalui API REST.
- Load Balancer: Digunakan untuk mendistribusikan lalu lintas di antara server backend.
- Layanan Gambar: Menyediakan API untuk mengelola unggahan gambar.
- S3: Penyimpanan objek untuk menyimpan gambar dengan skala dan keamanan yang baik.
- CloudFront: CDN untuk meningkatkan kecepatan pengiriman gambar.
- Layanan Pembuatan Feed: Bertanggung jawab atas pembuatan feed pengguna.
- Redis Cache: Digunakan untuk caching data untuk mengurangi latensi.
Berikut adalah beberapa endpoint API yang umumnya terdapat dalam desain sistem aplikasi mirip Instagram:
1. Upload Image
POST: /api/image/upload
Request Body:
{
"image": "base64_encoded_image_data",
"caption": "optional_caption_text"
}
Response:
{
"imageId": "unique_image_identifier"
}
2. Get User Feed
GET: /api/feed
Response:
{
"feeds": [
{
"imageId": "unique_image_identifier",
"imageUrl": "image_url",
"caption": "caption_text"
},
{
"imageId": "unique_image_identifier",
"imageUrl": "image_url",
"caption": "caption_text"
},
...
]
}
3. Follow User
POST: /api/user/follow/{userId}
Response: 200 OK (No content)
4. Search Images
GET: /api/image/search?keyword={searchKeyword}
Response:
{
"feeds": [
{
"imageId": "unique_image_identifier",
"imageUrl": "image_url",
"caption": "caption_text"
},
{
"imageId": "unique_image_identifier",
"imageUrl": "image_url",
"caption": "caption_text"
},
...
]
}
5. User Registration
POST: /api/user/register
Request Body:
{
"username": "user_name",
"email": "user_email",
"password": "user_password"
}
Response: 200 OK (No content)
6. Like Image
POST: /api/image/like/{imageId}
Response: 200 OK (No content)
7. Comment on Image
POST: /api/image/comment/{imageId}
Request Body:
{
"comment": "comment_text"
}
Response: 200 OK (No content)
8. Update Profile
PUT: /api/user/profile
Request Body:
{
"username": "new_username",
"bio": "new_bio_info"
}
Response: 200 OK (No content)
9. Delete Image
DELETE: /api/image/{imageId}
Response: 200 OK (No content)
10. Get User Profile
GET: /api/user/profile/{userId}
Response:
{
"username": "user_name",
"bio": "user_bio_info"
}High Level Design
Use Case Diagram
Diagram ini mengilustrasikan fungsi-fungsi utama aplikasi seperti registrasi pengguna, interaksi dengan konten, manajemen hubungan, dan pengaturan akun.
Untuk lebih lanjut, lihat referensi:
.png)
.png)
Komentar
Posting Komentar