Tugas Pertemuan 5 PPL
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.
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.
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.
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.
Berikut merupakan penjelasan singkat :
1. Arsitektur
Untuk Twitter, menggunakan arsitektur layanan mikro karena ini akan memudahkan penskalaan horizontal dan memisahkan layanan yang ada. Setiap layanan akan memiliki kepemilikan atas model datanya sendiri.
2. 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.
3. Layanan Umpan Berita
Layanan ini akan menangani pembuatan dan penerbitan umpan berita pengguna, 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.
4. Layanan Tweet
Layanan tweet menangani kasus penggunaan terkait tweet seperti memposting tweet, favorit, dll.
5. Retweet
Retweet adalah salah satu persyaratan tambahan kami. Untuk mengimplementasikan fitur ini, kita cukup membuat tweet baru dengan user id dari pengguna yang me-retweet tweet asli dan kemudian memodifikasi enum type
dan content
properti 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-hal ini kita dapatkan karena peringkat.
7. Layanan Media
Layanan ini akan menangani unggahan media (gambar, video, file, dll.).
8. Layanan Analisis
Layanan ini akan digunakan untuk kasus penggunaan metrik dan analitik.
9. Algoritma Pemeringkatan
Kami memerlukan algoritme pemeringkatan untuk memberi peringkat setiap tweet berdasarkan relevansinya bagi setiap pengguna tertentu.
Di mana,
Affinity
: 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.Weight
: 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.Decay
: adalah ukuran penciptaan tepi. Semakin tua edge, semakin kecil nilai peluruhannya dan pada akhirnya akan menurunkan peringkatnya.
Saat ini, algoritme jauh lebih kompleks dan pemeringkatan dilakukan menggunakan model pembelajaran mesin yang dapat mempertimbangkan ribuan faktor.
10. Layanan Notifikasi
Pemberitahuan adalah bagian integral dari platform media sosial manapun, hal ini dapat didukung menggunakan antrian pesan atau perantara pesan seperti Apache Kafka dengan layanan notifikasi untuk mengirimkan permintaan ke Firebase Cloud Messaging yang akan menangani pengiriman notifikasi push ke perangkat pengguna.
Perancangan Model Data untuk Perancangan Sistem Twitter
Kesimpulan
Twitter menangani ribuan tweet per detik sehingga tidak 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. Manfaat dari dibuatnya high-level design pada sistem desain Twitter adalah memberikan pandangan yang jelas dan holistik tentang arsitektur sistem secara keseluruhan, memungkinkan tim pengembangan untuk memahami struktur sistem, merencanakan solusi yang memenuhi kebutuhan fungsional dan non-fungsional, serta berkomunikasi dengan efektif kepada anggota tim dan pemangku kepentingan. Dengan pemahaman yang mendalam tentang aliran kerja sistem, perencanaan yang terarah, dan identifikasi risiko awal, High-Level Design mendukung pengambilan keputusan yang tepat, keselarasan dengan kebutuhan bisnis, dan perencanaan skalabilitas yang terencana, sehingga memastikan pengembangan sistem berjalan secara efisien dan menghasilkan produk akhir yang berkualitas tinggi.
Referensi
https://www.geeksforgeeks.org/design-twitter-a-system-design-interview-question/
Comments
Post a Comment