Tugas Pertemuan 5 PPL - High Level Design

Nama Akmal Sulthon Fathulloh
NRP 5025211047
Kelas PPL - A

High Level Design (HLD) atau desain tingkat tinggi adalah gambaran umum dari suatu sistem atau aplikasi. HLD menjelaskan struktur dan arsitektur sistem secara keseluruhan, tanpa terpaku pada detail implementasi. HLD biasanya dibuat pada tahap awal pengembangan perangkat lunak, sebelum desain tingkat rendah (LLD) dibuat. HLD bertujuan untuk memberikan gambaran yang jelas tentang sistem kepada para pemangku kepentingan, seperti investor, manajer, dan arsitek, membantu dalam membuat keputusan desain yang tepat, memudahkan komunikasi antar anggota tim pengembangan, dan mempermudah proses pengembangan dan pemeliharaan perangkat lunak. Pada pertemuan kelima mata kuliah Perancangan Perangkat Lunak kali ini, kita diminta untuk berlatih membuat high-level design dari sistem perangkat lunak yang sudah disediakan. Kali ini saya memilih untuk mengulas HLD dari sistem aplikasi Twitter berdasarkan video YouTube berikut.

Deskripsi

Twitter adalah aplikasi media sosial yang memungkinkan pengguna untuk memposting tweet berupa teks, gambar, video, dan link. Pengguna dapat mengikuti akun lain, memberikan like, retweet, dan reply pada tweet, serta melihat trending topic di wilayahnya. Twitter memiliki fitur pencarian yang memungkinkan pengguna untuk mencari tweet dengan mengetikkan kata kunci, tagar, atau username. Twitter juga memiliki fitur timeline yang menampilkan daftar tweet dari akun yang diikuti oleh pengguna, diurutkan berdasarkan relevansinya. Twitter memiliki ratusan juta pengguna aktif harian, sehingga sistem aplikasi harus memiliki tingkat ketersediaan dan skalabilitas yang tinggi untuk menangani jumlah pengguna yang besar. Performa aplikasi juga harus cepat dan responsif agar pengguna dapat menggunakan aplikasi dengan nyaman.

System Requirements

Sistem Twitter harus memenuhi beberapa persyaratan sebagai berikut.

Functional Requirements

  • Pengguna dapat memposting sebuah tweet
  • Pengguna dapat menghapus tweet yang telah diposting
  • Pengguna dapat bereaksi pada sebuah tweet (reply, like, retweet, dan share)
  • Pengguna dapat mengikuti dan batal mengikuti sebuah akun
  • Ketika pengguna mengakses timeline Twitter, ia mendapatkan daftar tweet dari akun yang diikuti diurutkan berdasarkan relevansinya
  • Pengguna dapat mencari tweet dengan mengetikkan kata kunci, tagar, atau username pada bar pencarian
  • Pengguna dapat melihat trending topic di wilayahnya pada bagian trend

Non-Functional Requirements

  • Sistem aplikasi harus memiliki tingkat ketersediaan yang tinggi
  • Sistem aplikasi harus memiliki skalabilitas yang tinggi untuk menangani jumlah pengguna yang besar
  • Performa aplikasi harus cepat dan responsif

Estimasi Kapasitas

Estimasi Trafik

Kita asumsikan Twitter memiliki 100 juta pengguna aktif harian. Jika rata-rata setiap pengguna memposting tweet 3 kali sehari, maka total trafik tweet yang dihasilkan adalah sebagai berikut.

\[ \begin{align*} \text{Total trafik tweet} & = \text{Jumlah pengguna} \times \text{Jumlah tweet per pengguna} \\ & = 100 \, \text{juta} \times 3 \, \text{tweet/hari} \\ & = 300 \, \text{juta/hari} \end{align*} \]

Selain memposting tweet, Twitter juga merupakan aplikasi yang read-heavy karena pengguna akan lebih banyak membaca tweet daripada memposting tweet, dimana rasio read-to-writenya adalah 1 : 10. Maka, total trafik read yang dihasilkan adalah sebagai berikut.

\[ \begin{align*} \text{Total trafik read} & = \text{Total trafik tweet} \times \text{Rasio read-to-write} \\ & = 300 \, \text{juta} \times 10 \\ & = 3 \, \text{miliar/hari} \end{align*} \]

Estimasi Storage

Setiap tweet memiliki rata-rata panjang 140 karakter. Jika kita asumsikan setiap karakter membutuhkan 1 byte, maka total storage yang dibutuhkan untuk menyimpan tweet adalah sebagai berikut.

\[ \begin{align*} \text{Total storage tweet} & = \text{Total trafik tweet} \times \text{Rata-rata panjang tweet} \\ & = 300 \, \text{juta} \times 140 \, \text{byte} \\ & = 42 \, \text{GB/hari} \end{align*} \]

Setiap tweet memiliki metadata tambahan, seperti id tweet, id pengguna, waktu posting, jumlah like, jumlah retweet, jumlah reply, dan jumlah share. Jika kita asumsikan metadata tweet membutuhkan 100 byte, maka total storage yang dibutuhkan untuk menyimpan metadata tweet adalah sebagai berikut.

\[ \begin{align*} \text{Total storage metadata tweet} & = \text{Total trafik tweet} \times \text{Rata-rata panjang metadata tweet} \\ & = 300 \, \text{juta} \times 100 \, \text{byte} \\ & = 30 \, \text{GB/hari} \end{align*} \]

Total storage yang dibutuhkan untuk menyimpan tweet dan metadata tweet adalah sebagai berikut.

\[ \begin{align*} \text{Total storage} & = \text{Total storage tweet} + \text{Total storage metadata tweet} \\ & = 42 \, \text{GB/hari} + 30 \, \text{GB/hari} \\ & = 72 \, \text{GB/hari} \end{align*} \]

High Level Design

Arsitektur Sistem

Kita akan menggunakan arsitektur microservices untuk membangun sistem aplikasi Twitter. Arsitektur microservices merupakan pendekatan pengembangan perangkat lunak yang membagi aplikasi menjadi beberapa layanan kecil yang berdiri sendiri dan berkomunikasi satu sama lain melalui antarmuka yang didefinisikan. Setiap layanan memiliki tanggung jawab yang terbatas dan dapat dikembangkan, dideploy, dan diukur secara independen. Kita dapat membagi layanan pada sistem aplikasi Twitter menjadi beberapa layanan berikut.

  • User Service

    Layanan ini menangani masalah terkait pengguna seperti autentikasi dan informasi pengguna.

  • Newsfeed Service

    Layanan ini akan menangani pembuatan dan penerbitan newsfeed pengguna.

  • Tweet Service

    Layanan tweet akan menangani kasus penggunaan terkait tweet seperti memposting tweet, favorit, dan lainnya.

  • Search Service

    Layanan ini bertanggung jawab untuk menangani fungsionalitas terkait pencarian.

  • Media Service

    Layanan ini akan menangani penyimpanan dan pengambilan media seperti gambar dan video.

  • Notification Service

    Layanan ini akan menangani notifikasi yang dikirimkan kepada pengguna seperti notifikasi like, retweet, dan reply.

  • Analytics Service

    Layanan ini akan menangani analisis data seperti trending topic dan statistik pengguna.

Setiap layanan akan memiliki basis data sendiri-sendiri yang sesuai dengan kebutuhan fungsionalitasnya. Layanan akan berkomunikasi satu sama lain melalui antarmuka yang didefinisikan, seperti REST API atau message broker. Kita juga dapat menggunakan API Gateway untuk menangani permintaan dari klien dan membaginya ke layanan yang sesuai.

Berikut adalah diagram arsitektur sistem aplikasi Twitter menggunakan arsitektur microservices yang lebih detail.

Cara Kerja Layanan

Newsfeed Generation

Ketika pengguna membuka aplikasi Twitter, aplikasi akan meminta newsfeed pengguna dari Newsfeed Service. Newsfeed Service akan mengambil tweet dari pengguna yang diikuti oleh pengguna tersebut, mengurutkannya berdasarkan relevansinya, dan mengembalikan daftar tweet tersebut ke aplikasi. Newsfeed Service akan menggunakan basis data yang menyimpan relasi pengguna dengan pengguna yang diikuti, tweet yang diposting oleh pengguna, dan metadata tweet.

Publishing

Ketika pengguna memposting tweet, aplikasi akan mengirimkan permintaan ke Tweet Service. Tweet Service akan menyimpan tweet ke basis data tweet dan metadata tweet, kemudian mengirimkan notifikasi ke Notification Service untuk mengirimkan notifikasi ke pengguna yang diikuti oleh pengguna tersebut. Tweet Service juga akan mengirimkan tweet ke Newsfeed Service untuk dimasukkan ke newsfeed pengguna yang diikuti oleh pengguna tersebut.

Data Model Design

Berikut adalah data model design dari sistem aplikasi Twitter. Data model design ini mencakup entitas-entitas yang dibutuhkan oleh sistem, atribut-atribut dari setiap entitas, dan relasi antar entitas.

Kita memiliki tabel sebagai berikut.

  • users

    Tabel ini akan berisi informasi pengguna seperti nama, email, dob, dan detail lainnya.

  • tweets

    Seperti namanya, tabel ini akan menyimpan tweet dan propertinya seperti jenis (teks, gambar, video, dll.), konten, dll. Kita juga akan menyimpan userID yang sesuai.

  • favorites

    Tabel ini menyimpan tweet yang difavoritkan oleh pengguna seperti id favorit, id tweet, dan id pengguna.

  • followers

    Tabel ini menyimpan relasi pengguna yang diikuti oleh pengguna seperti id pengikut dan id pengguna yang diikuti.

  • feeds

    Tabel ini menyimpan newsfeed pengguna yang berisi tweet dari pengguna yang diikuti oleh pengguna tersebut.

  • feeds_tweets

    Tabel ini menyimpan relasi antara newsfeed pengguna dan tweet yang ada di dalamnya.

Referensi

https://kuliahppl.blogspot.com/2024/03/high-level-design.html
https://youtu.be/tjo_APthUug

Komentar

Postingan populer dari blog ini

Pengantar PBKK

Tugas Pertemuan 15 PBKK - Membuat Aplikasi dengan Google Apps Script

Tugas Pertemuan 2 PPL - Identifikasi Proses PPL