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:

  1. Pengguna: Ini mewakili pengguna akhir yang mengakses platform untuk menonton video. Klien pengguna berkomunikasi dengan server web.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. Penyimpanan Video: Komponen ini menyimpan file video yang sudah di-transcode. Ketika server web meminta video, ia mengambilnya dari penyimpanan video.

  8. 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.

  9. 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

CREATE TABLE users (
    user_id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    email VARCHAR(100) NOT NULL UNIQUE,
    password_hash VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

CREATE TABLE videos (
    video_id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    title VARCHAR(255) NOT NULL,
    description TEXT,
    upload_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    views INT DEFAULT 0,
    likes INT DEFAULT 0,
    dislikes INT DEFAULT 0,
    status ENUM('public', 'private', 'unlisted') DEFAULT 'public',
    thumbnail_url VARCHAR(255),
    FOREIGN KEY (user_id) REFERENCES users(user_id)
);

CREATE TABLE video_files (
    file_id INT AUTO_INCREMENT PRIMARY KEY,
    video_id INT NOT NULL,
    resolution VARCHAR(20) NOT NULL,
    format VARCHAR(20) NOT NULL,
    file_url VARCHAR(255) NOT NULL,
    size INT NOT NULL,
    duration INT NOT NULL,
    FOREIGN KEY (video_id) REFERENCES videos(video_id)
);

CREATE TABLE comments (
    comment_id INT AUTO_INCREMENT PRIMARY KEY,
    video_id INT NOT NULL,
    user_id INT NOT NULL,
    comment_text TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (video_id) REFERENCES videos(video_id),
    FOREIGN KEY (user_id) REFERENCES users(user_id)
);

CREATE TABLE likes_dislikes (
    like_dislike_id INT AUTO_INCREMENT PRIMARY KEY,
    video_id INT NOT NULL,
    user_id INT NOT NULL,
    type ENUM('like', 'dislike') NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (video_id) REFERENCES videos(video_id),
    FOREIGN KEY (user_id) REFERENCES users(user_id)
);

  • Tabel users:

    • Menyimpan informasi pengguna seperti user_id, username, email, password_hash, created_at, dan updated_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, dan thumbnail_url.
    • video_id adalah primary key yang otomatis meningkat (AUTO_INCREMENT).
    • user_id adalah foreign key yang mengacu pada users(user_id).
  • Tabel video_files:

    • Menyimpan informasi file video yang sudah di-transcode seperti file_id, video_id, resolution, format, file_url, size, dan duration.
    • file_id adalah primary key yang otomatis meningkat (AUTO_INCREMENT).
    • video_id adalah foreign key yang mengacu pada videos(video_id).
  • Tabel comments:

    • Menyimpan komentar pada video seperti comment_id, video_id, user_id, comment_text, dan created_at.
    • comment_id adalah primary key yang otomatis meningkat (AUTO_INCREMENT).
    • video_id adalah foreign key yang mengacu pada videos(video_id).
    • user_id adalah foreign key yang mengacu pada users(user_id).
  • Tabel likes_dislikes:

    • Menyimpan informasi like dan dislike pada video oleh pengguna seperti like_dislike_id, video_id, user_id, type, dan created_at.
    • like_dislike_id adalah primary key yang otomatis meningkat (AUTO_INCREMENT).
    • video_id adalah foreign key yang mengacu pada videos(video_id).
    • user_id adalah foreign key yang mengacu pada users(user_id).
  • Komentar

    Postingan populer dari blog ini

    Latihan 1 (PBKK)

    PPL-ETS

    PPL-EAS