Tugas 4 PPL - High Level Design

Nama : I Gusti Ngurah Ervan Juli Ardana NRP     : 5025211205 Kelas : Perancangan Perangkat Lunak A Tahun     : 2024

High Level Design

High-Level Design (HLD) adalah sebuah proses dalam pengembangan perangkat lunak yang bertujuan untuk merancang struktur dan arsitektur sistem secara keseluruhan tanpa terlalu mendetail pada implementasi spesifik. HLD memberikan gambaran umum tentang bagaimana sistem akan beroperasi, bagaimana komponen-komponen utama akan berinteraksi, dan bagaimana data akan mengalir di antara komponen-komponen tersebut. Pada pertemuan keempat mata kuliah Perancangan Perangkat Lunak kali ini, Saya ditugaskan untuk berlatih menyusun high-level design dari sistem perangkat lunak yang sudah diberikan. Berikut adalah beberapa hal penting yang perlu dipertimbangkan ketika merancang HLD untuk sebuah perangkat lunak : 



Link Referensi 1: https://youtu.be/tjo_APthUug

Link Referensi 2: https://www.geeksforgeeks.org/design-twitter-a-system-design-interview-question/  


Deskripsi Implementasi High Level Design Pada aplikasi Twitter

Twitter telah menjadi salah satu platform media sosial yang paling berpengaruh di dunia, memainkan peran penting dalam percakapan global tentang berbagai topik, mulai dari politik hingga hiburan, dan dari olahraga hingga teknologi. Untuk mendesain Twitter. Dalam merancang tingkat tinggi sistem Twitter, fokus utamanya adalah memahami struktur keseluruhan. Ini melibatkan pemikiran tentang arsitektur umum sistem, bagaimana pengguna berinteraksi dengan feed, manajemen data untuk menyimpan dan mengakses tweet, serta pemrosesan dan tampilan data pengguna secara real-time.


Selain itu, perlu dipertimbangkan strategi penskalaan yang efisien untuk menangani jumlah pengguna yang signifikan dengan andal dan cepat. Ini termasuk memastikan kecepatan akses data yang tinggi dan menciptakan antarmuka pengguna yang intuitif untuk meningkatkan pengalaman pengguna tanpa mengorbankan kinerja atau keamanan. Semua ini harus dilakukan dalam kerangka waktu yang ketat, yang sering terjadi dalam sesi wawancara teknis.


System Requirements

System Requirements berfungsi untuk mengidentifikasi masalah yang ingin dipecahkan oleh sistem, pemangku kepentingan yang akan menggunakan sistem, dan fitur-fitur yang harus dimiliki sistem. berikut merupakan syarat functional dan non-functional pada sistem twiter:

  1. Persyaratan Fungsional:

  • Dapat membuat dan memposting tweet baru, yang dapat berupa teks, gambar, video, dan format lainnya.

  • Menyediakan fitur untuk mengikuti pengguna lain, sehingga pengguna dapat mengikuti perkembangan dan aktivitas dari orang-orang yang mereka minati.

  • Memiliki fitur umpan berita yang menampilkan tweet dari orang-orang yang diikuti oleh pengguna, memastikan pengguna mendapatkan konten terkini dan relevan.

  • Menyediakan kemampuan pencarian tweet, memungkinkan pengguna untuk menemukan konten tertentu dengan mudah.

  1. Persyaratan Non Fungsional:

  • Menjamin ketersediaan tinggi sistem dengan latensi minimal, sehingga pengguna dapat mengakses dan menggunakan platform dengan lancar dan tanpa hambatan.

  • Sistem didesain untuk terukur dan efisien, memastikan penggunaan sumber daya yang optimal dan performa yang konsisten.

  1. Persyaratan yang Diperpanjang:

  • Menyediakan metrik dan analitik, memungkinkan pengguna untuk melacak dan memahami aktivitas mereka serta tren di platform.

  • Diperlukan fungsi retweet, memungkinkan pengguna untuk menyebarkan konten yang menarik dari pengguna lain kepada pengikut mereka.

  • Menambahkan fitur tweet favorit, yang memungkinkan pengguna untuk menandai dan menyimpan tweet favorit mereka untuk referensi atau dibagikan kembali di masa depan.


Estimasi Kapasitas

  • Estimasi Trafik

Misalkan kita memiliki total 1 miliar pengguna dengan 200 juta pengguna aktif harian (DAU), dan setiap pengguna, secara rata-rata, melakukan 5 tweet per hari. Dari situ, dapat disimpulkan bahwa terdapat sekitar 1 miliar tweet setiap hari.

Total Trafik = Total Pengguna x Tweet Per-hari

= 200 juta x 5 tweet = 1 miliar/hari

Tweet juga dapat mencakup media seperti gambar atau video. Jika kita mengasumsikan bahwa 10 persen dari tweet tersebut berupa file media yang dibagikan oleh pengguna, maka akan ada tambahan 100 juta file yang perlu disimpan.

10 persen x 1 miliar = 100 juta/hari


Dengan demikian, Permintaan Sistem per Detik (RPS) adalah sekitar 12 ribu permintaan per detik.


1 miliar / (24 jam x 3600 detik) = 12 ribu permintaan/detik


  • Estimasi Storage

Jika kita anggap setiap pesan memiliki rata-rata ukuran 100 byte, maka kita akan membutuhkan sekitar 100 GB penyimpanan database setiap harinya.


1 miliar x 100 byte = 100 GB/hari


Dari jumlah tersebut, 10 persen dari pesan harian (100 juta) adalah file media. Jika kita asumsikan setiap file memiliki ukuran rata-rata 50KB, maka kita akan memerlukan penyimpanan sebesar 5 TB setiap harinya.


100 juta x 50 KB = 5 TB/hari


Sehingga, dalam jangka waktu 10 tahun, kita membutuhkan penyimpanan sekitar 19 PB.


(5 TB + 0,1 TB ) x 365 hari x 10 tahun = 19 PB


  • Estimasi Bandwidth

Dengan sistem ini memproses masukan sebesar 5,1 TB setiap harinya, sistem ini memerlukan bandwidth minimum sekitar 60 MB per detik.


5,1 TB / (24 jam x 3600 detik) = 60 MB/detik


High Level Design

  • Arsitektur Sistem : 

Untuk Twitter, lebih baik menggunakan arsitektur layanan mikro karena ini akan memudahkan penskalaan horizontal dan memisahkan layanan ini. Setiap layanan akan memiliki kepemilikan atas model datanya sendiri. ini akan membagi sistem menjadi beberapa layanan inti.

  • Service : 

  1. User Service:

Layanan ini bertanggung jawab atas masalah terkait pengguna, seperti proses otentikasi dan manajemen informasi pengguna. Termasuk di dalamnya Halaman Login, Halaman Pendaftaran, Halaman Profil, dan Halaman Beranda.

  1. Feedback Service:

Layanan ini mengelola pembuatan dan penyebaran umpan berita pengguna. Detail implementasi umpan berita akan dibahas lebih lanjut. Meskipun konsepnya terlihat sederhana, namun ada banyak aspek yang perlu diperhatikan untuk menjaga atau meningkatkan kinerja fitur ini.

  1. Tweet Service:

Layanan ini menangani segala hal terkait tweet, seperti pembuatan, penyebaran, dan interaksi seperti menyukai atau memfavoritkan tweet.

  1. Retweet Service:

Retweet merupakan salah satu persyaratan tambahan. Implementasinya cukup sederhana, dengan membuat sebuah tweet baru dengan ID pengguna yang melakukan retweet pada tweet asli, kemudian mengubah properti enum dan konten pada tweet baru tersebut untuk menghubungkannya dengan tweet asli.

  1. Search Service:

Layanan ini bertugas untuk menangani fungsi pencarian. Melalui layanan ini, dapat menampilkan postingan Teratas, postingan Terbaru, dan lainnya berdasarkan relevansi dan peringkat.

  1. Media Service:

Layanan ini menangani unggahan media seperti gambar, video, atau berkas lainnya.

  1. Analysis Service:

Layanan ini digunakan untuk mengumpulkan dan menganalisis metrik dan data analitik.

  1. Algorithm Rank:

Diperlukan algoritma pemeringkatan untuk menilai dan memberi peringkat setiap tweet berdasarkan relevansinya bagi pengguna tertentu.

  1. Elasticsearch Service

Dalam kasus penggunaan di mana DBMS tradisional tidak mencukupi, sistem ini akan menggunakan Elasticsearch. Elasticsearch adalah mesin pencarian dan analisis yang terdistribusi, dapat menyimpan dan mencari data dalam jumlah besar dengan cepat dan hampir real-time.

  1. Notification Service:

Pemberitahuan push adalah bagian penting dari setiap platform media sosial. sistem ini akan menggunakan antrian pesan atau perantara pesan seperti Apache Kafka untuk mengirimkan permintaan ke Firebase Cloud Messaging (FCM) atau Apple Push Notification Service (APNS) untuk mengelola pengiriman notifikasi push ke perangkat pengguna.

Data Model Design

Desain Model Data (Data Model Design) adalah proses merancang struktur data yang akan digunakan dalam sebuah sistem perangkat lunak. Ini melibatkan pemodelan bagaimana data akan disimpan, diorganisasi, dan diakses dalam database atau sistem penyimpanan data lainnya.


  • Tabel "users":

Tabel ini berisi informasi pengguna seperti nama, alamat email, tanggal lahir, dan detail lainnya yang relevan.


  • Tabel "tweets":

Tabel ini digunakan untuk menyimpan tweet dan propertinya seperti jenis konten (teks, gambar, video, dll.) dan isi dari tweet tersebut. Setiap tweet juga akan terkait dengan ID pengguna yang mempostingnya.


  • Tabel "favorites":

Tabel ini menyimpan daftar tweet yang difavoritkan oleh pengguna, mencakup ID favorit, ID tweet yang difavoritkan, dan ID pengguna yang melakukan favorit.


  • Tabel "followers":

Tabel ini digunakan untuk menyimpan hubungan antara pengguna yang mengikuti pengguna lainnya. Ini mencakup ID pengikut dan ID pengguna yang diikuti.


  • Tabel "feeds":

Tabel ini berisi newsfeed pengguna, yang mencakup tweet-tweet dari pengguna yang diikuti oleh pengguna tertentu.


  • Tabel "feeds_tweets":

Tabel ini menyimpan relasi antara newsfeed pengguna dan tweet yang terdapat di dalamnya, memungkinkan untuk penampilan tweet yang terkait dengan newsfeed pengguna.


Komentar

Postingan populer dari blog ini

Blog Ervan

Tugas 2 PBKK - Webcam Application

Tugas 1 PPB - Redesign Mobile Application