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

  1. Unggah Foto dan Video: Pengguna harus dapat mengunggah konten visual ke platform.

  2. Tambahkan Keterangan dan Lokasi: Pengguna dapat menambahkan teks keterangan dan informasi lokasi pada setiap postingan.

  3. Pengelolaan Hubungan: Pengguna memiliki kemampuan untuk mengikuti dan berhenti mengikuti pengguna lain.

  4. Interaksi pada Postingan: Fitur like dan komentar harus tersedia untuk memfasilitasi interaksi antar pengguna.

  5. Feed Berdasarkan Pengikut: Sistem harus mampu menyusun feed atau timeline berdasarkan postingan dari pengguna yang diikuti.

Persyaratan Non-Fungsional

  1. Ketersediaan Tinggi: Aplikasi harus dirancang dengan downtime minimal untuk ketersediaan yang optimal.

  2. Skalabilitas: Sistem harus mampu menangani ratusan juta pengguna aktif secara bersamaan.

  3. Latensi Rendah: Operasi seperti pemuatan feed harus memiliki waktu respons yang rendah untuk pengalaman pengguna yang lancar.

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

  5. Integritas Konten: Setiap konten yang diunggah harus disimpan dengan aman dan tidak boleh hilang.

  6. Konsistensi Feed: Sistem harus dapat menjaga konsistensi pada feed, meskipun ada keterlambatan dalam penampilan postingan kepada pengikut.

  7. Optimasi Penyimpanan dan Bandwidth: Penggunaan efisien ruang penyimpanan dan bandwidth jaringan harus dioptimalkan.

  8. 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:

Komentar

Postingan populer dari blog ini

ETS PPL