Pertemuan 13: Desain System Aplikasi Instagram

Rancangan Desain Instagram

Nama: Clarissa Luna Maheswari  

NRP: 5025211003  

 1. Deskripsi Aplikasi

Instagram adalah platform media sosial yang memungkinkan pengguna untuk berbagi foto dan video, mengikuti teman dan akun lainnya, serta menjelajahi konten dari berbagai pengguna di seluruh dunia. Aplikasi ini juga menyediakan fitur seperti Stories, IGTV, dan Reels untuk berbagi konten secara kreatif. Instagram telah menjadi salah satu aplikasi utama dalam kehidupan sehari-hari banyak orang, termasuk saya, untuk berinteraksi dengan teman dan mengekspresikan diri melalui visual.


 2. Spesifikasi Kebutuhan/Requirements

Fungsional:

- Pengguna dapat membuat akun dan login.

- Pengguna dapat mengunggah foto dan video.

- Pengguna dapat melihat, menyukai, dan mengomentari postingan orang lain.

- Pengguna dapat mengikuti dan diikuti oleh akun lain.

- Pengguna dapat mengirim pesan langsung (DM) kepada pengguna lain.

- Pengguna dapat membuat dan melihat Stories.

- Pengguna dapat membuat dan menonton IGTV serta Reels.

- Pengguna dapat mencari dan menjelajahi konten melalui fitur pencarian dan halaman Explore.

Non-Fungsional:

- Aplikasi harus responsif dan memiliki waktu muat yang cepat.

- Aplikasi harus memiliki desain antarmuka yang intuitif dan user-friendly.

- Data pengguna harus aman dan terproteksi.

- Aplikasi harus mampu menangani beban tinggi dengan banyak pengguna aktif secara bersamaan.

- Aplikasi harus kompatibel dengan berbagai perangkat dan ukuran layar.

 3. Capacity Estimation

Traffic Estimates:

- Active Users: 1 juta

- Daily Active Users (DAU): 500 ribu

- Posts per user per day: 5

- Total posts per day: 2.5 juta

Perhitungan QPS (Queries per Second):

- Avg QPS: 2.5 juta / (24 jam * 3600 detik/jam) ≈ 29 requests/detik

- Peak QPS: 2 * 29 requests/detik = 58 requests/detik


Storage Estimates:

- 200 bytes for name: 200MB

- 500 bytes for photo metadata: 500MB

- 10 bytes for likes/comments: 10MB

- 2 MB per photo: 2MB


Storage untuk 1 juta pengguna:

- Total Storage: 1 juta pengguna * 2.7 MB = 2.7 TB


Bandwidth Estimates:

- Profile data fetched per request:

  - 200 bytes (name)

  - 500 bytes (photo metadata)

  - 10 bytes (likes/comments)

  - 2 MB (photo)

  - Total: 2.7 MB


- Daily active users: 500 ribu

- Profile requests per user per day: 5

- Requests per day: 2.5 juta


Perhitungan Daily Bandwidth:

- Total Daily Bandwidth:   2.5 juta * 2.7 MB ≈ 6.75 TB/hari


 4. High Level Design



1. Mobile & Web Apps (React Native, ReactJS)

  • Menyediakan antarmuka pengguna untuk berbagai platform (iOS, Android, Web).

  • Menangani interaksi pengguna, menampilkan konten, dan berkomunikasi dengan layanan backend.

2. API Gateway (RESTful)

  • Titik masuk terpusat untuk semua permintaan klien.

  • Meneruskan permintaan ke layanan backend yang sesuai.

  • Menangani autentikasi dan otorisasi menggunakan JWT.

3. Authentication Service

  • Mengelola pendaftaran, login, dan autentikasi pengguna.

  • Memastikan akses yang aman dan menghasilkan token JWT.

4. User Service

  • Mengelola profil pengguna, termasuk melihat dan mengedit informasi pengguna.

  • Menangani hubungan mengikuti dan pengikut.

5. Post Service

  • Mengelola pembuatan, pengambilan, dan penghapusan postingan (foto/video).

  • Menghasilkan feed pengguna berdasarkan hubungan mengikuti dan preferensi pengguna.

6. Media Service (AWS S3)

  • Menangani upload, penyimpanan, dan pengambilan file media (foto/video).

  • Menggunakan AWS S3 untuk penyimpanan media yang skala dan andal.

7. Comment Service

  • Mengelola komentar pada postingan, termasuk pembuatan, pengambilan, dan penghapusan.

  • Mendukung suka pada komentar.

8. Direct Message Service

  • Menyediakan pesan real-time antara pengguna menggunakan WebSockets (misalnya, socket.io).

  • Memastikan komunikasi yang aman dan pribadi.

9. Notification Service (FCM)

  • Mengirimkan pemberitahuan push ke pengguna untuk berbagai acara (misalnya, suka, komentar, mengikuti).

  • Menggunakan Firebase Cloud Messaging (FCM) untuk mengirimkan pemberitahuan.

10. Story Service

  • Mengelola pembuatan, pengambilan, dan kadaluarsa cerita pengguna.

  • Memastikan cerita tersedia selama 24 jam sebelum dihapus.

11. Reels & IGTV Service

  • Mengelola pembuatan, pengambilan, dan tampilan konten Reels dan IGTV.

  • Mendukung suka dan komentar pada video Reels dan IGTV.

12. Search Service

  • Menyediakan fungsionalitas pencarian untuk pengguna, postingan, tagar, dan lainnya.

  • Menggunakan pengindeksan dan algoritma pencarian untuk hasil pencarian yang cepat dan akurat.

13. Analytics & Reporting Service

  • Mengumpulkan dan menganalisis data penggunaan untuk wawasan dan pelaporan.

  • Menyediakan metrik dan analitik untuk keterlibatan pengguna dan kinerja sistem.

14. User Settings Service

  • Mengelola pengaturan dan preferensi pengguna, termasuk pengaturan privasi dan preferensi notifikasi.

15. Saved Posts Service

  • Memungkinkan pengguna untuk menyimpan postingan untuk dilihat nanti.

  • Mengelola pengambilan dan penghapusan postingan yang disimpan.





 5. Low Level Design


Penjelasan Komponen:

1. Authentication Flow

Komponen:

  • User Interface (UI): User Login

  • API Gateway: Login Request

  • Authentication Service: Memvalidasi kredensial pengguna dan menghasilkan JWT.

  • User Service: Mengambil informasi pengguna.

Alur:

  • Pengguna memasukkan kredensial di UI.

  • UI mengirim permintaan login ke API Gateway.

  • API Gateway meneruskan permintaan login ke Authentication Service.

  • Authentication Service memvalidasi kredensial dan menghasilkan JWT.

  • API Gateway mengembalikan token JWT ke UI.


2. Uploading a Photo/Video

Komponen:

  • User Interface (UI): Upload Media

  • API Gateway: Upload Request

  • Post Service: Membuat catatan postingan baru.

  • Media Service (AWS S3): Menyimpan file media dan mengembalikan URL media.


Alur:

  • Pengguna memilih media dan memasukkan caption di UI.

  • UI mengirim permintaan upload ke API Gateway.

  • API Gateway meneruskan file media ke Media Service.

  • Media Service menyimpan file dan mengembalikan URL media.

  • API Gateway meneruskan URL dan caption ke Post Service.

  • Post Service membuat catatan postingan baru.

  • API Gateway mengembalikan konfirmasi ke UI.


3. Viewing Feed

Komponen:


  • User Interface (UI): View Feed

  • API Gateway: Feed Request

  • Post Service: Mengambil postingan dari pengguna yang diikuti.

  • User Service: Mengambil informasi pengguna yang diikuti.


Alur:

  • Pengguna meminta feed di UI.

  • UI mengirim permintaan feed ke API Gateway.

  • API Gateway meneruskan permintaan feed ke Post Service.

  • Post Service mengambil postingan dari pengguna yang diikuti dengan bantuan User Service.

  • Post Service mengembalikan postingan ke API Gateway.

  • API Gateway mengembalikan postingan ke UI untuk ditampilkan.


 6. Database Design



Tabel:

1. Tabel User

Menyimpan informasi dasar tentang pengguna aplikasi.

Attributes dari tabel:

- user_id: string (Primary Key)

- username: string

- email: string

- password_hash: string

- profile_picture: string (URL)

- bio: string

- followers: array of user_id

- following: array of user_id

- created_at: timestamp

- updated_at: timestamp


 2. Tabel Post

Menyimpan informasi tentang postingan yang dibuat oleh pengguna.

Attributes dari tabel:

- post_id: string (Primary Key)

- user_id: string (Foreign Key)

- caption: string

- media_url: string (URL)

- media_type: string (photo/video)

- likes: array of user_id

- comments: array of comment_id

- created_at: timestamp

- updated_at: timestamp


 3. Tabel Comment

Menyimpan komentar yang diberikan oleh pengguna pada postingan.

Attributes dari tabel:

- comment_id: string (Primary Key)

- post_id: string (Foreign Key)

- user_id: string (Foreign Key)

- text: string

- likes: array of user_id

- created_at: timestamp

- updated_at: timestamp


 4. Tabel Direct Messages

Menyimpan pesan langsung antara pengguna.

Attributes dari tabel:

- message_id: string (Primary Key)

- sender_id: string (Foreign Key)

- receiver_id: string (Foreign Key)

- text: string

- media_url: string (URL)

- created_at: timestamp

- updated_at: timestamp


 5. Tabel Stories

Menyimpan cerita yang diposting oleh pengguna dan akan hilang setelah 24 jam.

Attributes dari tabel:

- story_id: string (Primary Key)

- user_id: string (Foreign Key)

- media_url: string (URL)

- media_type: string (photo/video)

- viewed_by: array of user_id

- expires_at: timestamp

- created_at: timestamp

- updated_at: timestamp


 6. Tabel Reels

Menyimpan video pendek (Reels) yang diposting oleh pengguna.

Attributes dari tabel:

- reel_id: string (Primary Key)

- user_id: string (Foreign Key)

- caption: string

- media_url: string (URL)

- likes: array of user_id

- comments: array of comment_id

- created_at: timestamp

- updated_at: timestamp


 7. Tabel IGTV

Menyimpan video panjang (IGTV) yang diposting oleh pengguna.

Attributes dari tabel:

- igtv_id: string (Primary Key)

- user_id: string (Foreign Key)

- title: string

- description: string

- media_url: string (URL)

- likes: array of user_id

- comments: array of comment_id

- created_at: timestamp

- updated_at: timestamp


 8. Tabel Likes

Menyimpan informasi tentang siapa yang menyukai postingan atau komentar tertentu.

Attributes dari tabel:

- like_id: string (Primary Key)

- user_id: string (Foreign Key)

- post_id: string (Foreign Key)

- comment_id: string (Foreign Key, Optional)

- created_at: timestamp


 9. Tabel Follows

Menyimpan informasi tentang hubungan follow antara pengguna.

Attributes dari tabel:

- follow_id: string (Primary Key)

- follower_id: string (Foreign Key)

- following_id: string (Foreign Key)

- created_at: timestamp


10. Tabel Notifications

Menyimpan informasi tentang notifikasi yang diterima pengguna.

Attributes dari tabel:

notification_id: string (Primary Key)

user_id: string (Foreign Key)

type: string (like, comment, follow, mention, etc.)

reference_id: string (ID of the related post, comment, or user)

read: boolean

created_at: timestamp


11. Tabel Hashtags

Menyimpan informasi tentang hashtag yang digunakan dalam postingan.

Attributes dari tabel:

hashtag_id: string (Primary Key)

name: string

created_at: timestamp


12. Tabel PostHashtags

Menyimpan hubungan antara postingan dan hashtag yang digunakan.

Attributes dari tabel:

post_hashtag_id: string (Primary Key)

post_id: string (Foreign Key)

hashtag_id: string (Foreign Key)


13. Tabel SavedPosts

Menyimpan informasi tentang postingan yang disimpan oleh pengguna.

Attributes dari tabel:

saved_post_id: string (Primary Key)

user_id: string (Foreign Key)

post_id: string (Foreign Key)

created_at: timestamp


14. Tabel SearchHistory

Menyimpan riwayat pencarian pengguna.

Attributes dari tabel:

search_id: string (Primary Key)

user_id: string (Foreign Key)

query: string

created_at: timestamp


15. Tabel UserSettings

Menyimpan pengaturan akun pengguna.

Attributes dari tabel:

user_settings_id: string (Primary Key)

user_id: string (Foreign Key)

privacy: string (public/private)

notifications_enabled: boolean

created_at: timestamp

updated_at: timestamp








Comments

Popular posts from this blog

Pertemuan 2: Prinsip Desain Software