Zana ya Kutengeneza na Kuchambua Twitter Snowflake ID kwa Maelezo

Tengeneza na uchambue Twitter Snowflake IDs, vitambulisho vya kipekee vya 64-bit vinavyotumika katika mifumo iliyosambazwa. Zana hii inakuwezesha kuunda Snowflake IDs mpya na kuchambua zile zilizopo, ikitoa maelezo kuhusu muda wao, kitambulisho cha mashine, na vipengele vya nambari ya mfuatano.

Mwanasheria wa ID ya Snowflake

Mwanasheria wa ID ya Snowflake

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

Nyaraka

Snowflake ID Generator: Unda Unique Distributed System Identifiers

Nini Snowflake ID Generator?

Snowflake ID generator inaunda vitambulisho vya kipekee kwa mifumo iliyosambazwa, ambayo awali ilitengenezwa na Twitter kwa ajili ya kushughulikia usindikaji wa data kwa kiwango kikubwa. Huu ni generator wa ID wa kipekee unaozalisha nambari za 64-bit zinazojumuisha alama ya muda, ID ya mashine, na nambari ya mfuatano, kuhakikisha upekee katika mifumo iliyosambazwa bila uratibu kati ya seva.

Zana yetu ya bure ya mtandaoni ya Snowflake ID generator inakuwezesha kuunda na kuchambua Snowflake IDs mara moja, na kuifanya kuwa bora kwa wabunifu wanaofanya kazi na microservices, hifadhidata zilizotawanywa, na programu zenye kiwango cha juu cha kupitia.

Jinsi Snowflake ID Generation Inavyofanya Kazi

Snowflake IDs ni nambari za 64-bit zenye muundo ulioandaliwa kwa makini ambao unahakikisha upekee:

  • 41 bits: Alama ya muda (millisecond tangu enzi maalum)
  • 10 bits: ID ya Mashine (5 bits kwa ID ya kituo cha data, 5 bits kwa ID ya mfanyakazi)
  • 12 bits: Nambari ya mfuatano

Muundo huu wa ID iliyosambazwa unaruhusu uzalishaji wa takriban 4,096 IDs za kipekee kwa millisecond kwa kila mashine, na kuifanya kuwa bora kwa mifumo iliyosambazwa yenye kiwango cha juu cha kupitia.

Jinsi ya Kutumia Zana Yetu ya Snowflake ID Generator

Fuata hatua hizi rahisi ili kuunda Snowflake IDs za kipekee:

  1. Weka Enzi Maalum (Hiari): Tumia enzi ya kawaida ya Twitter (2010-11-04T01:42:54.657Z) au weka yako mwenyewe
  2. Sanidi IDs za Mashine: Ingiza ID ya mashine (0-31) na ID ya kituo cha data (0-31)
  3. Unda ID: Bonyeza "Unda" ili kuunda Snowflake ID mpya ya kipekee
  4. Tazama Matokeo: Angalia ID iliyoundwa na ufafanuzi wa vipengele vyake

Parse Snowflake IDs Zilizopo

Ili kufasiri Snowflake ID, ingiza katika uwanja wa "Parse ID" na bonyeza "Parse" ili kuona alama yake ya muda, ID ya mashine, na vipengele vya mfuatano.

Msingi wa Snowflake ID Generation

Algorithimu ya Snowflake ID inajenga vitambulisho vya kipekee kwa kutumia operesheni za bitwise:

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

Vipengele vya Msingi:

  • timestamp: Idadi ya milliseconds tangu enzi
  • datacenterId: Nambari ya 5-bit (0-31) inayotambulisha kituo cha data
  • workerId: Nambari ya 5-bit (0-31) inayotambulisha mashine ya mfanyakazi
  • sequence: Nambari ya 12-bit (0-4095) kwa IDs nyingi kwa millisecond

Mchakato wa Hesabu ya Snowflake ID

Algorithimu ya uzalishaji wa Snowflake ID inafuata hatua hizi sahihi:

  1. Pata Alama ya Muda ya Sasa: Pata wakati wa sasa kwa milliseconds
  2. Hakikisha Mpangilio wa Kihistoria: Thibitisha alama ya muda inazidi alama ya muda iliyotumika mwisho
  3. Shughulikia Alama ya Muda Ile Ile: Ikiwa alama ya muda inalingana na ya awali, ongeza nambari ya mfuatano
  4. Kinga Overflow: Ikiwa mfuatano unafikia 4096, subiri millisecond inayofuata
  5. Changanya Vipengele: Tumia operesheni za bitwise kuunda ID ya mwisho ya kipekee

Mchakato huu unahakikisha IDs zinazoongezeka kwa mpangilio ndani ya kila mashine huku ukihifadhi upekee wa kimataifa katika mifumo iliyosambazwa.

Matumizi na Maombi ya Snowflake ID

Snowflake IDs zinafanikiwa katika hali mbalimbali za kompyuta zilizotawanywa:

Matumizi Makuu

  1. Mifumo Iliyosambazwa: Unda IDs za kipekee katika mashine nyingi bila uratibu
  2. Usindikaji wa Data kwa Kiwango Kikubwa: Unda IDs zinazoweza kupangwa kwa seti kubwa za data
  3. Msingi wa Microservices: Hakikisha vitambulisho vya kipekee kati ya huduma tofauti
  4. Kugawanya Hifadhidata: Tumia vipengele vya alama ya muda au ID ya mashine kwa kugawanya data kwa ufanisi

Maombi ya Ukweli

  • Majukwaa ya Mitandao ya Kijamii: Twitter, Instagram kwa IDs za machapisho na watumiaji
  • Mifumo ya Biashara Mtandaoni: Ufuatiliaji wa maagizo na usimamizi wa akiba
  • Kukusanya Data za IoT: Kurekodi matukio ya vifaa na data za sensorer
  • Mifumo ya Fedha: Usindikaji wa miamala na nyaraka za ukaguzi

Mbadala wa Snowflake ID na Mlinganisho

Ingawa Snowflake IDs ni zenye nguvu, mifumo mingine ya uzalishaji wa ID wa kipekee ni pamoja na:

Mifumo ya ID Mbadala

  1. UUID (Universally Unique Identifier): Bora kwa uzalishaji wa kusambazwa bila mahitaji ya kupangwa
  2. IDs za Hifadhidata Zinazojiendeleza: Suluhisho rahisi lililozuiliwa kwa mifumo ya hifadhidata moja
  3. ULID (Universally Unique Lexicographically Sortable Identifier): Inafanana na Snowflake na uandishi wa base32
  4. NanoID: Generator ya nyuzi za kipekee salama kwa URL kwa ajili ya programu za wavuti

Mipaka na Maoni ya Snowflake ID

Kuelewa mipaka ya Snowflake ID husaidia katika utekelezaji sahihi:

Changamoto za Kawaida

  1. Masuala ya Usawazishaji wa Saa: Kutegemea wakati wa mfumo kunaweza kusababisha matatizo na marekebisho ya NTP au mabadiliko ya wakati wa majira
  2. Mipaka ya Mwaka 2079: Overflow ya alama ya muda ya 41-bit inahitaji mipango ya muda mrefu kwa mifumo ya kiwango kikubwa
  3. Usimamizi wa ID za Mashine: Kuhakikisha IDs za mashine za kipekee katika mifumo mikubwa iliyosambazwa kunahitaji uratibu
  4. Overflow ya Mfuatano: Hali za kiwango cha juu cha kupitia zinaweza kuchoma mfuatano wa 4096 kwa millisecond
  5. Mpangilio wa Kati ya Mashine: IDs ni monotonic kwa kila mashine lakini si kimataifa kati ya mashine zote

Historia ya Snowflake IDs

Snowflake IDs zilianzishwa na Twitter mwaka 2010 ili kutatua changamoto ya kuunda vitambulisho vya kipekee, vinavyoweza kupangwa kwa wakati katika kiwango kikubwa. Kadri idadi ya watumiaji wa Twitter na kiasi cha tweets kilivyoongezeka, IDs za kawaida za kujiendeleza zilikuwa hazitoshi kwa usanifu wao wa kusambazwa.

Mfumo huu tangu wakati huo umekubaliwa na kampuni kubwa za teknolojia ikiwa ni pamoja na Instagram, Discord, na majukwaa mengine mengi yanayohitaji uzalishaji wa ID unaoweza kupanuka kwa mifumo iliyosambazwa.

Mifano ya Kanuni ya Snowflake ID Generator

Tekeleza uzalishaji wa Snowflake ID katika lugha yako ya programu unayopendelea:

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('Clock moved backwards. Refusing to generate 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// Matumizi
55const generator = new SnowflakeGenerator();
56const id = generator.nextId(1, 1);
57console.log(`Generated Snowflake ID: ${id}`);
58
<?php class SnowflakeGenerator { private $epoch; private $datacenterIdBits; private $workerIdBits; private $sequenceBits; private $maxDatacenterId; private $maxWorkerId; private $workerIdShift; private $datacenterIdShift; private $timestampLeftShift; private $sequenceMask; private $dat