บทที่ 08 · URL Shortener

ออกแบบ URL Shortener

บทนี้กล่าวถึงการออกแบบบริการย่อ URL เช่น TinyURL เป้าหมายหลักรวมถึงการย่อ URL การ Redirect และความสามารถในการขยายสูงเพื่อรองรับปริมาณ Traffic ขนาดใหญ่

บทนำ

บทนี้กล่าวถึงการออกแบบบริการย่อ URL เช่น TinyURL ระบบมีเป้าหมายหลัก:

ข้อกำหนด

API Endpoints

POST api/v1/data/shorten
Parameters: {longUrl: longURLString}
Returns: shortURL
GET api/v1/shortUrl
Returns: longURL สำหรับ redirect

URL Redirection

Data Model

จัดเก็บ <shortURL, longURL> mappings ใน Relational Database

Hash Function

1. Base 62 Conversion

เข้ารหัสตัวเลขโดยใช้ตัวอักษร [0-9, a-z, A-Z] ให้ 62 ตัวอักษรที่เป็นไปได้

2. Hash + Collision Resolution

ใช้ Hash Functions เช่น CRC32, MD5, หรือ SHA-1

เปรียบเทียบวิธีการ

Hash + Collision Resolution

  • ความยาว Short URL คงที่
  • ไม่ต้องการ Unique ID Generator
  • Collision เป็นไปได้และต้องการการแก้ไข

Base 62 Conversion

  • ความยาวไม่คงที่และเพิ่มขึ้นตาม ID
  • ต้องการ Unique ID Generator
  • Collision ไม่เป็นไปได้
  • หา Short URL ถัดไปได้ง่ายถ้า ID เพิ่มทีละ 1

URL Shortening Flow

  1. ตรวจสอบว่า longURL มีอยู่ใน Database หรือไม่
  2. หากพบ ส่งคืน shortURL ที่มีอยู่
  3. หากไม่:
    • สร้าง Unique ID โดยใช้ Distributed ID Generator
    • แปลง ID เป็น shortURL โดยใช้ Base 62
    • จัดเก็บ <id, shortURL, longURL> mapping ใน Database

URL Redirecting Flow

  1. ผู้ใช้คลิก shortURL
  2. Query <shortURL, longURL> mapping:
    • ตรวจสอบ Cache ก่อนเพื่อเข้าถึงเร็วขึ้น
    • หากไม่อยู่ใน Cache สืบค้น Database
  3. Redirect ผู้ใช้ไปยัง longURL

ข้อพิจารณาเพิ่มเติม

Rate Limiter

ป้องกันการใช้งานโดยการกำหนด Limits ต่อ IP

Scalability

Analytics

รวบรวมข้อมูลเช่น Click Rates, Source, Timestamps

เนื้อหานี้อ้างอิงจาก ByteByteGo - System Design Interview - An Insider's Guide