logo
cover

Desain sebuah Servis Short URL? Tidak Semudah yang kamu Pikir


Rekan kerja saya membahas rencana kerjanya. Dia membutuhkan fitur untuk membuat URL singkat untuk dikirim melalui SMS. Jadi saya memberikan beberapa pertanyaan untuk mengetahui apa yang dia butuhkan.

Saya: Berapa jumlah karakter maksimum yang bisa digunakan?
A: Kami bisa menggunakan maksimal 8 karakter.

Saya: Berapa volume traffic yang diharapkan?
A: Mungkin sekitar 1 juta URL per bulan.

Saya: Apakah ada karakter khusus yang diizinkan?
A: Kami hanya menggunakan karakter base64 tanpa garis bawah (_).

Saya: Fitur apa lagi yang Anda butuhkan?
A: Kami perlu menghapus link setelah waktu kadaluwarsa.

Saya: Apakah Anda perlu menggunakan URL pendek yang sama jika mereka sudah digunakan sebelumnya?
A: Tidak, buatlah sesederhana mungkin dan kami tidak peduli tentang update atau penggunaan ulang.

Asumsi

Dari System Design Interview, kita mengetahui beberapa poin:

Desain Tingkat Tinggi

API Endpoints

Apa perbedaan kode status 301 vs 302:

Ketika Anda memberikan maksimal 8 karakter, kami dapat menghitung untuk collision. Mari kita asumsikan kami menggunakan base62, 62 ^ 8 byte = 218,3 triliun probabilitas. Jika Anda hanya membutuhkan 1 juta, sudah cukup untuk mencegah collision dan mengembangkan sistem.

Menggunakan fungsi TTL DynamoDB, ini akan membantu membersihkan secara otomatis. Setelah waktu yang ditentukan berlalu, itu akan dihapus.

Asumsi Biaya

Mari kita hitung lagi, kita menggunakan semua produk AWS & mengoptimalkan biaya tanpa paket gratis:

  1. AWS Lambda, dengan RAM 128MB, asumsi 50ms/ requests
  2. AWS API Gateway, menggunakan HTTP APIs, asumsi network keluar 1KB
  3. AWS Route53, standar
  4. AWS DynamoDB, kapasitas on-demand
KomponenFormulaHarga
Lambda - Requests6,000,000req / 1,000,000 x $0.2$1.20
Lambda - CPU6,000,000req x 128MB / 1024 x 50ms / 1000 x $0.000016$0.60
API Gateway - Requests6,000,000req / 1,000,000 x $1.25$7.50
API Gateway - Network6,000,000req x 1 KB / 1024 / 1024 x $0.09$0.51
Route53 - Hosted Zone1 x $0.5$0.50
Route53 - Queries6,000,000req / 1,000,000 x $0.4$2.40
DynamoDB - Write WRU1,000,000req / 1,000,000 x $1.42$1.42
DynamoDB - Read RRU6,000,000req / 1,000,000 x $0.29$1.74
DynamoDB - Storage1,000,000req x 1KB / 1024 / 1024 x $0.29$0.28
DynamoDB - Network5,000,000req x 1KB / 1024 / 1024 x $0.12$0.57
Total$16.72