Blog
March 26, 2026

การออกแบบระบบ URL Shortener: วิธีการทำงานของตัวย่อลิงก์ภายใต้ประทุน

"ออกแบบตัวย่อลิงก์ URL" เป็นหนึ่งในคำถามการสัมภาษณ์ออกแบบระบบที่ได้รับความนิยมสูงสุด — และก็มีเหตุผลที่ดี มันสัมผัสการแฮชชิ่ง ฐานข้อมูล การแคชชิ่ง การปรับสมดุลโหลด และระบบแบบกระจาย ทั้งหมดในผลิตภัณฑ์ที่ดูง่ายสำหรับคนทั่วไป

ในคำแนะนำนี้ เราจะอธิบายวิธีการทำงานของตัวย่อลิงก์ URL จริง ๆ การตัดสินใจออกแบบหลัก และการประนีประนอมที่เกี่ยวข้องในการสเกล

การไหลพื้นฐาน

ตัวย่อลิงก์ URL ทำสองสิ่ง:

  1. 1
    ย่อ: นำลิงก์ URL ที่ยาวมาและสร้างรหัสสั้น
  2. 2
    เปลี่ยนเส้นทาง: เมื่อใครคนหนึ่งเข้าชมลิงก์ URL ที่สั้น ให้เปลี่ยนเส้นทางไปยังต้นฉบับ

นี่คือการไหลระดับสูง:

ผู้ใช้สร้างลิงก์ที่สั้น:
  Long URL → สร้างรหัสสั้น → เก็บการแมพ → ส่งกลับ URL ที่สั้น

ผู้ใช้คลิกลิงก์ที่สั้น:
  Short URL → ค้นหารหัส → ค้นหา long URL → 301 เปลี่ยนเส้นทาง

การสร้างรหัสสั้น

ความท้าทายหลักคือการสร้างรหัสที่ไม่ซ้ำกันและสั้น มีหลายวิธี:

วิธีที่ 1: การเข้ารหัส Base62

แปลง ID ที่เพิ่มขึ้นโดยอัตโนมัติเป็นสตริง Base62 โดยใช้อักขระ [a-zA-Z0-9]:

  • ID 11
  • ID 6210
  • ID 238,328ZZZ

รหัส Base62 แบบ 7 ตัวอักษรรองรับ 62^7 = 3.5 ล้านล้าน URL ที่ไม่ซ้ำกัน

ข้อดี: ง่าย ความยาวที่คาดการณ์ได้ ไม่มีการชนกัน ข้อเสีย: ID ตามลำดับสามารถคาดเดาได้ (ผู้ใช้สามารถเดารหัส URL สั้นอื่น ๆ ได้)

วิธีที่ 2: การแฮชชิ่ง

ใช้ฟังก์ชันแฮช (MD5, SHA-256) กับ long URL และนำตัวอักษรแรก N ตัว:

SHA256("https://example.com/very/long/url") → "a3f2b8c1..." รหัสสั้น: "a3f2b8c"

ข้อดี: ข้อมูลเข้าเดียวกันจะสร้างผลลัพธ์เดียวกันเสมอ (การขจัดความซ้ำซ้อน) ข้อเสีย: การชนกันของแฮชต้องจัดการ ความยาวแฮชคงที่อาจสิ้นเปลือง

วิธีที่ 3: การสร้างแบบสุ่ม

สร้างสตริงอักษรตัวเลขแบบสุ่มและตรวจสอบความไม่ซ้ำกัน:

ข้อดี: ง่าย ไม่สามารถคาดเดาได้ ข้อเสีย: ต้องตรวจสอบการชนกันในทุกครั้งที่สร้าง ช้าลงเมื่อฐานข้อมูลเต็ม

ใช้วิธีไหน

ระบบการผลิตส่วนใหญ่ใช้การเข้ารหัส Base62 ที่มีตัวสร้าง ID แบบกระจาย มันง่าย ปราศจากการชนกัน และมีประสิทธิภาพ ที่ Linkly เราใช้วิธีการที่คล้ายกัน — คุณสามารถอ่านเพิ่มเติมเกี่ยวกับ วิธีการทำงานของตัวย่อลิงก์ URL สำหรับภาพรวมที่ไม่ใช่เชิงเทคนิค

การออกแบบฐานข้อมูล

ตารางหลักนั้นตรงไปตรงมา:

urls ├── id (คีย์หลัก เพิ่มขึ้นโดยอัตโนมัติ) ├── short_code (ดัชนีที่ไม่ซ้ำกัน) ├── long_url (ปลายทาง) ├── created_at (แสตมป์เวลา) ├── user_id (ผู้สร้าง) └── click_count (ตัวนับที่ไม่เป็นมาตรฐาน)

SQL vs. NoSQL

SQL (PostgreSQL, MySQL): การปฏิบัติตาม ACID การสอดคล้องที่แข็งแกร่ง ดีสำหรับระดับปานกลาง ตัวย่อลิงก์ URL ส่วนใหญ่เริ่มต้นที่นี่

NoSQL (DynamoDB, Cassandra): ปรับขนาดในแนวนอนได้ดีขึ้นสำหรับมิลเลียร์ URL ความสอดคล้องที่สุดท้ายเป็นที่ยอมรับได้สำหรับกรณีการใช้งานนี้

ไฮบริด: SQL สำหรับการแมพ URL (ต้องการความสอดคล้องที่แข็งแกร่งสำหรับการเปลี่ยนเส้นทาง) NoSQL หรือฐานข้อมูลอนุกรมเวลาสำหรับการวิเคราะห์การคลิก (ปริมาณการเขียนสูง ความสอดคล้องที่สุดท้ายนั้นดี)

การจัดการการเปลี่ยนเส้นทาง

เมื่อผู้ใช้คลิกลิงก์สั้น ระบบต้อง:

  1. 1
    แยกวิเคราะห์รหัสสั้นจาก URL
  2. 2
    ค้นหา long URL ที่สอดคล้องกัน
  3. 3
    ส่งกลับการตอบสนองการเปลี่ยนเส้นทาง HTTP

การเปลี่ยนเส้นทาง 301 vs. 302

  • 301 (ถาวร): ตัวเบราว์เซอร์แคชการเปลี่ยนเส้นทาง คำขอเซิร์ฟเวอร์น้อยลง แต่คุณสูญเสียการมองเห็นการคลิกซ้ำ
  • 302 (ชั่วคราว): ตัวเบราว์เซอร์ตรวจสอบกับเซิร์ฟเวอร์ทุกครั้ง คำขอมากขึ้น แต่การติดตามการคลิกที่ดีกว่า

ตัวย่อลิงก์ URL ส่วนใหญ่ใช้ การเปลี่ยนเส้นทาง 302 เพื่อความแม่นยำในการติดตามการคลิก จากนั้นเสนอ 301 เป็นตัวเลือกสำหรับกรณีการใช้งาน SEO ดูคำแนะนำของเราเกี่ยวกับ การเปลี่ยนเส้นทาง 301 สำหรับข้อมูลเพิ่มเติมเกี่ยวกับความแตกต่างนี้

การแคชชิ่ง

การเปลี่ยนเส้นทางต้องเร็ว — ทุกมิลลิวินาทีของการหน่วงเวลาส่งผลต่อประสบการณ์ผู้ใช้ การแคชชิ่งสำคัญ:

แคชในหน่วยความจำ (Redis/Memcached)

แคชการแมพ short_code → long_url ในหน่วยความจำ:

GET /abc123 → ตรวจสอบ Redis สำหรับ "abc123" → แคชตรง? ส่งกลับการเปลี่ยนเส้นทางทันที → แคชพลาด? ค้นหาฐานข้อมูล แคชผลลัพธ์ ส่งกลับการเปลี่ยนเส้นทาง

อินสแตนซ์ Redis ขนาดเล็กสามารถแคชการแมพ URL หลายล้านรายการได้ เนื่องจากการเข้าชมส่วนใหญ่ไปยังจำนวนลิงก์ยอดนิยมที่ค่อนข้างน้อย อัตราการตรงแคชสูงกว่า 90% จึงเป็นเรื่องปกติ

การแคชชิ่ง CDN

สำหรับการเปลี่ยนเส้นทาง 301 โหนดขอบ CDN สามารถแคชการตอบสนองการเปลี่ยนเส้นทาง ให้บริการจากตำแหน่งที่ใกล้ที่สุดกับผู้ใช้โดยไม่ต้องกดเซิร์ฟเวอร์ต้นทาง

การวิเคราะห์และการติดตามการคลิก

บันทึกข้อมูลการคลิกเป็นการดำเนินการที่มีการเขียนข้อมูลมากซึ่งไม่ควรทำให้การเปลี่ยนเส้นทางช้า:

การประมวลผลแบบอะซิงโครนัส

  1. 1
    ผู้ใช้คลิกลิงก์สั้น
  2. 2
    ระบบส่งกลับการเปลี่ยนเส้นทางทันที
  3. 3
    เหตุการณ์การคลิกถูกผลักไปยังคิว (Kafka, RabbitMQ, SQS)
  4. 4
    พนักงาน ประมวลผลเหตุการณ์ในเบื้องหลัง: แยกวิเคราะห์ user agent สถานที่อยู่ IP จัดเก็บการวิเคราะห์

นี่แยกเส้นทางการเปลี่ยนเส้นทางที่รวดเร็วออกจากไปป์ไลน์การวิเคราะห์ที่ช้ากว่า

ข้อมูลที่ต้องบันทึก

  • Timestamp
  • IP address (สำหรับการกำหนดตำแหน่งทางภูมิศาสตร์)
  • User agent (สำหรับการตรวจจับอุปกรณ์/เบราว์เซอร์)
  • Referrer header
  • ประเทศ เมือง (จาก IP geolocation)

การพิจารณาการปรับขนาด

การทำงานที่ หนักแน่นด้านการอ่าน

ตัวย่อลิงก์ URL มีปริมาณการอ่านมากมายมหาศาล อัตราส่วนทั่วไปอาจเป็น 100:1 การอ่านเพื่อเขียน นี่หมายความว่า:

  • ปรับให้เหมาะสำหรับเส้นทางการเปลี่ยนเส้นทางเหนือสิ่งอื่นใด
  • ใช้การแคชชิ่งอย่างก้าวร้าว
  • อ่านจำลองสำหรับฐานข้อมูล

การสร้าง ID แบบกระจาย

หากคุณใช้ ID ที่เพิ่มขึ้นโดยอัตโนมัติบนเซิร์ฟเวอร์หลายเครื่อง คุณต้องหลีกเลี่ยงการชนกัน ตัวเลือก:

  • Snowflake IDs: วิธีของ Twitter — ฝังแบบ timestamp รหัสเครื่อง และหมายเลขลำดับ
  • UUID: ไม่ซ้ำกันในสากล แต่ยาวกว่า
  • ช่วง ID: กำหนดแต่ละเซิร์ฟเวอร์ช่วง ID เพื่อจัดสรร

การกระจายทางภูมิศาสตร์

ปรับใช้เซิร์ฟเวอร์การเปลี่ยนเส้นทางในหลายภูมิภาค ผู้ใช้ในโตเกียวไม่ควรต้องเดินทางไปกลับไปยังเซิร์ฟเวอร์ในเวอร์จิเนียสำหรับการเปลี่ยนเส้นทาง

การพิจารณาด้านความปลอดภัย

ตัวย่อลิงก์ URL สามารถเอาใจใส่สำหรับการฟิชชิ่งและการแพร่กระจายมัลแวร์ ระบบการผลิตต้องการ:

  • การสแกน URL — ตรวจสอบปลายทางเทียบกับฐานข้อมูลมัลแวร์และฟิชชิ่ง
  • การจำกัดอัตรา — ป้องกันการสร้างลิงก์สั้นที่เป็นอันตรายจำนวนมาก
  • การรายงานการใช้งานที่ผิด — ให้ผู้ใช้รายงานลิงก์ที่น่าสงสัย
  • หน้าตัวอย่าง — ตัวเลือกแสดงให้ผู้ใช้เห็นว่าลิงก์ไปที่ไหนก่อนการเปลี่ยนเส้นทาง

เรียนรู้เพิ่มเติมเกี่ยวกับ ความปลอดภัยของลิงก์ และ การป้องกันการฉ้อโกงการคลิก

คุณลักษณะเพิ่มเติม

นอกเหนือจากการย่อและการเปลี่ยนเส้นทางพื้นฐาน ตัวย่อลิงก์ URL การผลิตเพิ่มเติม:

สรุป

การออกแบบระบบตัวย่อลิงก์ URL เป็นแบบฝึกหัดที่ดีเพราะมันเริ่มต้นง่าย แต่เปิดเผยชั้นของความซับซ้อน: การสร้างรหัส การออกแบบฐานข้อมูล การแคชชิ่ง ไปป์ไลน์วิเคราะห์ และการป้องกันการใช้งานที่ผิด การทำความเข้าใจพื้นฐานเหล่านี้ช่วยได้ไม่ว่าคุณกำลังเตรียมตัวสำหรับสัมภาษณ์หรือสร้างเครื่องมือของคุณเอง

ต้องการใช้ตัวย่อลิงก์ URL การผลิตโดยไม่สร้างขึ้นหนึ่ง? เริ่มต้นกับ Linkly — สถาปัตยกรรมทั้งหมดที่อธิบายไว้ข้างต้น พร้อมใช้งานกับโดเมนที่กำหนดเอง การวิเคราะห์ และคุณลักษณะขั้นสูง

รับลิงก์สั้น 100 รายการและติดตามจำนวนคลิก 500 ครั้งต่อเดือนได้ฟรี