Pāriet uz saturu

Sniega Pārslas ID Ģenerators - Izveidot Unikālus Izkliedētus ID

Bezmaksas Sniega Pārslas ID ģenerators un parsētājs. Ģenerēt unikālus 64-bitu ID izkliedētām sistēmām. Parsēt esošos ID, lai izvilktu laika zīmogu, mašīnas ID un secību.

Sniega Pārslas ID Ģenerators

Izvēles: Unix laika zīmogs milisekundēs (noklusējuma - pašreizējais laiks)

Mašīnas ID (0-31)

Datu Centra ID (0-31)

Secības Numurs (0-4095)

Sniega Pārslas ID
2094810859837587456
00111010001001001000011011000001101010001
00000
00000
000000000000
Laika zīmogs (41 biti)
Datu Centra ID (5 biti)
Mašīnas ID (5 biti)
Secības Numurs (12 biti)
Ielādes kalkulators...
📚

Dokumentācija

Kas ir Snowflake ID ģenerators?

Snowflake ID ģenerators izveido unikālu 64 bitu skaitli no laika zīmoga, mašīnas identifikatora un secības numura. Twitter šo formātu izveidoja 2010. gadā, lai katram tvītam piešķirtu identifikatoru, ko varētu vienlaikus izveidot daudzi serveri, nevienam no tiem nejautājot: “Vai šis numurs jau ir izmantots?” Šis rīks izveido vienu Snowflake ID no ievadītajām vērtībām un parāda, kā šīs vērtības aizpilda 64 bitus.

Kā darbojas Snowflake ID ģenerators

Ģenerators saņem četras ievades vērtības:

  • Laika zīmogs: Unix laika zīmogs milisekundēs. Atstājiet lauku tukšu, lai izmantotu pašreizējo laiku.
  • Mašīnas ID: vesels skaitlis no 0 līdz 31 (5 biti). Tas ir Twitter sākotnējais “darbinieka ID”.
  • Datu centra ID: vesels skaitlis no 0 līdz 31 (5 biti).
  • Secības numurs: vesels skaitlis no 0 līdz 4095 (12 biti), ko izmanto, lai atšķirtu vienā milisekundē izveidotus ID.

Rīks apvieno četras vērtības vienā 64 bitu ID. Pēc tam tas rezultātu parāda binārā formā, sadalot to laika zīmoga, datu centra, mašīnas un secības segmentos.

Laika zīmogu mēra no noteikta sākumpunkta, ko sauc par Twitter laikmetu: 2010. gada 4. novembris, 1:42:54,657 UTC jeb 1 288 834 974 657 milisekundes pēc Unix laikmeta. Šis ģenerators neļauj mainīt šo sākumpunktu. Katrs tā izveidotais ID tiek mērīts no šī viena fiksētā datuma.

Snowflake ID struktūra

Snowflake ID ir 64 bitu vesels skaitlis, kas sadalīts četrās daļās, sākot ar nozīmīgāko bitu:

BitiLauksDiapazons
1Zīmes bitsvienmēr 0
41Laika zīmogsmilisekundes kopš Twitter laikmeta
5Datu centra ID0–31
5Mašīnas (darbinieka) ID0–31
12Secības numurs0–4095

Sākuma bits vienmēr ir 0, tāpēc Snowflake ID vienmēr ir pozitīvs skaitlis. 41 bitu laika zīmoga un 12 bitu secības lauki ir abas daļas, kas Snowflake ID padara noderīgu kārtošanai: vēlāk izveidotiem ID ir lielāks laika zīmoga segments, tāpēc tie tiek sakārtoti aiz agrākajiem ID.

Snowflake ID formula

Ģenerators izveido ID, izmantojot šo formulu:

d=t−1288834974657d = t - 1288834974657

I=(d<<22)∣(c<<17)∣(m<<12)∣sI = (d << 22) \mathbin{|} (c << 17) \mathbin{|} (m << 12) \mathbin{|} s

kur d ir delta, t — ievadītais laika zīmogs milisekundēs, I — gatavais ID, c — datu centra ID, m — mašīnas ID un s — secības numurs.

<< ir bitu nobīde pa kreisi. Skaitļa nobīde pa kreisi par 22 bitiem ir līdzvērtīga tā reizināšanai ar 2²² jeb 4 194 304. Nobīdes apjomi (22, 17, 12) tieši izriet no lauku platuma: secības lauks ir 12 bitus plats, tāpēc mašīnas ID atrodas 12 bitus augstāk; mašīnas lauks ir 5 bitus plats, tāpēc datu centra ID atrodas 17 bitus augstāk (12 + 5), un tā tālāk.

Kā aprēķināt Snowflake ID: aprēķina piemērs

Pieņemsim, ka kāds ievada:

  • Laika zīmogs: 1 288 834 975 657 (tieši 1 000 ms pēc Twitter laikmeta)
  • Datu centra ID: 1
  • Mašīnas ID: 1
  • Secības numurs: 0

Solis 1 — Atrodiet delta. No laika zīmoga atņemiet laikmetu: 1 288 834 975 657 − 1 288 834 974 657 = 1 000.

Solis 2 — Nobīdiet katru lauku vajadzīgajā pozīcijā.

  • Laika zīmogs: 1 000 << 22 = 4 194 304 000
  • Datu centra ID: 1 << 17 = 131 072
  • Mašīnas ID: 1 << 12 = 4 096
  • Secība: 0

Solis 3 — Apvienojiet ar bitu operāciju VAI. Tā kā nobīdītie lauki nepārklājas, to saskaitīšana dod tādu pašu rezultātu kā apvienošana ar VAI operāciju:

4 194 304 000 + 131 072 + 4 096 + 0 = 4 194 439 168

Tas ir Snowflake ID šai ievadei. Rīka rezultātu skatā tā pati 64 bitu binārā virkne tiek atkārtoti sadalīta 41 bitu laika zīmoga blokā, 5 bitu datu centra blokā, 5 bitu mašīnas blokā un 12 bitu secības blokā, tāpēc skaitļa struktūra paliek redzama.

Kur izmanto Snowflake ID

Twitter izveidoja šo formātu, lai tūkstošiem datubāzu mašīnu piešķirtu tvītiem unikālus, aptuveni pēc laika sakārtotus ID, neizmantojot centrālu skaitītāju, kas būtu jāpārbauda katram serverim. Vēlāk Discord un Instagram ziņojumiem un ziņām ieviesa līdzīgas 64 bitu ID struktūras. Tāda pati ideja tiek izmantota datubāzu horizontālajā sadalīšanā, e-komercijas sistēmu pasūtījumu ID un sadalītu lietotņu notikumu žurnālos. Tā ir piemērota jebkurai videi, kur daudzas mašīnas neatkarīgi piešķir ID, bet tiem joprojām jābūt aptuveni sakārtotiem pēc laika.

Snowflake ID ierobežojumi

Ražošanas Snowflake ģenerators parasti uztur savu nepārtraukti ejošu pulksteni: tas palielina secības numuru katram vienā milisekundē izveidotajam ID un gaida nākamo milisekundi, kad secība sasniedz 4 095. Šis rīks nesaglabā stāvokli starp aprēķiniem. Tas izveido vienu ID no ievadītajām vērtībām, tāpēc ir noderīgs formāta izpētei, taču atšķiras no aktīva ražošanas servisa.

Šim risinājumam neatkarīgi no tā, kurš serviss to ievieš, ir fiksēti ierobežojumi:

  • Fiksēts laikmets: šis ģenerators pieņem tikai laika zīmogus, kas ir vienādi ar vai vēlāki par 2010. gada 4. novembris (Twitter laikmetu). Agrākus datumus nevar kodēt.
  • Laika zīmoga augšējā robeža: 41 bitu laika zīmoga lauks beidzas aptuveni 2080. gada jūlijā. Pēc tam delta no laikmeta vairs neietilpst 41 bitos.
  • Secības ierobežojums: viena mašīna tajā pašā milisekundē var izsniegt tikai 4 096 atšķirīgus ID (0–4095), pirms vērtības atkārtojas.
  • Mašīnu adreses telpa: ja mašīnas ID un datu centra ID katram izmanto 5 bitus, izvietojumā var piešķirt 1 024 atšķirīgas mašīnu identitātes (32 × 32), neradot sadursmes.
  • Lokāla, nevis globāla kārtība: ID tiek pareizi sakārtoti savstarpēji tikai tad, ja tie nāk no mašīnām ar sinhronizētiem pulksteņiem. Pulksteņu nobīdes starp mašīnām var izjaukt stingru secību pēc laika.

Snowflake ID vēsture

Twitter paziņoja par Snowflake ID formātu 2010. gadā kā aizstājēju vienkāršiem automātiski inkrementējamiem datubāzes ID, kas nav mērogojami daudziem neatkarīgiem datubāzu serveriem. Nosaukums radās no idejas, ka, tāpat kā īstas sniegpārslas, divi ģenerētie ID nav vienādi. Vēlāk šis risinājums tika publicēts kā atvērtā pirmkoda programmatūra, un citas lielas platformas, kurām vajadzēja to pašu — unikālus, kārtojamus ID, ko vienlaikus ģenerē daudzas mašīnas, — to pārņēma pārveidotā formā.

Biežāk uzdotie jautājumi

Kas ir Snowflake ID? Snowflake ID ir 64 bitu skaitlis, ko veido laika zīmogs, mašīnas identifikators un secības numurs. Tas ir izstrādāts tā, lai daudzas mašīnas varētu ģenerēt unikālus ID, savstarpēji nesaskaņojoties.

Kāda ir Snowflake ID formula? id = ((timestamp − epoch) << 22) | (dataCenterId << 17) | (machineId << 12) | sequence, kur laikmets ir fiksēts sākuma datums un << ir bitu nobīde pa kreisi.

Vai šajā ģeneratorā var mainīt laikmetu? Nē. Šis rīks vienmēr mēra laika zīmogu no fiksētā Twitter laikmeta — 2010. gada 4. novembris. Nav lauka cita sākuma datuma iestatīšanai.

Vai šis rīks dekodē esošu Snowflake ID? Nē. Tas tikai izveido jaunu ID no ievadītā laika zīmoga, mašīnas ID, datu centra ID un secības numura, pēc tam parāda šī jaunā ID bitu sadalījumu.

Cik Snowflake ID viena mašīna var ģenerēt milisekundē? Līdz 4 096, jo secības lauks ir 12 bitus plats (vērtības no 0 līdz 4 095).

Līdz kuram gadam šis ģenerators var izveidot derīgus laika zīmogus? Aptuveni līdz 2080. gada jūlijam. 41 bitu laika zīmoga laukā var ietilpt ne vairāk kā aptuveni 69,7 gadi, skaitot no fiksētā 2010. gada laikmeta; pēc tam vērtība pārsniedz lauka ietilpību.

Atsauces

  1. “Snowflake paziņojums.” Twitter Engineering Blog, 2010.
  2. "Snowflake ID." Wikipedia, https://en.wikipedia.org/wiki/Snowflake_ID