- Get link
- X
- Other Apps
Nama : Ken Anargya Alkausar
NRP : 5025211168
Kelas : A
Twitter adalah platform media sosial tempat pengguna dapat memposting pesan singkat yang disebut "tweet" dan berinteraksi satu sama lain. Tweet ini dapat berisi hingga 280 karakter dan dapat menyertakan teks, foto, atau tautan. Pengguna juga dapat mengikuti lainnya pengguna dan menerima pemberitahuan ketika mereka memposting tweet baru. Pada artikel ini kita akan membahas bagaimana merancang suatu sistem mirip dengan Twitter. Pertama, kami akan menguraikan persyaratan utama untuk sistem kami.
High Level Design
High-Level Design (HLD) adalah gambaran umum atau cetak biru dari arsitektur sistem yang menunjukkan komponen-komponen utama, hubungan antar komponen, dan interaksi mereka secara keseluruhan. HLD memberikan pandangan menyeluruh tentang bagaimana sistem akan bekerja tanpa masuk ke dalam detail teknis yang sangat mendalam.
Pada tingkat tinggi, layanan seperti Twitter membutuhkan sistem dengan beberapa server aplikasi untuk menangani permintaan klien. Server-server ini ditempatkan di belakang penyeimbang beban (load balancers), yang mendistribusikan lalu lintas masuk secara merata di antara server-server tersebut. Di bagian backend, diperlukan basis data yang kuat untuk menyimpan tweet dan mendukung jumlah pembacaan yang tinggi. Selain itu, sistem membutuhkan penyimpanan file untuk menyimpan foto dan video.
Persyaratan Utama
Sebelum merancang sistem seperti Twitter, penting untuk mengidentifikasi fitur-fitur esensial dan persyaratan yang ingin kita penuhi dengan desain kita. Dalam artikel ini, kita akan membahas fitur-fitur berikut:
Memposting Tweet: Pengguna harus dapat membuat dan memposting tweet, yang dapat mencakup teks, foto, atau tautan.
Pengiriman Tweet: Layanan harus dapat mendorong tweet baru ke pengikut pengguna yang mempostingnya dan mengirim pemberitahuan push untuk memberi tahu pengikut tentang tweet baru tersebut.
Tampilan Timeline: Pengguna harus dapat melihat timeline mereka sendiri (umpan tweet mereka sendiri) serta timeline beranda (umpan tweet dari akun yang mereka ikuti).
Ketersediaan Tinggi: Layanan harus sangat tersedia, artinya harus dapat menangani sejumlah besar pengguna dan permintaan tanpa mengalami waktu henti.
Capacity Estimation
Dengan asumsi sistem Twitter kita memiliki:
0,5 miliar total pengguna.
100 juta pengguna aktif harian (DAU).
50 juta tweet baru dibuat setiap hari.
Sistem akan menghasilkan total 4 miliar tampilan tweet per hari, dengan asumsi rata-rata seorang pengguna mengunjungi timeline mereka sendiri 1 kali sehari, mengunjungi halaman 3 orang lain, dan setiap halaman memiliki 10 tweet. Ini dihitung menggunakan rumus: Jumlah total tampilan tweet/hari = Jumlah DAU * (Jumlah kunjungan timeline per hari + Jumlah halaman orang lain yang dikunjungi per hari) * Jumlah tweet per halaman = 100 juta * (1 + 3) * 10 = 4 miliar.
Jadi, sistem Twitter kita lebih berat pada pembacaan daripada penulisan, artinya sistem menerima lebih banyak permintaan untuk membaca tweet daripada membuatnya. Oleh karena itu, sangat penting untuk mengoptimalkan pembacaan tweet dengan cepat.
Dengan asumsi setiap tweet berukuran 10 KB, kebutuhan penyimpanan harian total akan sekitar 5 TB. Perhitungan ini dilakukan dengan rumus: Kebutuhan penyimpanan total per hari = Ukuran tweet * Jumlah tweet per hari = 10 KB * 50 Juta = 5 TB. Untuk penyimpanan selama 10 tahun, kita memerlukan 10 tahun * 365 hari/tahun * 5 TB/hari = 18,25 PB.
Platform ini menawarkan berbagai layanan yang dirancang untuk menangani fungsi-fungsi tertentu. Untuk mendukung semua kasus penggunaan yang diinginkan, setiap layanan menyediakan serangkaian API yang dapat digunakan oleh aplikasi klien atau layanan lainnya. Layanan-layanan ini juga memiliki penyimpanan data masing-masing untuk menyimpan data yang relevan.
Ketika sebuah layanan menerima permintaan, seperti tweet baru atau permintaan untuk mengikuti pengguna, layanan tersebut memvalidasi permintaan tersebut dan menyimpan data di penyimpanan datanya. Selain itu, layanan tersebut mengirimkan pesan dalam bentuk event ke layanan pesan, yang dapat digunakan oleh layanan lain untuk memperbarui status mereka. Dengan cara ini, platform ini mampu menangani berbagai macam kasus penggunaan dan memastikan bahwa data disimpan dan diproses dengan efisien.
Komponen utama sistem platform kami adalah sebagai berikut:
Layanan Pengguna: Ini menyediakan API untuk mengelola pengguna dan interaksi mereka, seperti mengikuti atau berhenti mengikuti pengguna lain. Dalam beberapa kasus, mungkin menguntungkan untuk membuat Layanan Pengikut Pengguna terpisah untuk menangani interaksi ini. Pemisahan tanggung jawab ini dapat membantu memastikan bahwa sistem dapat diskalakan dan mudah dipelihara.
Layanan Tweet: Ini menyediakan API untuk membuat dan menyimpan tweet dalam penyimpanan data serta mengelola komentar dan suka pada tweet. Tergantung pada kebutuhan aplikasi, layanan ini dapat dibagi lebih lanjut menjadi Layanan Komentar Tweet dan Layanan Suka Tweet untuk meningkatkan organisasi dan skalabilitas.
Layanan Umpan: Ini bertanggung jawab untuk menghitung tweet yang akan muncul di timeline pengguna. Layanan ini memiliki API yang mengembalikan tweet tersebut sehingga timeline dapat ditampilkan, dan juga mendukung paginasi untuk memungkinkan pengguna menelusuri timeline mereka dalam bagian-bagian. Ini memudahkan pengguna menavigasi timeline mereka dan melihat tweet yang paling relevan bagi mereka. Layanan ini juga mampu menghitung timeline dengan cepat dan efisien, memastikan bahwa sistem dapat diskalakan untuk mendukung sejumlah besar pengguna.
Generasi Timeline: Untuk menampilkan timeline pengguna, sistem harus menunjukkan postingan terbaru dari pengikut pengguna. Menghasilkan timeline secara on-demand dapat lambat untuk pengguna dengan banyak pengikut, karena algoritma harus melakukan query, menggabungkan, dan merangking sejumlah besar tweet. Untuk meningkatkan performa, sistem harus membuat timeline sebelumnya dan menyimpannya dalam memori. Ini memungkinkan timeline diambil dengan cepat saat pengguna memuat halaman, daripada harus membuatnya on-demand. Untuk memastikan timeline yang dihasilkan sebelumnya diperbarui secara teratur, sistem dapat menggunakan server khusus untuk terus membuat dan menyimpannya dalam memori.
Pembaruan Timeline: Jika sistem menghasilkan timeline untuk semua pengguna dengan cara yang sama, pengguna dengan banyak pengikut mungkin mengalami keterlambatan dalam menerima postingan baru. Untuk mengatasi masalah ini, sistem dapat memprioritaskan pengguna dengan pembaruan baru saat menghasilkan timeline. Ketika tweet baru ditambahkan ke antrian pesan, tweet tersebut diambil oleh layanan generator timeline, yang menghasilkan ulang timeline untuk semua pengikut. Pendekatan ini memungkinkan pengguna menerima postingan baru dengan cepat, bahkan jika mereka memiliki banyak pengikut.
Ada beberapa pendekatan yang dapat digunakan untuk mempublikasikan postingan baru kepada pengguna:
Model Tarik (Pull): Dalam pendekatan ini, klien dapat meminta data secara teratur atau kapan saja mereka membutuhkannya secara manual. Kerugian dari metode ini adalah informasi baru tidak ditampilkan sampai klien mengirim permintaan tarik. Selain itu, sebagian besar permintaan tarik akan mengembalikan respons kosong jika tidak ada data baru, yang dapat membuang sumber daya.
Model Dorong (Push): Dengan pendekatan ini, sistem mengirimkan notifikasi kepada semua pengikut pengguna segera setelah mereka memposting tweet. Namun, teknik ini bisa menjadi tantangan ketika seorang pengguna memiliki jutaan pengikut, karena server harus mengirim pembaruan secara bersamaan kepada sejumlah besar individu.
Model Hibrida: Kombinasi model tarik dan dorong dapat digunakan untuk menyeimbangkan manfaat dan kekurangan dari masing-masing pendekatan. Misalnya, sistem dapat menyediakan pembaruan langsung kepada pengguna dengan hanya beberapa ratus atau ribuan pengikut, sementara selebriti dengan jumlah pengikut yang lebih besar dapat mengandalkan penggemar mereka untuk menyebarkan pembaruan. Pendekatan hibrida ini dapat membantu memastikan bahwa sistem dapat diskalakan dan mendukung sejumlah besar pengguna dengan efisien.
Referensi
- Get link
- X
- Other Apps
Comments
Post a Comment