TUGAS 4 PPL - High Level Design

Nama : Muhammad Hafidh Rosyadi

NRP : 5025211013

Kelas : PPL A

Pada pertemuan ini kami diminta untuk mengidentifikasi dan menganalisis High Level Design dari sistem aplikasi Twitter. High-Level Design (HLD) adalah dokumen dalam rekayasa perangkat lunak yang memberikan gambaran umum tentang arsitektur sistem dan desain komponen utamanya. Tujuannya adalah untuk menyediakan pemahaman umum tentang struktur sistem dan interaksi antara komponen-komponen utama.

Requirements dari aplikasi twitter

Functional Requirement:

  • Pengguna harus dapat memposting tweet baru (bisa berupa teks, gambar, video, dll).
  • Pengguna harus dapat mengikuti pengguna lain.
  • Pengguna harus memiliki fitur beranda berita yang terdiri dari tweet dari orang yang diikuti oleh pengguna.
  • Pengguna harus dapat mencari tweet.

Non Functional Requirements: 

  • Ketersediaan tinggi dengan latensi minimal.
  • Sistem harus dapat scalable dan efisien.

Extended Requirements:

  • Metrik dan analitik harus tersedia untuk melacak kinerja dan penggunaan sistem.
  • Fungsionalitas retweet
  • Fungsionalitas menyukai tweet

Twitter System Design

Arsitektur:

Twitter menggunakan arsitektur microservices karena ini memudahkan skalabilitas horizontal dan pemisahan layanan. Setiap layanan memiliki model datanya sendiri. Sistem akan dibagi menjadi beberapa layanan inti.

Layanan Pengguna:

Layanan ini menangani masalah terkait pengguna seperti otentikasi dan informasi pengguna. Halaman Login, halaman Daftar, halaman Profil, dan halaman Beranda akan ditangani oleh layanan pengguna.

Layanan Beranda Berita:

Layanan ini akan menangani pembuatan dan penerbitan beranda berita pengguna. Ketika datang ke beranda berita, terlihat mudah untuk diimplementasikan, tetapi ada banyak hal yang dapat membuat atau menghancurkan fitur ini. Jadi, mari kita bagi masalah kita menjadi dua bagian:

Layanan Tweet:

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

Retweet:

 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 memodifikasi enum tipe dan properti konten dari tweet baru untuk menghubungkannya dengan tweet asli.

Layanan Pencarian:

 Layanan ini bertanggung jawab untuk menangani fungsionalitas terkait pencarian. Dalam layanan pencarian, kami mendapatkan Pos Teratas, pos terbaru, dll. Hal-hal ini kami dapatkan karena adanya peringkat.

Layanan Media:

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

Layanan Analitik:

Layanan ini akan digunakan untuk kasus penggunaan metrik dan analitik.

Algoritma Peringkat:

Algoritma peringkat untuk memberi peringkat setiap tweet sesuai dengan relevansinya bagi setiap pengguna tertentu.

Contoh: Facebook pernah menggunakan algoritma EdgeRank. Di sini, peringkat setiap item feed dijelaskan oleh:

  • Rank = Affinity * Weight * Decay
Affinity: adalah "kedekatan" pengguna dengan pembuat edge. Jika seorang pengguna sering menyukai, mengomentari, atau mengirim pesan kepada pembuat edge, maka nilai affinity akan lebih tinggi, menghasilkan peringkat yang lebih tinggi untuk pos tersebut.
Weight: adalah nilai yang diberikan sesuai dengan setiap edge. Komentar dapat memiliki bobot yang lebih tinggi daripada suka, dan dengan demikian sebuah pos dengan lebih banyak komentar lebih mungkin mendapatkan peringkat yang lebih tinggi.
Decay: adalah ukuran dari pembuatan edge. Semakin tua edge, semakin rendah nilai decay dan akhirnya peringkatnya.

Layanan Pencarian:

Kadang-kadang DBMS tradisional tidak cukup performa, sehingga memerlukan sesuatu yang memungkinkan kita untuk menyimpan, mencari, dan menganalisis volume data yang besar dengan cepat dan dalam waktu nyata dan memberikan hasil dalam milidetik. Elasticsearch dapat membantu kita dalam kasus penggunaan ini.

Elasticsearch adalah mesin pencarian dan analitik yang terdistribusi, gratis dan terbuka untuk semua jenis data, termasuk teks, numerik, geospasial, terstruktur, dan tidak terstruktur. Ini dibangun di atas Apache Lucene.

Topik Trending:

Fungsionalitas trending akan didasarkan pada fungsionalitas pencarian. Sistem dapat menyimpan dalam cache kueri yang paling sering dicari, hashtag, dan topik dalam beberapa detik terakhir dan memperbaruinya setiap beberapa detik menggunakan mekanisme batch job.

Algoritma sistem juga dapat diterapkan pada topik trending untuk memberikan mereka lebih banyak bobot dan mempersonalisasikannya untuk pengguna.

Layanan Notifikasi:

Push notifikasi adalah bagian integral dari platform media sosial apa pun. Sistem ini 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 push notifikasi ke perangkat pengguna.

 

Data Model Design Twitter


 API Design for Twitter System Design

  • Post a Tweets
  • Follow or unfollow a user
  • Get NewsFee

Microservices Used for Twitter System Design

 9.1 Partisi Data:

Untuk memperluas basis data, diperlukan partisi data. Partisi horizontal (Sharding) adalah langkah awal yang baik. Skema partisi yang dapat digunakan meliputi:

  • Partisi Berbasis Hash
  • Partisi Berbasis Daftar
  • Partisi Berbasis Rentang
  • Partisi Komposit

Pendekatan ini masih dapat menyebabkan distribusi data dan beban yang tidak merata, yang dapat diatasi dengan menggunakan Consistent Hashing.


9.2 Teman Bersama:

Untuk teman bersama, grafik sosial dapat dibangun untuk setiap pengguna. Setiap node dalam grafik akan mewakili pengguna, dan edge terarah akan mewakili pengikut dan yang diikuti. Pengikut seorang pengguna dapat ditelusuri untuk menemukan dan menyarankan teman bersama. Ini memerlukan basis data grafik seperti Neo4j dan ArangoDB. Untuk meningkatkan akurasi saran, model rekomendasi yang mengintegrasikan pembelajaran mesin dapat digunakan.


9.3 Metrik dan Analitik:

Merekam analitik dan metrik adalah salah satu persyaratan tambahan. Dengan menggunakan Apache Kafka untuk menerbitkan berbagai jenis peristiwa, peristiwa ini dapat diproses dan analitik dapat dijalankan pada data menggunakan Apache Spark, sebuah mesin analitik berskala besar sumber terbuka.


9.4 Caching:

Dalam aplikasi media sosial, penting untuk berhati-hati menggunakan cache karena pengguna mengharapkan data terbaru. Untuk mencegah lonjakan penggunaan sumber daya, cache dapat digunakan untuk 20% tweet teratas. Untuk meningkatkan efisiensi, pagination dapat ditambahkan ke API sistem. Keputusan ini bermanfaat bagi pengguna dengan bandwidth jaringan terbatas karena mereka tidak perlu mengambil pesan lama kecuali diminta.


9.5 Akses dan Penyimpanan Media:

Sebagian besar ruang penyimpanan akan digunakan untuk menyimpan file media seperti gambar, video, atau file lainnya. Layanan media akan menangani akses dan penyimpanan file media pengguna. Untuk penyimpanan skala besar, penyimpanan objek dapat digunakan, yang memecah file data menjadi objek-objek dan menyimpannya dalam satu repositori yang dapat tersebar di beberapa sistem jaringan. Penyimpanan file terdistribusi seperti HDFS atau GlusterFS juga dapat digunakan.

Komentar

Postingan populer dari blog ini

QUIZ PBKK A

QUIZ 2 PBKK A

TUGAS 2 PWEB Membuat Portal Berita dan Kumpulan course