SDN
← 演習一覧へ

Pastebin / Bit.ly を設計せよ

課題

ユーザーがテキスト(paste)を投稿すると、ランダムに生成された短いリンクが返される。そのリンクにアクセスすると元のテキストを閲覧できる。ログイン不要(匿名)で使え、各pasteには「月ごとの訪問数」などの簡単なアクセス統計が見られる。一定期間で期限切れになったpasteは削除する。これを高可用に作るのが課題。URL短縮サービス(Bit.ly)も本質的に同じ構造で考えられる。

制約・前提
  • ユーザーは10M(1000万)人
  • paste書き込みは10M回/月、paste読み取りは100M回/月
  • read:write = 10:1 (読み取りが圧倒的に多い = read-heavy)
  • 1 pasteあたり平均1.27 KB
  • 3年で約360M(3.6億)個のshortlinkが必要
  • 平均40 read req/s (ただしトラフィックは不均一でピークはもっと高い)
  • ログイン不要(匿名)、期限切れpasteは削除、高可用が必須
主要数値
概算(back-of-the-envelope)の出発点。
read:write比10:1 (read-heavy)
平均read req/s40 req/s
3年で必要なshortlink数約360M (3.6億)
1 pasteあたりサイズ1.27 KB
Base62 7文字の空間62^7 ≒ 3.5兆通り
3年分のストレージ約450 GB
主要数値の可視化

read : write 比

read : write = 10:1

3 年分のストレージ規模

read-heavy (10:1) 短縮 URL の参照が圧倒的に多く、生成(write)は少ない。キャッシュと読み取りスケールが鍵。

まず自分で設計を考えてから、1ステップずつ答え合わせをしましょう。

Step 1: 要件・ユースケース(まだ伏せられています)

考えてみよう(面接官の追加質問)
  • shortlinkを「本文ハッシュ」ではなく「自動採番(連番)→Base62」で作るとどんな利点・欠点があるか?(ヒント: 衝突チェック不要だが連番が推測されやすい)
  • 期限切れpasteの削除を、cronの一括削除ではなくDBのTTL機能でやる場合のメリット・デメリットは?
  • MD5の代わりにSHA-256を使うべき場面はあるか? なぜこの用途ではMD5で十分なのか?
  • 同じ本文を2人が投稿したら同じshortlinkになってしまう。これは問題か? どう設計を変えるか?
  • 月次統計をリアルタイムに近づけたい場合、どんな仕組み(ストリーム処理等)を足すか?