PPL Pertemuan 5 - High Level Design
Nama : Cindi Dwi Pramudita
NRP : 5025201042
Kelas : Perancangan Perangkat Lunak AHigh Level Design Twitter
A. Deskripsi Singkat
Twitter adalah platform media sosial yang memungkinkan pengguna untuk mengirim dan membaca pesan berbasis teks hingga 280 karakter, yang dikenal sebagai "tweet". Twitter juga mendukung konten multimedia seperti gambar, video, dan tautan.
B. System Requirements
a. Persyaratan Fungsional:
- Registrasi dan Login: Pengguna dapat membuat akun baru dan login.
- Tweet: Pengguna dapat menulis, mengedit, dan menghapus tweet.
- Retweet: Pengguna dapat membagikan ulang tweet pengguna lain.
- Like: Pengguna dapat menyukai tweet.
- Follow/Unfollow: Pengguna dapat mengikuti atau berhenti mengikuti pengguna lain.
- Timeline: Pengguna dapat melihat timeline tweet dari pengguna yang mereka ikuti.
- Search: Pengguna dapat mencari tweet, hashtag, dan pengguna lain.
- Notifications: Pengguna dapat menerima notifikasi untuk aktivitas yang relevan.
- Direct Messaging: Pengguna dapat mengirim pesan langsung kepada pengguna lain.
- Trending Topics: Pengguna dapat melihat topik yang sedang trending.
b. Persyaratan Non Fungsional:
- Scalability: Sistem harus mampu menangani pertumbuhan jumlah pengguna dan data.
- Availability: Sistem harus tersedia 99.9% dari waktu.
- Performance: Latensi untuk memuat timeline dan tweet tidak boleh lebih dari 2 detik.
- Security: Data pengguna harus dilindungi dari akses yang tidak sah.
- Data Consistency: Data harus konsisten di seluruh sistem.
c. Persyaratan yang Diperpanjang:
- Multilingual Support: Dukungan untuk berbagai bahasa.
- Analytics: Fitur analitik untuk pengguna dan administrator.
- API: API terbuka untuk memungkinkan integrasi pihak ketiga.
C. Estimasi Kapasitas Perancangan Sistem Twitter
a. Estimasi Lalu Lintas
- Pengguna Aktif Harian (DAU): 200 juta pengguna.
- Tweet per Detik: 6,000 tweet per detik.
- Request per Detik: 20,000 request per detik (termasuk tweet, like, retweet, follow, dll).
b. Estimasi Penyimpanan
- Ukuran Tweet: 280 karakter = 280 bytes.
- Penyimpanan Harian: 6,000 tweet/detik * 280 bytes * 86400 detik = 144 TB/hari.
- Penyimpanan Tahunan: 144 TB/hari * 365 hari = 52.5 PB/tahun.
c. Estimasi Bandwidth
- Ukuran Data per Request: Rata-rata 1 KB.
- Bandwidth per Detik: 20,000 request/detik * 1 KB = 20 MB/detik.
D. System Design
High-Level Design
- Load Balancer: Untuk mendistribusikan lalu lintas ke server.
- Web Servers: Menangani permintaan HTTP dari pengguna.
- Application Servers: Menjalankan logika aplikasi.
- Database Servers: Menyimpan data pengguna dan tweet.
- Cache Servers: Menggunakan Redis atau Memcached untuk caching.
- Search Servers: Elasticsearch untuk mendukung pencarian.
- Media Servers: Untuk penyimpanan dan penyajian konten multimedia.
- Message Queue: Untuk menangani tugas-tugas asynchronous.
- CDN (Content Delivery Network): Untuk mempercepat penyampaian konten ke pengguna.
Low-Level Design
- Database Sharding: Membagi data ke beberapa database untuk mengatasi beban tinggi.
- Indexing: Menggunakan indeks untuk mempercepat pencarian.
- Rate Limiting: Untuk mencegah penyalahgunaan API.
- Data Replication: Untuk memastikan data tersedia jika ada kegagalan.
E. Data Model Design
Tabel Users
Menyimpan informasi tentang pengguna.
ID
INT (Primary Key)Name
VARCHAR(45)Email
VARCHAR(45)DOB
DATE (Tanggal Lahir)CreatedAt
VARCHAR(45) (Tanggal Pembuatan)
Tabel Tweets
Menyimpan informasi tentang tweet.
ID
INT (Primary Key)UserID
VARCHAR(45) (Foreign Key ke tabel Users)Type
VARCHAR(45) (Jenis tweet)Content
VARCHAR(45) (Konten tweet)Users_ID
INT (Foreign Key ke tabel Users)
Tabel Followers
Menyimpan informasi tentang pengikut.
ID
INT (Primary Key)FollowerID
INT (ID Pengikut)UserID
INT (Foreign Key ke tabel Users)
Tabel Feeds
Menyimpan informasi tentang umpan (feed).
ID
INT (Primary Key)UserID
VARCHAR(45) (Foreign Key ke tabel Users)UpdatedAt
VARCHAR(45) (Tanggal Pembaruan)
Tabel Feeds_tweets
Menyimpan hubungan antara umpan dan tweet.
ID
INT (Primary Key)TweetID
VARCHAR(45) (Foreign Key ke tabel Tweets)FeedID
VARCHAR(45) (Foreign Key ke tabel Feeds)Tweets_ID
INT (Foreign Key ke tabel Tweets)Favourites_ID
INT (Foreign Key ke tabel Favourites)Favourites_Tweets_ID
INT (Foreign Key ke tabel Favourites dan Tweets)Favourites_Tweets_Users_ID
INT (Foreign Key ke tabel Favourites dan Users)
Tabel Favourites
Menyimpan informasi tentang tweet yang disukai.
ID
INT (Primary Key)UserID
VARCHAR(45) (Foreign Key ke tabel Users)TweetID
VARCHAR(45) (Foreign Key ke tabel Tweets)CreatedAt
VARCHAR(45) (Tanggal Pembuatan)Users_ID
INT (Foreign Key ke tabel Users)Tweets_ID
INT (Foreign Key ke tabel Tweets)Tweets_Users_ID
INT (Foreign Key ke tabel Tweets dan Users)
Indeks
Setiap tabel dapat memiliki indeks untuk kolom yang sering digunakan dalam query, seperti UserID
pada tabel Tweets
, untuk meningkatkan kinerja.
Desain basis data ini menangkap hubungan antara pengguna, tweet, pengikut, umpan, dan favorit sebagaimana digambarkan dalam diagram.
F. Conclusion
Desain sistem Twitter ini mencakup berbagai aspek dari kebutuhan fungsional dan non-fungsional hingga estimasi kapasitas dan desain sistem. Desain ini bertujuan untuk memastikan Twitter dapat beroperasi secara efisien, aman, dan skala. Selanjutnya, implementasi detail dan pengujian perlu dilakukan untuk memastikan semua persyaratan terpenuhi.
Comments
Post a Comment