PPL-PERTEMUAN(6)
Nama: Moh rosy haqqy aminy
NRP: 5025211012
Kelas: PPL A
Tugas kali ini berupa latihan mengidentifikasi dan menganalisis High Level Design (HLD) dan Low Level Design (LLD) dari suatu sistem aplikasi.
saya memilih aplikasi youtube.
High Level Design (HLD)
Diagram tersebut menggambarkan arsitektur tingkat tinggi dari platform streaming video. Berikut adalah penjelasan masing-masing komponen dan interaksinya:
Pengguna: Ini mewakili pengguna akhir yang mengakses platform untuk menonton video. Klien pengguna berkomunikasi dengan server web.
Server Web: Server web menangani permintaan dari klien pengguna, menyajikan halaman web dan konten video. Server ini juga berinteraksi dengan server lain untuk memenuhi permintaan pengguna.
Load Balancer (Penyeimbang Beban): Penyeimbang beban mendistribusikan lalu lintas web yang masuk ke beberapa server web untuk memastikan tidak ada satu server pun yang terlalu terbebani, meningkatkan kinerja dan keandalan.
Server API: Server API menangani permintaan API (Application Programming Interface), yang mungkin mencakup pengambilan metadata video, data pengguna, dan informasi lain yang diperlukan oleh server web.
Penyimpanan Metadata: Komponen ini menyimpan metadata yang terkait dengan video, seperti judul, deskripsi, thumbnail, dan atribut lainnya. Server API mengkueri penyimpanan ini untuk mengambil metadata.
Server Transcoding: Server transcoding memproses file video mentah ke dalam format yang sesuai untuk streaming. Ini mungkin melibatkan konversi video ke resolusi, bitrate, atau format berbeda untuk berbagai perangkat dan kondisi jaringan.
Penyimpanan Video: Komponen ini menyimpan file video yang sudah di-transcode. Ketika server web meminta video, ia mengambilnya dari penyimpanan video.
CDN (Jaringan Pengiriman Konten): CDN menyimpan dan mengirimkan video paling populer lebih dekat ke pengguna akhir, mengurangi latensi dan beban pada penyimpanan video utama. Ini memastikan streaming video lebih cepat dan efisien dengan menyimpan konten di berbagai lokasi geografis.
Panah dan Label:
- Panah menunjukkan arah aliran data dan komunikasi antar komponen.
- "Most Popular Videos" menunjukkan bahwa video yang sering diakses disimpan dalam cache di CDN untuk akses lebih cepat.
- "Other Videos" menunjukkan bahwa video yang kurang sering diakses diambil langsung dari penyimpanan video.
Arsitektur ini memastikan streaming video yang efisien, dapat diskalakan, dan andal dengan mendistribusikan beban kerja dan mengoptimalkan pengiriman konten.
Low Level Design (LLD)
Berikut adalah deskripsi LLD dari aplikasi streaming video seperti YouTube:
1. User Client
- Komponen: Browser atau aplikasi mobile
- Fungsi: Menyediakan antarmuka untuk pengguna mengakses konten, mengirim permintaan HTTP, menerima dan menampilkan data.
- Interaksi: Mengirim permintaan ke Web Server, menerima respon (HTML, CSS, JS, dan video stream).
2. Web Server
- Komponen: Server berbasis HTTP (misalnya Nginx, Apache)
- Fungsi: Mengelola permintaan HTTP dari klien pengguna, menyajikan halaman web dan skrip, meneruskan permintaan terkait data ke API Server.
- Interaksi: Berkomunikasi dengan Load Balancer, API Server, Video Storage, dan CDN.
3. Load Balancer
- Komponen: Nginx, HAProxy, atau layanan load balancing berbasis cloud
- Fungsi: Mendistibusikan lalu lintas web ke beberapa Web Server untuk menghindari overload pada satu server.
- Interaksi: Berada di depan Web Server, menerima permintaan dari User Client, dan mendistribusikannya ke Web Server.
4. API Server
- Komponen: Server REST API (misalnya Express.js, Flask, Spring Boot)
- Fungsi: Menangani permintaan API dari Web Server, mengakses Metadata Storage dan Transcoding Server untuk mendapatkan data yang diminta.
- Interaksi: Berkomunikasi dengan Metadata Storage dan Transcoding Server, merespon Web Server.
5. Metadata Storage
- Komponen: Database (misalnya MySQL, PostgreSQL, MongoDB)
- Fungsi: Menyimpan informasi metadata dari video (judul, deskripsi, thumbnail, dll).
- Interaksi: Diakses oleh API Server untuk mengambil atau menyimpan metadata.
6. Transcoding Server
- Komponen: Server dengan software transcoding (misalnya FFmpeg)
- Fungsi: Mengkonversi video mentah ke berbagai format dan resolusi untuk berbagai perangkat dan kecepatan jaringan.
- Interaksi: Mengambil video dari Video Storage, mengirim video yang sudah di-transcode kembali ke Video Storage.
7. Video Storage
- Komponen: Penyimpanan objek berbasis cloud atau NAS (misalnya Amazon S3)
- Fungsi: Menyimpan file video dalam berbagai format dan resolusi.
- Interaksi: Diakses oleh Web Server, Transcoding Server, dan CDN untuk menyimpan dan mengambil video.
8. CDN (Content Delivery Network)
- Komponen: Layanan CDN (misalnya Cloudflare, Akamai)
- Fungsi: Meng-cache dan mendistribusikan video populer ke lokasi yang lebih dekat dengan pengguna akhir untuk mengurangi latensi.
- Interaksi: Mengambil video dari Video Storage dan menyajikannya ke User Client.
Skema Database
Tabel users
:
- Menyimpan informasi pengguna seperti
user_id
,username
,email
,password_hash
,created_at
, danupdated_at
. user_id
adalah primary key yang otomatis meningkat (AUTO_INCREMENT).
Tabel videos
:
- Menyimpan informasi video seperti
video_id
,user_id
,title
,description
,upload_date
,views
,likes
,dislikes
,status
, danthumbnail_url
. video_id
adalah primary key yang otomatis meningkat (AUTO_INCREMENT).user_id
adalah foreign key yang mengacu padausers(user_id)
.
Tabel video_files
:
- Menyimpan informasi file video yang sudah di-transcode seperti
file_id
,video_id
,resolution
,format
,file_url
,size
, danduration
. file_id
adalah primary key yang otomatis meningkat (AUTO_INCREMENT).video_id
adalah foreign key yang mengacu padavideos(video_id)
.
Tabel comments
:
- Menyimpan komentar pada video seperti
comment_id
,video_id
,user_id
,comment_text
, dancreated_at
. comment_id
adalah primary key yang otomatis meningkat (AUTO_INCREMENT).video_id
adalah foreign key yang mengacu padavideos(video_id)
.user_id
adalah foreign key yang mengacu padausers(user_id)
.
Tabel likes_dislikes
:
- Menyimpan informasi like dan dislike pada video oleh pengguna seperti
like_dislike_id
,video_id
,user_id
,type
, dancreated_at
. like_dislike_id
adalah primary key yang otomatis meningkat (AUTO_INCREMENT).video_id
adalah foreign key yang mengacu padavideos(video_id)
.user_id
adalah foreign key yang mengacu padausers(user_id)
.
Komentar
Posting Komentar