TUGAS 9 PPL

DESAIN SISTEM APLIKASI INSTAGRAM
Bapak Fajar Baskoro, S.Kom., M.T. 


Deskripsi Aplikasi
Instagram adalah platform media sosial yang memungkinkan pengguna untuk berbagi foto dan video dengan pengikut mereka. Instagram adalah aplikasi berbagi foto dan video yang diluncurkan pada Oktober 2010. Aplikasi ini memungkinkan pengguna untuk mengambil foto, merekam video, menerapkan filter digital, dan membagikannya di berbagai layanan media sosial, termasuk Instagram itu sendiri. Instagram sendiri menjadi penghubung dari berbagai dunia melalui gambar dan video visual serta memudahkan orang untuk berbagi kehidupan mereka dan menemukan inspirasi dari orang lain.

Requirements
Persyaratan Fungsional 
  • Memposting foto dan video
  • Menambahkan caption dan lokasi ke postingan
  • Mengikuti dan berhenti mengikuti pengguna lain
  • Menyukai dan mengomentari postingan
  • Menghasilkan feed atau timeline berdasarkan pengikut pengguna
Persyaratan Non-Fungsional
  • Ketersediaan tinggi — downtime minimal
  • Skalabilitas hingga ratusan juta pengguna aktif
  • Latensi rendah untuk semua operasi seperti memuat feed
  • Keandalan dan toleransi kesalahan dari backend
  • Durabilitas konten, setiap foto atau video yang berhasil diunggah tidak boleh hilang
  • Konsistensi eventual pada feed, tidak apa-apa jika sebuah postingan tidak langsung terlihat oleh pengikut
  • Optimisasi dan kompresi penyimpanan media
  • Optimisasi bandwidth jaringan
  • Caching untuk performa
High Level Design


Detail Komponen Sistem Instagram

1. Client

  • Deskripsi : Aplikasi mobile/desktop yang akan terhubung ke server backend melalui REST API yang telah didefinisikan.
  • Fungsi Utama : Mengunggah dan mengunduh foto dan video, mengikuti dan berhenti mengikuti pengguna, menyukai dan mengomentari postingan, serta melihat feed.

2. Load Balancer

  • Deskripsi : Menggunakan load balancer untuk mendistribusikan lalu lintas antara server yang berbeda.
  • Fungsi Utama : Meningkatkan ketersediaan sistem dan mendistribusikan lalu lintas jika ada server yang turun.

3.  Image Service

  • Deskripsi : Bertanggung jawab menyediakan API untuk mengunggah gambar dan mendapatkan metadata gambar.
  • Fungsi Utama : Mengunggah gambar ke S3 dan mengembalikan jalur gambar di S3 yang akan digunakan oleh klien untuk memuat gambar di aplikasi mereka.

4. S3

  • Deskripsi : Menggunakan penyimpanan objek untuk menyimpan gambar yang diunggah oleh pengguna.
  • Fungsi Utama : Menyimpan gambar dengan skala yang dapat ditingkatkan dan biaya yang murah. Mengintegrasikan dengan AWS CloudFront untuk rendering gambar yang lebih cepat di aplikasi pengguna.

5. CloudFront

  • Deskripsi : Layanan content delivery network (CDN) dari Amazon yang dibangun untuk performa tinggi, keamanan, dan kenyamanan pengembang.
  • Fungsi Utama : Mempercepat rendering gambar di aplikasi pengguna.

6. Image DDB

  • Deskripsi : Menggunakan AWS DynamoDB untuk menyimpan metadata gambar yang diunggah oleh pengguna.
  • Fungsi Utama : Menyimpan informasi tentang gambar seperti jalur di S3, waktu unggah, dan pengguna yang mengunggah.

7.  SNS

  • Deskripsi : Menggunakan AWS Simple Notification Service untuk menerbitkan pemberitahuan setiap kali pengguna mengunggah gambar.
  • Fungsi Utama : Membantu dalam pemrosesan lain seperti pemantauan, pembuatan feed, analitik, dll. Berbagai SQS dapat berlangganan ke SNS ini untuk mendengarkan acara.

8. SQS

  • Deskripsi : Menggunakan AWS Simple Queue Service yang akan berlangganan ke SNS unggahan dan layanan pembuatan feed akan mendengarkan SQS ini untuk memproses acara.
  • Fungsi Utama : Menyediakan antrian pesan yang dapat diandalkan untuk pemrosesan asinkron.

9. Feed Generation Service

  • Deskripsi : Bertanggung jawab untuk pembuatan feed pengguna.
  • Fungsi Utama : Mendengarkan acara unggahan pengguna melalui SQS dan memulai proses pembuatan feed pengguna. Layanan ini akan menangani jutaan acara.

10. Feed DDB

  • Deskripsi : Menggunakan DynamoDB untuk menyimpan data feed pengguna.
  • Fungsi Utama : Layanan pembuatan feed akan berinteraksi dengan DDB untuk memperbarui feed pengguna.

11. Redis Cache

  • Deskripsi : Mengimplementasikan lapisan cache untuk menjaga latensi baca tetap rendah bagi pengguna.
  • Fungsi Utama : Saat permintaan datang untuk mengambil feed pengguna, pertama akan memeriksa di cache Redis, jika tidak tersedia maka akan mengambil dari DDB dan mengembalikan respons.

Ringkasan Alur Sistem

1. Unggah Gambar/Video :

  • Klien mengunggah gambar/video melalui Image Service.
  • Image Service menyimpan gambar di **S3** dan metadata di Image DDB.
  • Image Service menerbitkan pemberitahuan unggahan ke SNS.

2. Distribusi Traffic :

  • Load Balancer mendistribusikan lalu lintas di antara server aplikasi.

3. Pembuatan Feed :

  • SQS menerima pesan unggahan dari SNS.
  • Feed Generation Service** mendengarkan SQS dan memperbarui feed pengguna di Feed DDB.
  • Redis Cache digunakan untuk mempercepat pengambilan feed pengguna.

4. Pengambilan Konten :

  • Klien mengambil feed melalui API dan pertama-tama memeriksa Redis Cache.
  • Jika tidak tersedia di cache, data diambil dari Feed DDB dan hasilnya disimpan di cache untuk permintaan selanjutnya.

Dengan arsitektur ini, Instagram dapat menangani skala besar permintaan pengguna sambil memastikan ketersediaan dan performa tinggi.

Low Level Design



Berikut rincian komponen dan interaksi utama untuk desain tingkat rendah Instagram:

  • Layanan Pengguna:
    • Menangani pendaftaran pengguna, login, otentikasi, dan manajemen profil.
    • Menyimpan data pengguna seperti nama pengguna, email, bio, gambar profil, dll.
    • Terintegrasi dengan penyedia otentikasi sosial (misalnya, Facebook, Google).
  • Layanan Pos:
    • Menangani pengunggahan, pengeditan, dan penghapusan foto dan video.
    • Menyimpan metadata postingan seperti keterangan, tagar, lokasi, stempel waktu, dll. Memproses media yang diunggah untuk mengubah ukuran, memfilter, dan membuat thumbnail.
    • Mengelola transcoding foto dan video untuk perangkat dan resolusi berbeda.
  • Layanan Pakan:
    • Menghasilkan umpan berita yang dipersonalisasi untuk setiap pengguna berdasarkan pengikut, suka, aktivitas, dan keterlibatan mereka.
    • Memanfaatkan sistem terdistribusi seperti Apache Kafka atau RabbitMQ untuk pembaruan dan pemberitahuan waktu nyata.
    • Memanfaatkan lapisan cache seperti Redis untuk pengambilan feed cepat dan mengurangi beban database.
  • Layanan Penyimpanan:
    • Menyimpan foto dan video yang diunggah secara efisien dan andal.
    • Memanfaatkan solusi penyimpanan objek yang dapat diskalakan seperti Amazon S3, Google Cloud Storage, atau Azure Blob Storage.
    • Menerapkan mekanisme redundansi dan pemulihan bencana untuk perlindungan data.
  • Layanan Pencarian:
    • Memungkinkan pencarian pengguna, hashtag, dan lokasi.
    • Mengindeks pengguna, postingan, dan hashtag berdasarkan parameter yang relevan.
    • Menggunakan algoritma pengindeksan dan pencarian yang efisien untuk hasil yang cepat dan akurat.
  • Layanan Komentar:
    • Menangani penambahan, pengeditan, dan penghapusan komentar pada postingan.
    • Melacak rangkaian komentar dan hubungan orang tua-anak.
    • Memberi tahu pengguna tentang komentar baru pada postingan mereka sendiri atau komentar yang mereka ikuti.
  • Layanan Pemberitahuan:
    • Memberi tahu pengguna tentang peristiwa yang relevan seperti suka, komentar, sebutan, dan mengikuti.
    • Mengirimkan notifikasi ke perangkat seluler melalui platform seperti Firebase Cloud Messaging atau Amazon SNS.
    • Memanfaatkan sistem antrian untuk pengiriman notifikasi asinkron.
  • Layanan Analisis:
    • Melacak keterlibatan pengguna, kinerja postingan, dan penggunaan platform secara keseluruhan.
    • Mengumpulkan data tentang tampilan, suka, komentar, berbagi, dan klik.
    • Memberikan wawasan untuk meningkatkan pengalaman pengguna, mengoptimalkan rekomendasi konten, dan menargetkan iklan.
Use Case Diagram


Pada Diagram di atas kita telah membahas tentang diagram use case Instagram:

  • Jika pengguna baru, mereka akan mendaftar terlebih dahulu, kemudian disimpan di database, mereka akan memverifikasi profilnya.
  • Jika pengguna sudah mendaftar, mereka akan memberikan Id email dan Kata Sandi.
  • Di halaman beranda mereka akan mendapatkan foto dan video, serta halaman cerita.
  • Postingan yang diposting sekarang, akan muncul di bagian atas. Pengguna dapat mengikuti atau berhenti mengikuti orang tersebut. Pengguna bisa siaran langsung. Itu semua tergantung pada mereka.
  • Akan ada pengaturan, di mana pengguna dapat melihat cerita masa lalu atau postingan yang telah diarsipkan. Pengguna dapat membuka blokir orang yang bisa mendapatkan akun terverifikasi, setelah membayar.
Database Design
Basis data untuk platform media sosial menawarkan serangkaian fitur yang dirancang untuk mendukung manajemen pengguna, penyimpanan konten, interaksi pengguna, pembaruan waktu nyata, dan analitik.

1. Tabel Pengguna


  • UserID (Primary Key): Ini adalah pengidentifikasi unik untuk setiap pengguna.
  • Nama Pengguna : Nama tampilan pengguna.
  • Email : Alamat email pengguna untuk kontak dan login.
  • PasswordHash : Kata sandi yang di-hash dengan aman untuk otentikasi pengguna.
  • ProfilePicture : Ini adalah URL atau referensi ke gambar profil pengguna.
  • Bio: Bio profil pengguna.
  • CreatedAt : Stempel waktu saat akun pengguna dibuat.

2. Tabel Posting


  • PostID (Primary Key): Ini adalah pengidentifikasi unik untuk setiap posting.
  • UserID : Pengidentifikasi untuk pengguna yang membuat postingan.
  • ContentURL : Merupakan URL atau referensi ke foto atau video.
  • Caption : Teks caption yang menyertai postingan.
  • CreatedAt : Ini adalah Stempel Waktu saat postingan dibuat.

3. Tabel Komentar


  • CommentID (Kunci Utama): Ini adalah pengidentifikasi unik untuk setiap komentar.
  • PostID : Pengidentifikasi untuk postingan terkait.
  • UserID : Pengenal pengguna yang memberikan komentar.
  • Content : Isi teks komentar.
  • CreatedAt : Stempel waktu ketika komentar dibuat.

4. Tabel Suka



  • LikeID (Primary Key): Ini adalah pengidentifikasi unik untuk setiap suka.
  • PostID : Pengidentifikasi untuk postingan yang disukai.
  • UserID : Pengenal pengguna yang menyukai postingan.
  • CreatedAt : Stempel waktu saat suka dibuat.

5. Ikuti Tabel


  • FollowerID : Pengidentifikasi untuk pengguna yang mengikuti.
  • FolloweeID : Pengidentifikasi untuk pengguna yang diikuti.
  • CreatedAt : Stempel waktu saat hubungan berikut terjalin.

Hubungan Antar Entitas

Berdasarkan entitas dan atribut yang disediakan, hubungan di antara mereka dapat ditentukan untuk membangun aliran data dan ketergantungan dalam database platform media sosial.

1. Hubungan One-to-Many antara Pengguna dan Postingan:

  • Satu pengguna dapat membuat banyak postingan.
  • Setiap postingan dibuat oleh satu pengguna.
  • Oleh karena itu, hubungan antara Pengguna dan Postingan adalah hubungan One-to-Many.

2. Hubungan One-to-Many antara Postingan dan Komentar:

  • Satu postingan bisa mendapat banyak komentar.
  • Setiap komentar dikaitkan dengan satu postingan.
  • Oleh karena itu, hubungan antara Postingan dan Komentar adalah hubungan One-to-Many.

3. Hubungan One-to-Many antara Posting dan Suka:

  • Satu postingan bisa mendapat banyak suka.
  • Setiap suka dikaitkan dengan satu postingan.
  • Oleh karena itu, hubungan antara Post dan Like adalah hubungan One-to-Many.

4. Hubungan One-to-Many antara Pengguna dan Komentar:

  • Satu pengguna dapat membuat banyak komentar.
  • Setiap komentar dibuat oleh satu pengguna.
  • Oleh karena itu, hubungan antara Pengguna dan Komentar adalah hubungan One-to-Many.

5. Hubungan One-to-Many antara Pengguna dan Suka:

  • Satu pengguna dapat menyukai beberapa postingan.
  • Setiap suka dibuat oleh satu pengguna.
  • Oleh karena itu, hubungan antara Pengguna dan Suka adalah hubungan One-to-Many.

6. Hubungan Many-to-Many antara Pengguna dan Follow:

  • Satu pengguna dapat mengikuti beberapa pengguna lainnya.
  • Satu pengguna dapat diikuti oleh beberapa pengguna lainnya.
  • Oleh karena itu, hubungan antara Pengguna dan Ikuti adalah Many-to-Many. 
Capacity Estimation

Dengan asumsi ukuran rata-rata gambar adalah 2 MB dan ukuran video adalah 200 MB.

Persyaratan penyimpanan Konten (Gambar/video) per hari 
  1. 100 juta foto per hari × ukuran foto rata-rata 2 MB × 3 faktor replikasi. 
  2. 100 x 10⁶ x 2 x 3 MB => 600 TB per hari 
  3. 50 juta video per hari × 100 MB ukuran video rata-rata × 3 faktor replikasi
  4. 50 x 10⁶ x 100 x 3 MB => 15000 TB per hari 
  5. total kebutuhan penyimpanan per hari adalah 600 + 15000 TB ≈ 16 PB (petabyte) 
  6. kebutuhan penyimpanan selama 10 tahun adalah 16 x 365 x 10 PB ≈ 59EB (exabyte)
Jumlah penulisan per detik. 
  1. 100 juta foto dan 50 juta video yang diunggah setiap hari berarti 150 juta. Comment, like dan follow bisa 100x upload. 
  2. Jadi 150M * 100 => 15 Miliar permintaan tulis per hari. 
  3. 1 Juta permintaan per hari ≈ 12 permintaan per detik 
  4. 15000 Juta permintaan per hari ≈ 12*15000 => 180 ribu permintaan per detik
Jumlah pembacaan per detik. 
  1. Di media sosial, pembacaan jauh lebih tinggi daripada penulisan dengan asumsi 100x 
  2. 180000 * 100 permintaan per detik => 18 Juta permintaan per detik
Tidak ada mesin yang diperlukan dalam cluster untuk menangani beban sebesar itu. 
  1. Kita dapat menghitungnya dengan 2 cara pertama dengan mengambil rata-rata jumlah permintaan per detik untuk membaca dan menulis yaitu masing-masing 180K dan 18M permintaan per detik. 
  2. Namun dalam praktiknya, perusahaan seperti Instagram mempersiapkan diri untuk skenario terburuk yaitu jika setiap pengguna mengirimkan permintaan secara bersamaan. 
  3. Permintaan 2B selama beban puncak. 
  4. Dengan asumsi 1 mesin dapat menangani 10K permintaan per detik dan semua mesin memiliki kapasitas yang sama, Jadi untuk menangani permintaan 2B kita memerlukan 2*10⁹ / 10³ => 200K mesin
Bandwidth
  1. Detik dalam hari = perkiraan 100.000 detik (Sesuai bagian di atas)
  2. 150 GB per hari / 100.000 detik = 150.000.000.000 / 100.000 = 1.500.000 = 1,5 MB per detik
  3. 2 TB per hari / 100.000 detik = 2.000.000.000.000 / 100.000 = 200.000.000 byte per detik = 200 MB per detik
Memori/Cache
  1. Jika kita ingin melakukan cache per pengguna 20 postingan/twit maka 300 byte * 500.000.000 pengguna harian * 20 = 150 GB * 20 = 3000 GB = 3 TB cache.
  2. Jika satu mesin atau server dapat menyimpan cache sebesar 150 GB, maka diperlukan 20 mesin/server untuk melakukan cache.
Kebutuhan penyimpanan sangat besar karena volume konten foto dan video yang diunggah setiap hari. Dengan faktor replikasi untuk keandalan, kebutuhan penyimpanan meningkat drastis. Kebutuhan penulisan dan pembacaan juga sangat tinggi, dengan permintaan yang jauh lebih tinggi untuk pembacaan karena sifat konsumsi konten pada media sosial. Untuk menangani beban ini, diperlukan jumlah mesin yang sangat besar, terutama saat mempertimbangkan skenario terburuk di mana semua pengguna aktif secara bersamaan.

Referensi

Komentar

Postingan populer dari blog ini

TUGAS 5 PPL

TUGAS 3 PPL

TUGAS 1 PPB