เครื่องมือสร้างและวิเคราะห์ Twitter Snowflake ID สำหรับข้อมูลเชิงลึก

สร้างและวิเคราะห์ Twitter Snowflake IDs ซึ่งเป็นตัวระบุที่ไม่ซ้ำกันขนาด 64 บิตที่ใช้ในระบบกระจาย เครื่องมือนี้ช่วยให้คุณสร้าง Snowflake IDs ใหม่และแยกวิเคราะห์ IDs ที่มีอยู่ โดยให้ข้อมูลเชิงลึกเกี่ยวกับส่วนประกอบของเวลา, ID เครื่อง, และหมายเลขลำดับ

เครื่องสร้าง Snowflake ID

เครื่องสร้าง Snowflake ID

Optional: Unix timestamp in milliseconds (defaults to current time)
📚

เอกสารประกอบการใช้งาน

Snowflake ID Generator: สร้างตัวระบุระบบที่ไม่ซ้ำกันแบบกระจาย

Snowflake ID Generator คืออะไร?

Snowflake ID generator สร้างตัวระบุที่ไม่ซ้ำกันสำหรับระบบกระจาย ซึ่งพัฒนาโดย Twitter เพื่อจัดการการประมวลผลข้อมูลขนาดใหญ่ เครื่องมือ unique ID generator ที่ทรงพลังนี้ผลิตจำนวนเต็ม 64 บิตที่ประกอบด้วย timestamp, machine ID และ sequence number ซึ่งรับประกัน ความไม่ซ้ำกันในระบบกระจาย โดยไม่ต้องประสานงานระหว่างเซิร์ฟเวอร์

เครื่องมือ Snowflake ID generator ออนไลน์ฟรีของเราช่วยให้คุณสามารถ สร้างและแยกวิเคราะห์ Snowflake IDs ได้ทันที ทำให้เหมาะสำหรับนักพัฒนาที่ทำงานกับไมโครเซอร์วิส, ฐานข้อมูลกระจาย และแอปพลิเคชันที่มีการประมวลผลสูง

วิธีการทำงานของการสร้าง Snowflake ID

Snowflake IDs เป็นจำนวนเต็ม 64 บิตที่มีโครงสร้างที่ออกแบบมาอย่างรอบคอบเพื่อรับประกันความไม่ซ้ำกัน:

  • 41 บิต: Timestamp (มิลลิวินาทีตั้งแต่ยุคที่กำหนดเอง)
  • 10 บิต: Machine ID (5 บิตสำหรับ ID ศูนย์ข้อมูล, 5 บิตสำหรับ ID คนงาน)
  • 12 บิต: Sequence number

โครงสร้าง ID แบบกระจายนี้ ช่วยให้สามารถสร้าง 4,096 ID ที่ไม่ซ้ำกันต่อมิลลิวินาทีต่อเครื่อง ทำให้เหมาะสำหรับระบบกระจายที่มีการประมวลผลสูง

วิธีการใช้เครื่องมือ Snowflake ID Generator ของเรา

ทำตามขั้นตอนง่ายๆ เหล่านี้เพื่อ สร้าง Snowflake IDs ที่ไม่ซ้ำกัน:

  1. ตั้งค่า Custom Epoch (ไม่บังคับ): ใช้ยุคเริ่มต้นของ Twitter (2010-11-04T01:42:54.657Z) หรือกำหนดของคุณเอง
  2. กำหนด Machine IDs: ป้อน machine ID (0-31) และ data center ID (0-31)
  3. สร้าง ID: คลิก "Generate" เพื่อสร้าง Snowflake ID ที่ไม่ซ้ำกันใหม่
  4. ดูผลลัพธ์: ดู ID ที่สร้างขึ้นและการแยกส่วนประกอบของมัน

แยกวิเคราะห์ Snowflake IDs ที่มีอยู่

เพื่อ ถอดรหัส Snowflake ID ให้ป้อนในช่อง "Parse ID" และคลิก "Parse" เพื่อดู timestamp, machine ID และส่วนประกอบ sequence

สูตรการสร้าง Snowflake ID

อัลกอริธึม Snowflake ID สร้างตัวระบุที่ไม่ซ้ำกันโดยใช้การดำเนินการแบบบิต:

1ID = (timestamp << 22) | (datacenterId << 17) | (workerId << 12) | sequence
2

ส่วนประกอบของสูตร:

  • timestamp: จำนวนมิลลิวินาทีตั้งแต่ยุคที่กำหนด
  • datacenterId: จำนวนเต็ม 5 บิต (0-31) ที่ระบุศูนย์ข้อมูล
  • workerId: จำนวนเต็ม 5 บิต (0-31) ที่ระบุเครื่องคนงาน
  • sequence: จำนวนเต็ม 12 บิต (0-4095) สำหรับ ID หลายตัวต่อมิลลิวินาที

กระบวนการคำนวณ Snowflake ID

อัลกอริธึมการสร้าง Snowflake ID ปฏิบัติตามขั้นตอนที่แม่นยำเหล่านี้:

  1. รับ Timestamp ปัจจุบัน: ดึงเวลาปัจจุบันในมิลลิวินาที
  2. ตรวจสอบลำดับเวลา: ยืนยันว่า timestamp เกิน timestamp ที่ใช้ล่าสุด
  3. จัดการกับ Timestamp เดียวกัน: หาก timestamp ตรงกับก่อนหน้า ให้เพิ่มหมายเลข sequence
  4. ป้องกันการล débordement: หาก sequence ถึง 4096 ให้รอจนถึงมิลลิวินาทีถัดไป
  5. รวมส่วนประกอบ: ใช้การดำเนินการแบบบิตเพื่อสร้าง ID ที่ไม่ซ้ำกันสุดท้าย

กระบวนการนี้รับประกัน ID ที่เพิ่มขึ้นอย่างต่อเนื่อง ภายในแต่ละเครื่องในขณะที่รักษาความไม่ซ้ำกันทั่วทั้งระบบกระจาย

กรณีการใช้งานและแอปพลิเคชันของ Snowflake ID

Snowflake IDs โดดเด่นในหลายสถานการณ์การคอมพิวเตอร์แบบกระจาย:

กรณีการใช้งานหลัก

  1. ระบบกระจาย: สร้าง ID ที่ไม่ซ้ำกันทั่วหลายเครื่องโดยไม่ต้องประสานงาน
  2. การประมวลผลข้อมูลปริมาณสูง: สร้าง ID ที่สามารถเรียงลำดับได้สำหรับชุดข้อมูลขนาดใหญ่
  3. สถาปัตยกรรมไมโครเซอร์วิส: รับประกันตัวระบุที่ไม่ซ้ำกันในบริการที่แตกต่างกัน
  4. การแบ่งส่วนฐานข้อมูล: ใช้ส่วนประกอบ timestamp หรือ machine ID สำหรับการแบ่งข้อมูลอย่างมีประสิทธิภาพ

แอปพลิเคชันในโลกจริง

  • แพลตฟอร์มโซเชียลมีเดีย: Twitter, Instagram สำหรับโพสต์และ ID ผู้ใช้
  • ระบบอีคอมเมิร์ซ: การติดตามคำสั่งซื้อและการจัดการสินค้าคงคลัง
  • การเก็บข้อมูล IoT: การบันทึกเหตุการณ์ของอุปกรณ์และข้อมูลเซ็นเซอร์
  • ระบบการเงิน: การประมวลผลธุรกรรมและเส้นทางการตรวจสอบ

ทางเลือกและการเปรียบเทียบ Snowflake ID

ในขณะที่ Snowflake IDs มีพลัง แต่ระบบ การสร้าง ID ที่ไม่ซ้ำกัน อื่นๆ ได้แก่:

ระบบ ID ทางเลือก

  1. UUID (Universally Unique Identifier): ดีที่สุดสำหรับการสร้างแบบกระจายโดยไม่มีข้อกำหนดในการเรียงลำดับ
  2. Auto-incrementing Database IDs: โซลูชันที่ง่ายซึ่งจำกัดอยู่ที่อินสแตนซ์ฐานข้อมูลเดียว
  3. ULID (Universally Unique Lexicographically Sortable Identifier): คล้ายกับ Snowflake โดยใช้การเข้ารหัส base32
  4. NanoID: เครื่องมือสร้างสตริงที่ไม่ซ้ำกันที่กะทัดรัดและปลอดภัยสำหรับ URL สำหรับแอปพลิเคชันเว็บ

ข้อจำกัดและข้อพิจารณาของ Snowflake ID

การเข้าใจ ข้อจำกัดของ Snowflake ID ช่วยในการดำเนินการอย่างเหมาะสม:

ความท้าทายทั่วไป

  1. ปัญหาการซิงโครไนซ์นาฬิกา: ความขึ้นอยู่กับเวลาของระบบอาจทำให้เกิดปัญหากับการปรับ NTP หรือการเปลี่ยนแปลงเวลาออมแสง
  2. ข้อจำกัดปี 2079: การล débordement ของ timestamp 41 บิตต้องการการวางแผนระยะยาวสำหรับระบบขนาดใหญ่
  3. การจัดการ Machine ID: การรับประกันว่า machine IDs ไม่ซ้ำกันทั่วทั้งระบบกระจายขนาดใหญ่ต้องการการประสานงาน
  4. การล débordement ของ Sequence: สถานการณ์ที่มีการประมวลผลสูงมากอาจทำให้ exhaust 4096 sequences ต่อมิลลิวินาที
  5. การจัดลำดับข้ามเครื่อง: IDs จะเพิ่มขึ้นตามลำดับภายในเครื่องแต่ละเครื่อง แต่ไม่ทั่วทั้งเครื่องทั้งหมด

ประวัติของ Snowflake IDs

Snowflake IDs ถูกนำเสนอโดย Twitter ในปี 2010 เพื่อแก้ปัญหาการสร้างตัวระบุที่ไม่ซ้ำกันที่สามารถเรียงลำดับตามเวลาได้ในระดับขนาดใหญ่ เมื่อฐานผู้ใช้และปริมาณทวีตของ Twitter เพิ่มขึ้นอย่างรวดเร็ว ID ที่เพิ่มขึ้นแบบดั้งเดิมไม่เพียงพอสำหรับสถาปัตยกรรมที่กระจายของพวกเขา

ระบบนี้ได้รับการนำไปใช้โดยบริษัทเทคโนโลยีชั้นนำรวมถึง Instagram, Discord และแพลตฟอร์มอื่นๆ ที่ต้องการ การสร้าง ID ที่สามารถขยายได้ สำหรับระบบกระจาย

ตัวอย่างโค้ด Snowflake ID Generator

ดำเนินการ การสร้าง Snowflake ID ในภาษาการเขียนโปรแกรมที่คุณชื่นชอบ:

1class SnowflakeGenerator {
2  constructor(epoch = 1288834974657, datacenterIdBits = 5, workerIdBits = 5, sequenceBits = 12) {
3    this.epoch = BigInt(epoch);
4    this.datacenterIdBits = datacenterIdBits;
5    this.workerIdBits = workerIdBits;
6    this.sequenceBits = sequenceBits;
7    this.maxDatacenterId = -1n ^ (-1n << BigInt(datacenterIdBits));
8    this.maxWorkerId = -1n ^ (-1n << BigInt(workerIdBits));
9    this.sequenceMask = -1n ^ (-1n << BigInt(sequenceBits));
10    this.workerIdShift = BigInt(sequenceBits);
11    this.datacenterIdShift = BigInt(sequenceBits + workerIdBits);
12    this.timestampLeftShift = BigInt(sequenceBits + workerIdBits + datacenterIdBits);
13    this.sequence = 0n;
14    this.lastTimestamp = -1n;
15  }
16
17  nextId(datacenterId, workerId) {
18    let timestamp = this.currentTimestamp();
19
20    if (timestamp < this.lastTimestamp) {
21      throw new Error('นาฬิกาเคลื่อนที่ถอยหลัง ปฏิเสธที่จะสร้าง id');
22    }
23
24    if (timestamp === this.lastTimestamp) {
25      this.sequence = (this.sequence + 1n) & this.sequenceMask;
26      if (this.sequence === 0n) {
27        timestamp = this.tilNextMillis(this.lastTimestamp);
28      }
29    } else {
30      this.sequence = 0n;
31    }
32
33    this.lastTimestamp = timestamp;
34
35    return ((timestamp - this.epoch) << this.timestampLeftShift) |
36           (BigInt(datacenterId) << this.datacenterIdShift) |
37           (BigInt(workerId) << this.workerIdShift) |
38           this.sequence;
39  }
40
41  tilNextMillis(lastTimestamp) {
42    let timestamp = this.currentTimestamp();
43    while (timestamp <= lastTimestamp) {
44      timestamp = this.currentTimestamp();
45    }
46    return timestamp;
47  }
48
49  currentTimestamp() {
50    return BigInt(Date.now());
51  }
52}
53
54// การใช้งาน
55const generator = new SnowflakeGenerator();
56const id = generator.nextId(1, 1);
57console.log(`Generated Snowflake ID: ${id}`);
58
require 'time' class SnowflakeGenerator def initialize(datacenter_id, worker_id, sequence = 0) @datacenter_id = datacenter_id @worker_id = worker_id @sequence = sequence @last_timestamp = -1 @epoch = 1288834974657 @datacenter_id_bits = 5 @worker_id_bits = 5 @sequence_bits = 12 @max_datacenter_id = -1 ^ (-1 << @datacenter_id_bits) @max_worker_id = -1 ^ (-1 << @worker_id_bits) @worker_id_shift = @sequence_bits @datacenter_id_shift = @sequence_bits + @worker_id_bits @timestamp_left_shift = @sequence_bits + @worker_id_bits + @datacenter_id_bits @sequence_mask = -1 ^ (-1 << @sequence_bits) end def next_id timestamp = (Time.now.to_f * 1000).to_i raise 'นาฬิกาเคลื่อนที่ถอยหลัง' if timestamp < @last_timestamp if timestamp == @last_timestamp @sequence = (@sequence + 1) & @sequence_mask timestamp = til_next_millis(@last_timestamp) if @sequence == 0 else @sequence = 0 end @last_timestamp = timestamp ((timestamp - @epoch) << @timestamp_left_shift) | (@datacenter_id << @datacenter_id_shift) | (@worker_id << @worker_id_shift) | @sequence end private def til_next_millis(last_timestamp) timestamp = (Time.now.to_f * 1000).to_i timestamp = (Time.now.to_f * 1000).to_i while timestamp <= last_timestamp timestamp end end ## การใช้งาน generator = SnowflakeGenerator.new(
🔗

เครื่องมือที่เกี่ยวข้อง

ค้นพบเครื่องมือเพิ่มเติมที่อาจมีประโยชน์สำหรับการทำงานของคุณ

เครื่องมือสร้าง UUID สำหรับแอปพลิเคชันต่างๆ

ลองใช้เครื่องมือนี้

Nano ID Generator - สร้าง ID ที่ไม่ซ้ำกันและปลอดภัยสำหรับ URL

ลองใช้เครื่องมือนี้

เครื่องสร้างชื่อโปรเจคแบบสุ่ม

ลองใช้เครื่องมือนี้

เครื่องสร้าง User Agent แบบสุ่มสำหรับการทดสอบการพัฒนาเว็บ

ลองใช้เครื่องมือนี้

เครื่องสร้างคีย์ API แบบสุ่ม: สร้างสตริงที่ปลอดภัยยาว 32 ตัวอักษร

ลองใช้เครื่องมือนี้

เครื่องสร้างหมายเลข CPF สำหรับการทดสอบและพัฒนา

ลองใช้เครื่องมือนี้

เครื่องสร้างตำแหน่งสุ่ม: ผู้สร้างพิกัดทั่วโลก

ลองใช้เครื่องมือนี้

เครื่องมือสร้าง MD5 Hash

ลองใช้เครื่องมือนี้

เครื่องสร้าง KSUID ที่มีประสิทธิภาพสำหรับตัวระบุที่ไม่ซ้ำกันในระบบ

ลองใช้เครื่องมือนี้

เครื่องสร้างชื่อทารกพร้อมหมวดหมู่ - ค้นหาชื่อที่สมบูรณ์แบบ

ลองใช้เครื่องมือนี้