Tugas 4 PPL
Nama : Ferza Noveri
NRP : 5025211097
High Level Design - Twitter
High Level Design
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.
Persyaratan Sistem Desain Twitter
- Persyaratan Fungsional
- Pengguna bisa posting tweet baru (text, gambar, video, dll)
- Pengguna bisa mengikuti pengguna lainnya
- Pengguna bisa mencari tweet pengguna lain
- Memiliki umpan berita yang terdiri dari twitter pengikut dari pengguna
- Persyaratan Non-Fungsional
- Ketersediaan tinggi dengan latensi rendah
- Sistem harus terukur dan efisien
- Persyaratan yang Diperpanjang
- Metrik dan Analitik
- Fungsi Retweet
- Tweet favorit
Perkiraan Kapasias Untuk Sistem Desain Twitter
- Perkiraan Traffic
Mari kita asumsikan kita memiliki 1 miliar total pengguna dengan 200 juta pengguna aktif harian (Daily Active User), dan rata-rata setiap pengguna melakukan tweet/cuitan 5 kali sehari. Artinya akan ada total 1 miliar tweet per-hari.
Tweet juga bisa mengandung media seperti gambar atau video. Kita bisa mengasumsikan bahwa 10 persen dari tweet adalah file media yang dibagikan oleh pengguna, yang berarti memberikan kita tambahan 100 juta file yang perlu disimpan.
Dari data yang sudah kita asumsikan, permintaan sistem kita per-detik akan menjadi
- Perkiraan Penyimpanan
Kita asumsikan setiap pesan rata-rata berukuran 100 Bytes, kita akan membutuhkan penyimpanan database sekitar 100 GB setiap harinya.
10 persen dari pesan harian tersebut (100 juta) adalah file media sesuai kebutuhan. Kita asumsikan setiap file rata-rata berukuran 50 KB, kita akan membutuhkan penyimpanan berukuran 5 TB setiap harinya.
- Perkiraan Bandwith
Karena sistem kita menangani masuknya 5,1 TB setiap hari, kita akan memerlukan bandwith sekitar 60 MB per-detik.
Desain Use Case untuk Sistem Desain Twitter
Pada diagram di atas,
- Pengguna akan click halaman twitter mereka akan mendapatkan halaman utama, di dalam halaman utama akan terdapat Halaman Beranda, Halaman Pencarian, Halaman Notifikasi.
- Dalam Halaman Beranda akan ada halaman Tweet baru serta Posting Gambar atau Video
- Di Tweet baru kita akan memiliki tombol suka, tidak suka, komentar, serta tombol ikuti / berhenti mengikuti.
- Pengguna Tamu hanya akan memiliki akses untuk melihat tweet apa pun.
- Penggunaan terdaftar dapat melihat dan memposting tweet. Dapat mengikuti dan berhenti mengikuti pengguna lain.
- Pengguna Terdaftar akan dapat membuat tweet baru.
High Level Desain untuk Sistem Desain Twitter
Kita akan membahas tentang desain tingkat tinggi untuk twitter,
- Arsitektur
Untuk Twitter kami menggunakan arsitektur layanan mikro karena ini akan memudahkan penskalaan horizontal dan memisahkan layanan kami. Setiap layanan akan memiliki kepemilikan atas model datanya sendiri. Kami akan membagi sistem kami menjadi beberapa layanan inti.
- Layanan Pengguna
Layanan ini menangani masalah terkait pengguna seperti otentikasi dan informasi pengguna. Halaman Login, Halaman Pendaftaran, Halaman Profil, dan Halaman Beranda akan ditangani ke dalam layanan Pengguna.
- Layanan Umpan Berita:
Layanan ini akan menangani pembuatan dan penerbitan umpan berita pengguna. Kami akan membahas tentang newsfeed lebih detail. Ketika berbicara tentang umpan berita, tampaknya cukup mudah untuk diterapkan, namun ada banyak hal yang dapat membuat atau menghancurkan fitur ini. Jadi, mari kita bagi masalah kita menjadi dua bagian:
- Generation
- Ambil ID semua pengguna dan entitas (tagar, topik, dll.)
- Ambil algoritme yang relevan untuk menentukan peringkat tweet berdasarkan parameter seperti relevansi, manajemen waktu, dll.
- Gunakan algoritme pemeringkatan untuk memberi peringkat tweet berdasarkan parameter seperti relevansi, waktu, keterlibatan, dll.
- Mengembalikan data tweet yang diberi peringkat ke klien dengan cara yang diberi nomor halaman.
- Penerbitan
- Model Tarik (atau Fan-out saat dimuat)
- Saat pengguna membuat tweet, dan pengikut memuat ulang umpan berita mereka, umpan tersebut dibuat dan disimpan dalam memori.
- Feed terbaru hanya dimuat saat pengguna meminta. Pendekatan ini mengurangi jumlah operasi penulisan pada database kami.
- Kelemahan dari pendekatan ini adalah pengguna tidak akan dapat melihat feed terbaru kecuali mereka “menarik” data dari server, yang akan meningkatkan jumlah operasi baca di server.
- Model Dorong (atau Fan-out saat menulis)
- Dalam model ini, setelah pengguna membuat tweet, tweet tersebut akan dikirim ke semua feed pengikut.
- Hal ini mencegah sistem memeriksa seluruh daftar pengikut pengguna untuk memeriksa pembaruan.
- Namun, kelemahan dari pendekatan ini adalah akan meningkatkan jumlah operasi penulisan pada database.
- Model Hibrida:
- Pendekatan ketiga adalah model hybrid antara model tarik dan model dorong.
- Ini menggabungkan fitur-fitur bermanfaat dari dua model di atas dan mencoba memberikan pendekatan yang seimbang antara keduanya.
- Model hybrid hanya mengizinkan pengguna dengan jumlah pengikut lebih sedikit untuk menggunakan model push.
- Untuk pengguna dengan jumlah pengikut lebih banyak seperti selebriti, model tarik digunakan.
- 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, kita cukup membuat tweet baru dengan id pengguna dari pengguna yang me-retweet tweet asli dan kemudian memodifikasi properti type enum dan content dari tweet baru untuk menghubungkannya dengan tweet asli.
- Layanan Pencarian:
Layanan ini bertanggung jawab untuk menangani fungsionalitas terkait pencarian. Dalam layanan pencarian kita mendapatkan postingan Teratas, postingan terbaru, dll. Hal-hal ini kita dapatkan karena peringkat.
- Layanan Media:
Layanan ini akan menangani unggahan media (gambar, video, file, dll.).
- Layanan Analisis:
Layanan ini akan digunakan untuk kasus penggunaan metrik dan analitik.
- Algoritma Pemeringkatan:
Kami memerlukan algoritme pemeringkatan untuk memberi peringkat setiap tweet berdasarkan relevansinya bagi setiap pengguna tertentu.
Contoh: Facebook dulu menggunakan algoritma EdgeRank. Di sini, peringkat setiap item feed dijelaskan oleh:
- Afinitas: adalah “kedekatan” pengguna dengan pencipta edge. Jika pengguna sering menyukai, berkomentar, atau mengirim pesan kepada pembuat tepi, maka nilai afinitasnya akan semakin tinggi, sehingga menghasilkan peringkat postingan yang lebih tinggi.
- Bobot: adalah nilai yang diberikan menurut masing-masing sisi. Sebuah komentar dapat memiliki bobot yang lebih tinggi daripada suka, sehingga postingan dengan lebih banyak komentar kemungkinan besar akan mendapatkan peringkat yang lebih tinggi.
- Peluruhan: adalah ukuran terciptanya tepi. Semakin tua tepinya, semakin kecil nilai peluruhannya dan pada akhirnya semakin kecil pula peringkatnya.
- Layanan Pencarian
- Terkadang DBMS tradisional tidak cukup berkinerja, kita memerlukan sesuatu yang memungkinkan kita menyimpan, mencari, dan menganalisis data dalam jumlah besar dengan cepat dan hampir real-time serta memberikan hasil dalam hitungan milidetik. Elasticsearch dapat membantu kami dalam kasus penggunaan ini.
- Elasticsearch adalah mesin pencarian dan analisis yang terdistribusi, gratis dan terbuka untuk semua jenis data, termasuk tekstual, numerik, geospasial, terstruktur, dan tidak terstruktur. Itu dibangun di atas Apache Lucene.
- Bagaimana kami mengidentifikasi topik yang sedang tren?
- Fungsionalitas yang sedang tren akan didasarkan pada fungsi pencarian teratas.
- Kami dapat menyimpan kueri, tagar, dan topik yang paling sering dicari dalam cache dalam N detik terakhir dan memperbaruinya setiap M detik menggunakan semacam mekanisme pekerjaan batch.
- Algoritme pemeringkatan kami juga dapat diterapkan pada topik yang sedang tren agar lebih berbobot dan mempersonalisasikannya bagi pengguna.
- Layanan Pemberitahuan:
- Pemberitahuan push adalah bagian integral dari platform media sosial mana pun.
- Kita dapat menggunakan antrian pesan atau perantara pesan seperti Apache Kafka dengan layanan notifikasi untuk mengirimkan permintaan ke Firebase Cloud Messaging (FCM) atau Apple Push Notification Service (APNS) yang akan menangani pengiriman notifikasi push ke perangkat pengguna.
Kesimpulan
Twitter menangani ribuan tweet per detik sehingga Anda tidak bisa hanya memiliki satu sistem atau tabel besar untuk menangani semua data sehingga harus ditangani melalui pendekatan terdistribusi. Twitter menggunakan strategi sebar dan kumpulkan dengan menyiapkan beberapa server atau pusat data yang memungkinkan pengindeksan. Saat Twitter mendapatkan kueri (katakanlah #geeksforgeeks), Twitter mengirimkan kueri tersebut ke semua server atau pusat data dan menanyakan setiap shard Early Bird. Semua early bird yang cocok dengan kueri akan mengembalikan hasilnya. Hasilnya dikembalikan, diurutkan, digabungkan, dan diberi peringkat ulang. Pemeringkatan dilakukan berdasarkan jumlah retweet, balasan, dan popularitas tweet.
Comments
Post a Comment