High Level Design

Pertemuan 5 - High Level Design

Nama: Rayhan Almer Kusumah

NRP: 5025211115

Kelas: Perancangan Perangkat Lunak (A)

Tahun: 2024

High Level Design

Desain tingkat tinggi (high-level design) adalah fase dalam proses pengembangan perangkat lunak yang berfokus pada definisi struktur dan arsitektur umum dari sistem. Pada tahap ini, gambaran umum dari sistem dikembangkan dengan menentukan komponen-komponen utama, modul-modul, dan interaksi antar bagian-bagian tersebut tanpa masuk ke dalam detail implementasi. High-level design mencakup pembuatan diagram arsitektur, diagram modul, dan deskripsi komponen yang menjelaskan fungsi dan tanggung jawab utama mereka. Tujuan utama dari tahap ini adalah untuk memberikan pemahaman yang jelas tentang bagaimana sistem akan diorganisasikan dan bagaimana elemen-elemen utama akan berinteraksi satu sama lain untuk memenuhi persyaratan fungsional dan non-fungsional.

Pentingnya desain tingkat tinggi terletak pada kemampuannya untuk membentuk landasan yang solid bagi pengembangan lebih lanjut dan detail desain. Dengan mendefinisikan struktur dasar sistem, high-level design membantu dalam identifikasi potensi masalah arsitektural sejak awal, mengurangi risiko dan biaya perubahan di fase-fase selanjutnya. Selain itu, desain tingkat tinggi memberikan panduan bagi pengembang dan tim teknis lainnya, sehingga semua anggota tim memiliki pemahaman yang sama mengenai tujuan dan struktur sistem. Ini juga memfasilitasi komunikasi antara pemangku kepentingan yang berbeda, memastikan bahwa visi dan tujuan proyek dipahami secara konsisten oleh semua pihak yang terlibat.

Pada tugas pertemuan kali ini yaitu terkait high level design saya akan menganalisa high level design dari aplikasi twitter berdasarkan referensi video yang telah diberikan.

Persyaratan untuk Desain Sistem Twitter

Persyaratan Fungsional:
  • Harus dapat memposting tweet baru (dapat berupa teks, gambar, video, dll).
  • Harus dapat mengikuti pengguna lain.
  • Harus memiliki fitur berita yang terdiri dari tweet dari orang-orang yang diikuti pengguna.
  • Harus dapat mencari tweet.

Persyaratan Non-Fungsional:
  • Ketersediaan tinggi dengan latensi minimal.
  • Sistem harus dapat diskalakan dan efisien.

Persyaratan Tambahan:
  • Metrik dan analitik.
  • Fungsi retweet.
  • Tweet favorit.

Estimasi Kapasitas untuk Desain Sistem Twitter

Untuk memperkirakan kapasitas sistem, kita perlu menganalisis perkiraan tingkat klik harian.

Estimasi Lalu Lintas:

Misalkan kita memiliki 1 miliar pengguna total dengan 200 juta pengguna aktif harian (DAU), dan rata-rata setiap pengguna men-tweet 5 kali sehari. Ini memberi kita 1 miliar tweet per hari.

200 juta pengguna×5 tweet=1 miliar tweet/hari

Tweet juga dapat berisi media seperti gambar atau video. Kita dapat berasumsi bahwa 10 persen tweet adalah file media yang dibagikan oleh pengguna, yang memberi kita tambahan 100 juta file yang perlu disimpan.

10%×1 miliar=100 juta/hari

Untuk Permintaan Sistem per Detik (RPS) kita adalah:

1 miliar permintaan per hari diterjemahkan menjadi 12 ribu permintaan per detik.

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

Estimasi Penyimpanan:

Misalkan setiap pesan rata-rata berukuran 100 byte, kita akan membutuhkan sekitar 100 GB penyimpanan basis data setiap hari.

1 miliar×100 byte=100 GB/hari

10 persen dari pesan harian kita (100 juta) adalah file media sesuai persyaratan kita. Misalkan setiap file rata-rata berukuran 50KB, kita akan membutuhkan 5 TB penyimpanan setiap hari.

100 juta×50 KB=5 TB/hari

Untuk 10 tahun membutuhkan 19 PB penyimpanan.

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

Estimasi Bandwidth:

Karena sistem kita menangani 5,1 TB data masuk setiap hari, kita akan membutuhkan bandwidth minimal sekitar 60 MB per detik.

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

Desain Use Case untuk Desain Sistem Twitter



Pada Diagram di atas,

Pengguna akan mengklik Halaman Twitter dan mereka akan mendapatkan halaman utama. Di dalam halaman utama, terdapat Halaman Beranda, Halaman Pencarian, dan Halaman Notifikasi.

  • Di dalam Halaman Beranda, terdapat halaman Tweet Baru serta opsi untuk Memposting Gambar atau Video.
  • Pada Tweet Baru, terdapat tombol untuk menyukai, tidak menyukai, memberikan komentar, serta mengikuti / berhenti mengikuti pengguna lain.
  • Pengguna tamu hanya memiliki akses untuk melihat tweet apa pun.
  • Pengguna terdaftar dapat melihat dan memposting tweet.
  • Mereka dapat mengikuti dan berhenti mengikuti pengguna lain.
  • Pengguna terdaftar dapat membuat tweet baru.

Desain Tingkat Tinggi (High Level Design) untuk Desain Sistem Twitter



1. Arsitektur:

Untuk Twitter, kami menggunakan arsitektur microservices karena akan memudahkan penskalaan horizontal dan memisahkan layanan kami. Setiap layanan akan memiliki model datanya sendiri. Kami akan membagi sistem kami menjadi beberapa layanan inti.

2. Layanan Pengguna:

Layanan ini menangani hal-hal terkait pengguna seperti otentikasi dan informasi pengguna. Halaman Login, Halaman Pendaftaran, Halaman Profil, dan Halaman Beranda akan ditangani oleh layanan Pengguna.

3. Layanan Newsfeed:

Layanan ini akan menangani pembuatan dan publikasi newsfeed pengguna.

4. Layanan Tweet:

Layanan tweet menangani kasus penggunaan terkait tweet seperti memposting tweet, favorit, dll.

5. Retweets:

Retweet adalah salah satu persyaratan tambahan kami. Untuk mengimplementasikan fitur ini, kami dapat membuat tweet baru dengan ID pengguna yang me-retweet tweet asli dan kemudian mengubah properti jenis enum dan konten tweet baru untuk menghubungkannya dengan tweet asli.

6. Layanan Pencarian:

Layanan ini bertanggung jawab untuk menangani fungsionalitas terkait pencarian. Dalam layanan pencarian, kita mendapatkan postingan teratas, postingan terbaru, dll. Hal ini kita dapatkan karena adanya peringkat.

7. Layanan Media:

Layanan ini akan menangani unggahan media (gambar, video, file, dll.).

8. Layanan Analitik:

Layanan ini akan digunakan untuk kasus penggunaan metrik dan analitik.

9. Algoritma Peringkat:

Kami memerlukan algoritma peringkat untuk memeringkat setiap tweet berdasarkan relevansinya dengan setiap pengguna tertentu.

10. Layanan Pencarian:

Terkadang DBMS tradisional tidak cukup performatif, kita memerlukan sesuatu yang memungkinkan kita menyimpan, mencari, dan menganalisis volume data yang besar dengan cepat dan hampir real-time serta memberikan hasil dalam milidetik. Elasticsearch dapat membantu kita dalam kasus penggunaan ini. Elasticsearch adalah mesin pencarian dan analitik terdistribusi, gratis, dan terbuka untuk semua jenis data, termasuk tekstual, numerik, geospasial, terstruktur, dan tidak terstruktur. Ini dibangun di atas Apache Lucene.

11. Layanan Notifikasi:

Notifikasi push adalah bagian integral dari platform media sosial mana pun. Kita dapat menggunakan antrian pesan atau broker pesan seperti Apache Kafka dengan layanan notifikasi untuk mengirim permintaan ke Firebase Cloud Messaging (FCM) atau Apple Push Notification Service (APNS) yang akan menangani pengiriman notifikasi push ke perangkat pengguna.

Data Model



Kesimpulan

Twitter menangani ribuan tweet per detik sehingga tidak memungkinkan untuk memiliki satu sistem besar atau tabel untuk menangani semua data. Oleh karena itu, data harus ditangani melalui pendekatan terdistribusi. Twitter menggunakan strategi "scatter and gather" di mana ia menyiapkan banyak server atau pusat data yang memungkinkan pengindeksan. Ketika Twitter menerima kueri (misalnya #geeksforgeeks), kueri tersebut dikirim ke semua server atau pusat data dan setiap shard Early Bird dijalankan. Semua Early Bird yang cocok dengan kueri mengembalikan hasilnya. Hasil-hasil ini kemudian dikembalikan, diurutkan, digabungkan, dan diulang peringkatnya. Peringkat dilakukan berdasarkan jumlah retweet, balasan, dan popularitas tweet.


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

Comments

Popular posts from this blog

ETS Perancangan Perangkat Lunak

Software Architecture