Splync ใช้ตัวระบุสองแบบสำหรับ ID ที่สำคัญ
ในฐานข้อมูลของ Splync ผู้ใช้และโปรเจกต์แต่ละรายการจะถูกระบุตัวตนด้วย ID สองแบบคือ UUID และเลขจำนวนเต็มเพิ่มอัตโนมัติ เลขจำนวนเต็มเพิ่มอัตโนมัติเป็นสิ่งที่หลายคนคุ้นเคย เป็นเสมือนตัวนับ: 1, 2, 3 เป็นต้น Splync ใช้เลขเหล่านี้ภายในฐานข้อมูลเซิร์ฟเวอร์เพื่อจัดระเบียบเกือบทุกตารางเพราะมันเรียบง่าย รวดเร็ว และมีประสิทธิภาพในการเชื่อมต่อ อย่างไรก็ตาม เราไม่เคยเปิดเผยตัวเลขภายในเหล่านี้กับแอป เช่น หากคุณเป็นผู้ใช้ที่สมัครเป็นคนที่ 42 ID ภายในฐานข้อมูลของคุณจะเป็น 42 แต่แอป iOS ของคุณจะไม่เห็น “42” แอปใช้ UUID แทน ตัวอย่างเดียวกันนี้ใช้กับโปรเจกต์ ID ของโปรเจกต์อาจเป็น "7" ในฐานข้อมูล แต่แอปจะระบุด้วย UUID ยาวเสมอ
UUID คืออะไร
UUID ย่อมาจาก Universally Unique Identifier Splync ใช้ UUID เวอร์ชัน 4 แบบแปรผัน 1 ซึ่งเป็นไปตามมาตรฐาน RFC 4122 — หนึ่งในมาตรฐานที่ได้รับการยอมรับอย่างแพร่หลาย เป็นสตริงที่สร้างขึ้นแบบสุ่มซึ่งดูเหมือน 949ca11c-a6ed-48a3-b40a-fa9727494917 UUID โดยทั่วไปจะเขียนเป็นตัวอักษรฐานสิบหก 32 ตัว แบ่งเป็นห้าส่วนโดยมีขีดคั่นระหว่างกลาง ถูกออกแบบให้มีความเป็นเอกลักษณ์ทั่วโลก หมายความว่าจะไม่เกิดการชนกันแม้ในเซิร์ฟเวอร์หรือฐานข้อมูลที่ต่างกัน ทางคณิตศาสตร์ มีการผสมผสานได้ประมาณ 16^32 = 2^128 แบบ อย่างไรก็ตาม เมื่อหกบิตถูกสงวนไว้สำหรับระบุแบบแปรผันและเวอร์ชัน จำนวน UUID เวอร์ชัน 4 แบบแปรผัน 1 ที่แตกต่างกันได้คือประมาณ 2^122 หรือประมาณ 5.3 x 10^36 ซึ่งเป็นจำนวนมหาศาลที่รับประกันความเป็นเอกลักษณ์ในทางปฏิบัติ
1 / 5,300,000,000,000,000,000,000,000,000,000,000,000 เล็กแค่ไหน
คู่ของ UUIDv4 มีโอกาสประมาณ 1 ใน 5.3 × 10^36 ที่จะตรงกัน ตัวเลขนั้นเล็กมากจนแทบจะจินตนาการไม่ได้ ลองนึกภาพการทอยลูกเต๋า 47 ลูกพร้อมกัน โอกาสที่จะได้เลขหนึ่งทั้งหมด — ทุกลูกออก “1” — อยู่ที่ประมาณ 1 ใน 6^47 หรือประมาณ 1 ใน 3.7 × 10^36 นั่นคือระดับเดียวกันกับการชนกันของ UUID ลองนึกภาพทุกคนบนโลก — ประมาณแปดพันล้านคน — ทอยลูกเต๋า 47 ลูกทุกมิลลิวินาทีเป็นเวลาหนึ่งล้านล้านปี นั่นคือประมาณ 2.5 × 10^32 ความพยายามทั้งหมด ถึงแม้ว่าจะทำทั้งหมด โอกาสที่ใครสักคนที่ไหนสักแห่งจะได้เลขหนึ่งทั้งหมดจะยังคงอยู่ที่ 1 ในหมื่น นั่นคือความเป็นไปได้น้อยมากที่ UUIDv4 สองตัวจะชนกัน มันไม่ใช่ “หายาก” มันผิดธรรมชาติอย่างยิ่ง — เป็นความบังเอิญที่อาจทำให้นักคณิตศาสตร์ตกกาแฟและเช็คจักรวาลเพื่อหาจุดผิดพลาด
การสร้าง UUID ง่ายไหม
เมื่อดูคร่าวๆ การสร้าง UUID อาจดูเหมือนง่าย — ท้ายที่สุดแล้วมันก็เป็นแค่สตริงอักษรและตัวเลขที่ดูสุ่ม แต่ลองเขียนด้วยตัวเองด้วยปากกาและกระดาษ คุณอาจจดได้ 36 ตัวอักษร แต่ถ้าทำซ้ำหลายพันครั้ง รูปแบบที่ชัดเจนจะปรากฏขึ้น อาจเป็นไปได้ว่าคุณชอบตัวเลขบางตัวเช่น 3 หรือ 8 และไม่ค่อยใช้ตัวอักษรเช่น x คอมพิวเตอร์สามารถตรวจจับความเอนเอียงเหล่านั้นได้ทันที แฮกเกอร์ที่มุ่งร้ายอาจวิเคราะห์พฤติกรรมของคุณและจำกัด “สตริงลับ” ที่ดูสุ่มของคุณในหนึ่งวัน ถัดมา หากคุณหันมาใช้คอมพิวเตอร์และเรียกใช้ฟังก์ชัน rand() ฟังก์ชันสุ่มคลาสสิกเพื่อสร้างแต่ละเลข นั่นก็ดีขึ้น — แต่ไม่ดีพอ ตัวสร้างตัวเลข “สุ่ม” หลายตัวในสภาพแวดล้อมการเขียนโปรแกรมทั่วไปเป็นการสุ่มเทียม ซึ่งหมายความว่ามันทำตามลำดับคณิตศาสตร์ที่คาดการณ์ได้เริ่มจากจุดเริ่มต้นภายใน ซึ่งมักจะขึ้นอยู่กับเวลาระบบ หากมีใครค้นพบหรือเดาจุดเริ่มต้นนั้นได้ พวกเขาสามารถจำลองค่าใดๆ ที่ตัวสร้างของคุณเคยสร้างได้
UUID สุ่มอย่างสมบูรณ์แบบแค่ไหน
ความสุ่มที่สมบูรณ์แบบไม่มีอยู่จริง — เช่นเดียวกับลูกเต๋าที่สมบูรณ์แบบไม่มีอยู่จริง หรือลูกเต๋าที่ทอยแบบสุ่มสมบูรณ์แบบไม่มีอยู่จริง ทุกกระบวนการทางกายภาพหรือดิจิทัลมีกฎเบื้องหลัง อย่างไรก็ตาม นักคณิตศาสตร์และวิศวกรได้ใช้เวลาหลายสิบปีในการออกแบบอัลกอริธึมที่ใกล้เคียงกับความสุ่มที่แท้จริง เมื่อ Splync สร้าง UUID เวอร์ชัน 4 ใหม่ มันไม่ได้แค่ “เลือกตัวเลขแบบสุ่ม” เหมือนการทอยลูกเต๋า มันขอเศษเสี้ยวของความคาดไม่ถึงจากระบบปฏิบัติการ — เช่น เวลาอันแม่นยำที่ CPU ของคุณทำงานเสร็จ เสียงรบกวนไฟฟ้าที่เบาภายในฮาร์ดแวร์ หรือความผันผวนของเวลาพื้นหลังในหน่วยความจำ เศษเสี้ยวเหล่านี้ถูกเก็บและรวมกันเป็นข้อมูล 128 บิต — ลำดับยาวของเลขศูนย์และหนึ่ง ผลลัพธ์คือรหัสที่แทบจะเป็นไปไม่ได้ที่ผู้ใช้แอปหรือผู้โจมตีที่อาจมุ่งร้ายจะเดาหรือทำซ้ำได้
แนวทางการใช้ตัวระบุคู่ของ Splync
Splync ใช้ UUID สำหรับตัวระบุที่สำคัญเช่น ID ผู้ใช้และ ID โปรเจกต์ เพราะมันสุ่มและปลอดภัยมาก ในเวลาเดียวกัน ภายในเซิร์ฟเวอร์ Splync แปลง UUID เหล่านั้นเป็นเลขจำนวนเต็มเพิ่มอัตโนมัติเพื่อการค้นหาและวิเคราะห์ที่รวดเร็วขึ้นในชุดข้อมูลขนาดใหญ่ แนวทางการใช้ตัวระบุคู่แบบนี้เป็นการสร้างสมดุลระหว่างความปลอดภัยและความสะดวก — ความเป็นส่วนตัวภายนอกกับประสิทธิภาพภายใน เป้าหมายของ Splync คือการเป็นแอปติดตามงบประมาณที่ปลอดภัย เรียบง่าย และไร้ความกังวล เบื้องหลัง UI ที่มองเห็นได้ เราเดินหน้าปรับปรุงสถาปัตยกรรมของเราให้ราบรื่น ปลอดภัย และฉลาดอย่างเงียบๆ ต่อไป