Page cover

System Design 1: Back of The Envelope Estimation

Perkiraan Kasar (Back of The Envelope Estimation)

Pendahuluan

Dalam system design interview, terkadang Anda diminta untuk memperkirakan kapasitas atau kebutuhan performa sistem menggunakan pendekatan perkiraan kasar (back-of-the-envelope estimation).

Menurut Jeff Dean, Google Senior Fellow, “Perkiraan kasar adalah estimasi yang dibuat menggunakan kombinasi of thought experiments & common performance numbers untuk mendapatkan gambaran awal mengenai desain mana yang akan memenuhi kebutuhan Anda.”

Anda dapat melakukan perkiraan kasar secara efektif, Anda perlu memahami dasar-dasar skalabilitas dengan baik. Beberapa konsep penting yang harus Anda kuasai meliputi:

  • Konsep pangkat dua (power of two)

  • Angka latensi yang wajib diketahui setiap programmer

  • Angka ketersediaan sistem (availability numbers)

Pemahaman yang kuat tentang konsep-konsep ini akan membantu Anda membuat estimasi yang lebih akurat dalam merancang sistem yang efisien dan dapat diskalakan.

Konsep Pangkat Dua dalam Volume Data

Saat bekerja dengan sistem terdistribusi, volume data bisa menjadi sangat besar. Namun, semua perhitungan tetap kembali pada dasar-dasarnya. Untuk mendapatkan perhitungan yang akurat, sangat penting untuk memahami satuan volume data yang menggunakan pangkat dua.

Dalam sistem komputasi:

  • 1 byte terdiri dari 8 bit.

  • Satu karakter ASCII menggunakan 1 byte memori (8 bit).

Tabel berikut menjelaskan satuan volume data berdasarkan pangkat dua:

Pangkat
Nilai Perkiraan (Bytes)
Nama Lengkap
Singkatan

10 (2^10)

1 Ribu

1 Kilobyte

1 KB

20 (2^20)

1 Juta

1 Megabyte

1 MB

30 (2^30)

1 Miliar

1 Gigabyte

1 GB

40 (2^40)

1 Triliun

1 Terabyte

1 TB

50 (2^50)

1 Kuadriliun

1 Petabyte

1 PB

Contoh 1: Konversi Ukuran Data Menggunakan Pangkat Dua

Misalkan kita ingin mengonversi 2^30 byte ke satuan yang lebih besar.

  • Dari tabel, kita tahu bahwa 2^30 byte = 1 Gigabyte (GB).

  • Jadi, 2 × 2^30 byte = 2 GB.

Jika kita memiliki 8 × 2^30 byte, itu berarti 8 GB.

Contoh 2: Perhitungan Penyimpanan Berdasarkan Pangkat Dua

Misalkan sebuah sistem harus menyimpan 1 miliar file, dan setiap file berukuran 1 KB.

Perhitungan:

  1. Dari tabel, kita tahu bahwa 1 KB = 2^10 byte.

  2. Jika ada 1 miliar file (10^9 file), maka total ukuran penyimpanan adalah:

    1 miliar × 2^10 byte= 10^9 × 2^10 byte

  3. Konversi ke satuan yang lebih besar:

    • 10^9 ≈ 2^30 (karena 1 miliar ≈ 2^30)

    • Jadi, 2^30 × 2^10 = 2^40 byte = 1 Terabyte (TB).

Maka total penyimpanan yang dibutuhkan adalah 1 TB.

Contoh 3: Perhitungan Bandwidth Menggunakan Pangkat Dua

Misalkan kita ingin menghitung bandwidth yang dibutuhkan untuk mentransfer 10 Terabyte (TB) data dalam 1 jam.

Perhitungan:

  1. Dari tabel, 1 TB = 2^40 byte.

  2. Jika ada 10 TB, maka total byte yang ditransfer adalah:

    10 × 2^40 byte = 10 × 1,099,511,627,776 byte

  3. Konversi ke bit (karena bandwidth biasanya dihitung dalam bit):

    • 1 byte = 8 bit, maka:

    • 10 * 2^40 * 8 = 10 * 2^40 * 2^3 = 10 × 2^43 bit

  4. Waktu transfer = 1 jam = 3600 detik, jadi bandwidth per detik adalah:

    • (10 × 2^43 bit) / 3600 detik

  5. Perkiraan hasilnya sekitar 22.2 Gbps.

Jadi, untuk mentransfer 10 TB data dalam 1 jam, kita membutuhkan koneksi dengan bandwidth sekitar 22.2 Gbps.

Pemahaman konsep ini sangat berguna dalam memperkirakan kapasitas penyimpanan, kebutuhan bandwidth, dan performa sistem dalam skala besar.

Angka latensi yang harus diketahui setiap programmer

Dr. Dean dari Google mengungkapkan durasi berbagai operasi komputer khas pada tahun 2010. Beberapa angka mungkin sudah usang seiring dengan semakin cepat dan kuatnya komputer. Namun, angka-angka tersebut masih dapat memberikan gambaran tentang kecepatan dan kelambatan berbagai operasi komputer.

Berikut adalah tabel latensi berdasarkan gambar yang Anda berikan:

Nama Operasi
Waktu

Referensi cache L1

0,5 ns

Mispredict cabang (branch mispredict)

5 ns

Referensi cache L2

7 ns

Mutex lock/unlock

100 ns

Referensi memori utama

100 ns

Kompres 1 KB dengan Zippy

10.000 ns = 10 µs

Kirim 2K byte melalui jaringan 1 Gbps

20.000 ns = 20 µs

Baca 1 MB secara berurutan dari memori

250.000 ns = 250 µs

Round trip dalam satu pusat data

500.000 ns = 500 µs

Pencarian disk (disk seek)

10.000.000 ns = 10 ms

Baca 1 MB secara berurutan dari jaringan

10.000.000 ns = 10 ms

Baca 1 MB secara berurutan dari disk

30.000.000 ns = 30 ms

Kirim paket dari California -> Belanda -> California

150.000.000 ns = 150 ms

Keterangan:

  • ns = nanosecond (1 ns = 10⁻⁹ detik)

  • µs = microsecond (1 µs = 10⁻⁶ detik = 1.000 ns)

  • ms = millisecond (1 ms = 10⁻³ detik = 1.000 µs = 1.000.000 ns)

Tabel ini menunjukkan estimasi waktu yang dibutuhkan untuk berbagai operasi dalam sistem komputer, memberikan gambaran seberapa cepat atau lambat setiap operasi berlangsung.

Berikut beberapa contoh penggunaan angka dari tabel untuk memahami performa sistem.

Contoh 1: Perbandingan Latensi L1 Cache vs. Main Memory

  • L1 cache reference: 0.5 ns

  • Main memory reference: 100 ns

Perbandingan:

100 ns / 0.5 ns = 200

👉 Akses L1 cache 200x lebih cepat dibandingkan akses main memory (RAM).


Contoh 2: Membaca 10 MB dari Disk vs. Memori

Misalkan kita ingin membaca 10 MB data dari disk dan RAM:

  • Baca 1 MB dari disk = 30 ms

  • Baca 1 MB dari RAM = 250 µs = 0.25 ms

Untuk 10 MB:

  • Dari disk: 10×30 = 300 ms

  • Dari RAM: 10×0.25 = 2.5 ms

👉 Membaca 10 MB dari RAM 120x lebih cepat dibandingkan dari disk.


Contoh 3: Membandingkan Latensi Jaringan Lokal vs. Internasional

  • Round trip dalam satu data center = 500 µs = 0.5 ms

  • Packet dari California ke Belanda (dan kembali) = 150 ms

Perbandingan:

150 ms / 0.5 ms = 300

👉 Latensi jaringan internasional 300x lebih lambat dibandingkan komunikasi dalam satu data center.


Kesimpulan

💡 Cache jauh lebih cepat dibandingkan RAM, RAM jauh lebih cepat dibandingkan disk. 💡 Jaringan lokal dalam data center jauh lebih cepat dibandingkan jaringan global. 💡 Pemahaman angka-angka ini membantu dalam optimasi performa aplikasi.

Angka Ketersediaan

Ketersediaan tinggi (High availability) adalah kemampuan suatu sistem untuk tetap beroperasi secara terus-menerus dalam jangka waktu yang diinginkan. Ketersediaan tinggi diukur dalam bentuk persentase, dengan 100% berarti layanan yang tidak mengalami downtime sama sekali. Sebagian besar layanan memiliki tingkat ketersediaan antara 99% hingga 100%.

Service Level Agreement (SLA) adalah istilah yang umum digunakan oleh penyedia layanan. Ini adalah perjanjian antara Anda (penyedia layanan) dan pelanggan Anda, yang secara resmi mendefinisikan tingkat uptime yang akan diberikan oleh layanan Anda. Penyedia cloud seperti Amazon, Google, dan Microsoft menetapkan SLA mereka pada tingkat 99,9% atau lebih tinggi.

Uptime biasanya diukur dalam jumlah angka sembilan (nines). Semakin banyak angka sembilan, semakin baik ketersediaannya. Seperti yang ditunjukkan dalam Tabel 2-3, semakin tinggi angka sembilan, semakin sedikit waktu downtime yang diharapkan dalam satu tahun.

Tabel Ketersediaan dan Downtime

Ketersediaan (%)

Downtime per Hari

Downtime per Tahun

99%

14,40 menit

3,65 hari

99.9%

1,44 menit

8,77 jam

99.99%

8,64 detik

52,60 menit

99.999%

864,00 milidetik

5,26 menit

99.9999%

86,40 milidetik

31,56 detik

Misalkan sebuah layanan memiliki SLA 99.99%. Kita ingin mengetahui berapa lama downtime yang dapat diterima dalam satu bulan.

  1. Dari tabel, downtime per tahun untuk 99.99% adalah 52,60 menit.

  2. Dalam satu tahun ada 12 bulan, jadi downtime per bulan adalah:

    52.60 menit / 12 = 4.38 menit

Jadi, layanan dengan 99.99% uptime dapat mengalami downtime maksimal 4.38 menit per bulan.

Studi Kasus

Contoh: Estimasi QPS Twitter dan Kebutuhan Penyimpanan

Catatan: Angka-angka berikut hanya digunakan untuk latihan dan bukan angka sebenarnya dari Twitter.

Asumsi:

  • 300 juta pengguna aktif bulanan.

  • 50% pengguna menggunakan Twitter setiap hari.

  • Setiap pengguna rata-rata memposting 2 tweet per hari.

  • 10% dari tweet berisi media (gambar/video).

  • Data disimpan selama 5 tahun.


Estimasi Perhitungan

Estimasi Query Per Second (QPS)

Kita menghitung jumlah Daily Active Users (DAU) dan estimasi QPS berdasarkan jumlah tweet yang diposting:

  1. Pengguna aktif harian (DAU):

    300 juta × 50% = 150 juta pengguna

  2. Estimasi QPS rata-rata:

    150 juta × 2 tweet / (24 jam×3600 detik) = 300 juta / 86400 ≈ 3500 QPS

  3. Perkiraan Peak QPS (lonjakan trafik):

    Pada jam sibuk, beban bisa meningkat hingga 2 kali lipat dari rata-rata.

    2 × 3500 = 7000 QPS


Estimasi Penyimpanan Media

Karena media hanya terdapat pada 10% dari total tweet, kita hanya menghitung kebutuhan penyimpanan media.

  1. Rata-rata ukuran satu tweet (tanpa media):

    • tweet_id: 64 bytes

    • text: 140 bytes

    • Total (tanpa media): 204 bytes

  2. Rata-rata ukuran media: 1 MB per tweet dengan media

  3. Penyimpanan media harian:

    150 juta × 2 tweet × 10% × 1 MB = 30 TB per hari

  4. Penyimpanan media selama 5 tahun:

    30 TB × 365 × 5 = 54,75 ≈ 55 PB

Tips untuk Menguasai Perhitungan

  1. Gunakan Pembulatan & Perkiraan

    • Saat wawancara, hindari perhitungan yang rumit.

    • Misalnya, daripada menghitung 99987 / 9.1, sederhanakan menjadi 100.000 / 10.

  2. Tulis Asumsi dengan Jelas

    • Pastikan setiap angka yang digunakan memiliki konteks yang jelas.

    • Contoh: “Pengguna aktif harian adalah 50% dari total pengguna bulanan.”

  3. Gunakan Satuan dengan Jelas

    • Saat menulis angka, tambahkan satuan (misal 5 MB, bukan hanya 5).

    • Ini mencegah kebingungan antara MB, GB, atau unit lainnya.

  4. Latih Perhitungan Sejenis

    • Biasanya yang sering ditanyakan dalam wawancara meliputi:

      • QPS (Query per second)

      • Peak QPS

      • Kebutuhan penyimpanan

      • Cache

      • Jumlah server

    • Berlatih dengan berbagai skenario akan membantu meningkatkan kecepatan berpikir.

Last updated